6

最近我已經成功地將視頻解碼器移植到了android。還將輸出轉儲到surfaceview並使用本地API檢查輸出。接下來的任務是實現播放,暫停,流媒體等,即媒體播放器的其他功能。這樣做將是一個返工,因爲所有這些功能都已在android多媒體框架中定義。我聽說我們可以將我們的解碼器作爲插件並將其集成到Android的多媒體框架中。雖然我GOOGLE了同樣的,我幾乎找不到任何有關信息。所以我懇請任何讀者爲上述問題建議一些相關鏈接或解決方案。在此先感謝,等待您的回覆。Android:如何將解碼器集成到多媒體框架

回答

14

在Android SF框架中,編解碼器通過media_codecs.xml註冊。在標準的android發行版中,例如media_codecs.xml可以找到here。所有視聽組件都註冊爲OMX組件。

1編解碼器註冊

要註冊您的視頻解碼器,你就必須下<Decoders>列表中添加新條目。爲確保您的編解碼器始終處於待用狀態,請確保您的編解碼器被列爲特定MIME類型的第一個條目。 H.264解碼器的示例條目如下。

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

其中,

一個。 OMX.ABC.XYZ.H264.Decoder是您的組件的名稱

b。 video/avc是組件的MIME類型。在這個例子中,它表示一個視頻解碼器。

c。接下來的兩條語句分別表示您的組件的quirks特殊要求。在給出的示例中,requires-allocate-on-input-portsStagefright框架指示組件優選在其所有輸入端口上分配緩衝區。同樣,其他quirk通知組件也將更喜歡分配它的輸出端口。有關係統中支持的quirks的列表,請參閱OMXCodec.cpp文件中的功能OMXCodec::getComponentQuirks。這些怪癖轉化爲標誌,然後由框架讀取標誌以創建和初始化組件。

在示例說明中,顯示您的OMX組件在默認 Google之前註冊的視頻解碼器。

注意:如果你想這樣的一個終端設備上,則必須確保該項目被反映在最終media_codecs.xml文件。

2. OMX核心登記

要創建組件,並確保正確工廠方法被調用時,你可能Stagefright框架註冊OMX核心。

要註冊一個新的內核,您必須創建一個名爲libstagefrighthw.so的新庫,該庫位於您的最終系統中的/system/lib。這個庫將不得不公開一個createOMXPlugin符號,該符號將被dlsym查找。

OMX芯的登記是這樣的:OMXMaster調用addVendorPlugin其內部調用addPlugin("libstagefrighthw.so")。在addPlugin中,將查找createOMXPlugin,使用它來初始化makeComponentInstance,destroyComponentInstance等的其他函數指針。

一旦OMX內核被初始化,您就可以在android框架中運行自己的組件。 OMXMaster的參考可以找到here

隨着這些變化,您的視頻解碼器被集成到android stagefright框架中。

+0

非常感謝您的回覆。不過,我有點困惑。 – Zax 2013-03-12 05:08:29

+0

說我有一個項目,其中有一個文件資源管理器來選擇一個輸入文件解碼和一個解碼按鈕來解碼輸入文件。我如何着手上述步驟?等待你的回覆。提前致謝。 – Zax 2013-03-12 05:18:46

+0

@Zax我在這裏的另一個線程上回答了這個問題http://stackoverflow.com/questions/15356629/how-to-create-a-stagefright-plugin – Ganesh 2013-03-12 13:41:10