2016-03-28 11 views
1

tek SurfaceView farklı "bölümlerini" seçeneğini kullanarak, aynı anda iki video akışı işlemek mümkün mü?İki video akışını aynı anda tek bir SurfaceView üzerinde oluşturmak mümkün mü?

İki videonun aynı anda iki SurfaceView özelliğini kullanarak görüntüleyen örnek kod hazırladım, ancak iki videonun aynı SurfaceView sürümünde çalınmasının mümkün olup olmadığını merak ediyorum.

MediaPlayer'u kullanarak, SurfaceHolder veya Surface öğesini ekran olarak ayarlayabilirsiniz. Eğer (prepare ikinci MediaPlayer bu çalıştığınızda sadece bir IllegalStateException aynı Yüzey sonuçlarına hem MediaPlayer s ayarlayarak, Ancak

@Override 
public void surfaceCreated(SurfaceHolder holder) 
{ 
    mediaPlayerTop.setDisplay(holder); 
    mediaPlayerBottom.setDisplay(holder); 

    play(); 
} 

: Ben kodu ben surfaceCreated yöntemin iç olacağını soruyorum neyi elde etmek inanmak muhtemelen her yerde birbirleriyle örtüştüklerini görmezden geliyor, çünkü ben hiçbir yere konum belirleyemem. Temelde

, ben mümkün elde etmek çalışıyorum ne?

cevap

4

Evet, ancak bazı çaba gerektirir.

Temel plan, MediaPlayer'ın çıkışını gelen her çerçeveyi bir GLES yapısına dönüştüren bir SurfaceTexture'a yönlendirmektir. Daha sonra bunu SurfaceView'a, görünümün yarısını dolduran bir rect çizerek geçirirsiniz. Diğer MediaPlayer için de aynı şeyi yapıyorsun.

İhtiyaç duyduğunuz parçalar Grafika, ör. "kameradan gelen doku" Etkinlik, kamera önizlemesinden bir video akışı alır, bir GLES yapısına dönüştürür ve onu bir Yüzey Görünümü'ne dönüştürür.

Sadece iki MediaPlayer'ın çıktısını SurfaceViews'a ayırmak çok daha kolay, ancak daha az esnektir.

Yüzeyler, üretici-tüketici çiftinde son noktalardır. Her seferinde yalnızca bir yapımcı olabilir, bu nedenle iki MediaPlayers'ı tek bir SurfaceView'a yönlendiremezsiniz.

İlgili konular