Android: Come integrare un decoder per il framework multimediale

Di recente ho portato un video decoder per android con successo. Anche scaricato l’output su una surfaceview e controllato l’output utilizzando native API. Ora il prossimo obiettivo è quello di implementare play, pausa, streaming ecc. cioè le altre funzioni del lettore multimediale. Facendo questo sarà un rework come tutte queste funzionalità sono già definite in android framework multimediale. Ho sentito che siamo in grado di rendere il nostro decoder come un plug-in e integrare Android framework multimediale. Anche se ho cercato su google per quanto riguarda la stessa, non riuscivo a trovare nessuna info in merito alla stessa. Così ho gentilmente richiedere i lettori a proporre alcune relativo link o una soluzione per il problema di cui sopra. Grazie in anticipo, in attesa di vostra risposta.

OriginaleL’autore Zax | 2013-03-11

One Reply
  1. 16

    In Android SF quadro, i codec sono registrati attraverso media_codecs.xml. In android standard di distribuzione, un esempio media_codecs.xml può essere trovato qui. Audio-visual componenti sono registrati come OMX componenti.

    1. Codec Di Registrazione

    Per registrare il tuo video decoder, si dovrebbe aggiungere una nuova voce sotto <Decoders> elenco. Per garantire che il codec è sempre preso, si prega di assicurarsi che il codec è elencato come primo elemento di specifiche MIME tipo. Un esempio di voce per un H. 264 decoder potrebbe essere come di seguito.

    <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" />

    Dove,

    a.OMX.ABC.XYZ.H264.Decoder è il nome del componente

    b. video/avc è il MIME tipo di componente. In questo esempio, si denota un AVC /H. 264 video decoder.

    c.Il prossimo 2 affermazioni denotano la quirks o requisiti speciali dei componenti. Nell’esempio proposto, requires-allocate-on-input-ports indica il Stagefright quadro che la componente preferisce allocare il buffer su tutti è la porta di ingresso. Analogamente, gli altri quirk, informa che il componente preferiscono assegnare e sulle porte di uscita. Per una lista dei supportati quirks nel sistema, si potrebbe fare riferimento alla funzione OMXCodec::getComponentQuirks in OMXCodec.cpp file. Queste peculiarità si traducono in cui bandiere sono poi letto dal framework per creare e inizializzare i componenti.

    Nell’esempio In figura, si è dimostrato che il OMX componente è registrato prima della default Google attuato video decoder.

    NOTA: Se si cerca questo su un dispositivo, sarà necessario verificare che questa voce si riflette nel finale media_codecs.xml file.

    2. OMX Core Registrazione

    Di creare il componente e verificare che il corretto metodo factory viene richiamato, si può avere per registrare il tuo OMX Core con il Stagefright quadro.

    La registrazione di un nuovo nucleo, si dovrà creare una nuova libreria di nome libstagefrighthw.so che si trova alla /system/lib nel tuo sistema. Questa libreria dovrà esporre un createOMXPlugin simbolo che sarà guardato da dlsym.

    La registrazione del OMX core è così: OMXMaster richiama addVendorPlugin che internamente richiama addPlugin("libstagefrighthw.so"). In addPlugin, il createOMXPlugin sarà recuperato con quali altri puntatori a funzione per makeComponentInstance, destroyComponentInstance ecc vengono inizializzati.

    Una volta che il OMX core è inizializzato, si è pronti per eseguire il proprio componente all’interno del framework android. Il riferimento per OMXMaster può essere trovato qui.

    Con queste modifiche, il tuo video decoder è integrato in android stagefright quadro.

    Grazie mille per la risposta. Però io sono un po ‘ confuso.
    Dire che ho un progetto in cui vi è un esploratore di file per selezionare un file di input per la decodifica e decodificare un pulsante per decodificare il file di input. Come faccio a procedere verso la procedura di cui sopra? in attesa di vostra risposta. Grazie in anticipo.
    Ho risposto in un altro thread qui stackoverflow.com/questions/15356629/…
    Grazie mille per il vostro aiuto.
    Inizialmente si può costruire libstagefrighthw.so e sostituire le librerie in /system/lib. Dopo la sostituzione della libs, si richiede di riavviare mediaserver e voilà!… le modifiche dovrebbero funzionare bene. Dal successivo totale, le modifiche saranno automaticamente parte del sistema di generazione e system.img che non richiede ulteriori passaggi sul tuo conto. Spero che questo aiuta.

    OriginaleL’autore Ganesh

Lascia un commento