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
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.
Cevabınız için çok teşekkürler. Ancak biraz kafam karıştı. – Zax
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
@Zax Burada başka bir konuya cevap verdim http://stackoverflow.com/questions/15356629/how-to-create-a-stagefright-plugin – Ganesh