2015-09-03 142 views
4

我正在開發Android硬件加速視頻解碼器,用於解碼實時H264 Annex B流。經過一番研究,似乎我需要弄髒手才能做到這一點。我找到了幾個關鍵字,如OMXCodec,Android的OS stagefright和ffmpeg的stagefright,MediaCodec API,GStreamer。同時我也瞭解到 - 硬件不可知的實現無法支持所有供應商的硬件。在這個階段,所有這些都讓我感到非常困惑,因爲我沒有找到任何直接的資源來推進它們中的任何一個。我的要求是 -用於H264流的Android硬件加速視頻解碼器

加速的視頻解碼器
    1. Android的硬件支持至少對於高通的Snapdragon,三星的Exynos和Tegra的
    2. 執行必須在本地C/C++層(不是Java層)
    3. 支持從Android 4.1.x開始Jellybean就足夠了
    4. 無需執行後續階段 - 像渲染,因爲它們已經在工作。只需要解碼輸入緩衝區併產生解碼輸出緩衝區即可繼續到現有的管道。

    我試圖從Android的stagefright的AwesomePlayer.cpp,SimplePlayer.cpp和ffmpeg stagefright的命令行可執行代碼中獲得一些提示。但是沒有什麼比我選擇和處理這些東西更有意義。

    我該怎麼辦?有沒有任何有用的資源來獲得清晰的直覺?

    在此先感謝!

  • 回答

    2

    我已經使用MediaCodec API最近實現了這樣一個系統。不幸的是,這個API沒有在NDK中公開,所以它只能從Java層訪問。

    我找到的最好的資源是這套指南:

    http://bigflake.com/mediacodec/

    既然你已經實現這個在NDK那麼我想你需要寫一個薄的Java庫,做了硬性要求與MediaCodec API交互,然後通過來自C++層的JNI調用它。

    如果您忘記FFMPEG路線,請注意其許可證,這對分佈式軟件來說是相當嚴格的。

    祝你好運!

    +0

    感謝您的建議。是的,我也被告知要避免ffmpeg的許可證問題。我還提出了'MediaCodec API的JNI接口方法',但如果我可以在純C/C++層中完成,那將會更好。有一個問題,你是否需要做額外的工作來支持不同廠商的硬件?或者你的實現是硬件獨立的? –

    +0

    從理論上講,MediaCodec API是硬件不可知的,事實上我迄今已經注意到了這一點 - 它已經在我嘗試過的每一種設備上工作過。 –

    +1

    僅供參考我正在進行編碼和解碼,並使用API​​級別18中引入的MediaCodec功能。由於您只需要解碼,因此可能會回到API級別16. –

    相關問題