6

Son zamanlarda Android'e başarılı bir şekilde video kod çözücü yerleştirdim. Ayrıca çıkışı bir yüzey görünümünde bıraktı ve çıktıyı yerel API'leri kullanarak kontrol etti. Şimdi sıradaki görev, oynatma, duraklatma, akış vb., Diğer bir deyişle medya oynatıcısının diğer özellikleridir. Tüm bu işlevsellikler zaten android multimedya çerçevesinde tanımlandığı için, bu bir yeniden çalışma olacaktır. Kod çözücümüzü bir eklenti haline getirebileceğimizi ve Android'in multimedya çerçevesine entegre edebileceğimizi duydum. Ben aynı konuda googled rağmen, aynı konuda herhangi bir bilgi bulmak zor. Bu nedenle, okuyuculardan herhangi birinin yukarıdaki sorun için bir bağlantı veya çözüm önerisi önermesini rica ediyorum. Şimdiden teşekkürler, cevabınızı bekliyor.Android: Bir kod çözücüyü çoklu ortam çerçevesine entegre etme

cevap

14

Android SF çerçevesinde, codec'ler media_codecs.xml aracılığıyla kaydedilir. Standart android dağıtımında, bir media_codecs.xml örneği here bulunabilir. Tüm görsel-işitsel bileşenler OMX bileşenleri olarak kayıtlıdır.

1. Video dekoder kaydolmak için

Codec Kaydı, sen <Decoders> listesi altında yeni bir giriş eklemek gerekir. Kodekinizin her zaman alındığından emin olmak için, lütfen kodlayıcınızın belirli MIME türü için ilk giriş olarak listelendiğinden emin olun. Bir H.264 kod çözücüsü için örnek giriş aşağıdaki gibi olabilir.

<Decoders> 
    <MediaCodec name="OMX.ABC.XYZ.H264.DECODER" type="video/avc" > 
     <Quirk name="requires-allocate-on-input-ports" /> 
     <Quirk name="requires-allocate-on-output-ports" /> 
    </MediaCodec> 
    <MediaCodec name="OMX.google.h264.decoder" type="video/avc" /> 

,

a. OMX.ABC.XYZ.H264.Decoder, bileşeninizin adı

b. video/avc, bileşeninizin MIME türüdür. Bu örnekte, bir AVC/H.264 video kod çözücüsünü belirtir.

c.İkinci 2 ifade, bileşenlerin quirks veya özel gereksinimlerini belirtmektedir. Verilen örnekte, requires-allocate-on-input-ports, bileşenin tüm giriş bağlantı noktalarına arabellekleri ayırmayı tercih ettiği Stagefright çerçevesine işaret eder. Benzer şekilde, diğer quirk, bileşenin de çıkış portlarına ayırmayı tercih edeceğini bildiriyor. Sistemdeki desteklenen quirks listesi için, OMXCodec.cpp dosyasındaki OMXCodec::getComponentQuirks işlevine başvurabilirsiniz. Bu tuhaflıklar, daha sonra bileşenleri oluşturmak ve başlatmak için çerçeve tarafından okunan bayraklara dönüştürülür.

Örnek resimde, OMX bileşeninizin varsayılan Google tarafından uygulanan video kod çözücüsünden önce kayıtlı olduğu gösterilmiştir.

NOT: Bir uç cihazında bu çalışıyor, bu girişin son media_codecs.xml dosyada yansıtılır sağlamak zorunda kalacaktır.

2.

OMX Çekirdek Kayıt sen Stagefright çerçeve ile OMX Core'u kayıt olabilir, senin bileşeni oluşturun ve doğru fabrika yöntemi çağrılır emin olmak için.

Yeni bir çekirdek kaydetmek için, son sisteminizde /system/lib adresinde yer alan libstagefrighthw.so adlı yeni bir kütüphane oluşturmanız gerekecektir. Bu kütüphane, dlsym tarafından bakılacak olan createOMXPlugin sembolünü gösterecektir.

OMX çekirdeğin kayıt böylece: OMXMaster dahili addPlugin("libstagefrighthw.so") çağırır addVendorPlugin çağırır. addPlugin'da, createOMXPlugin, makeComponentInstance, destroyComponentInstance vb. Için diğer işlev göstergelerinin başlatıldığı kullanılarak aranacaktır.

OMX çekirdeği başlatıldıktan sonra, kendi bileşeninizi android çerçevesinde çalıştırmaya hazırsınız. OMXMaster için başvuru here bulunabilir.

Bu değişiklikler ile video kod çözücünüz android sahne alanı çerçevesine entegre edilmiştir.

+0

Cevabınız için çok teşekkürler. Ancak biraz kafam karıştı. – Zax

+0

Kod çözülecek bir girdi dosyası seçmek için bir dosya gezgininin bulunduğu bir proje var ve giriş dosyasını çözmek için bir kod çözme düğmesi var. Yukarıdaki adımlara nasıl geçebilirim? Cevabını bekliyorum. Şimdiden teşekkürler. – Zax

+0

@Zax Burada başka bir konuya cevap verdim http://stackoverflow.com/questions/15356629/how-to-create-a-stagefright-plugin – Ganesh