2013-04-21 62 views

回答

11

如果您的目標是解碼的基本H.264流,則代碼將具有以確保流被提取,該codec-specific-data被提供給主要是SPSPPS數據和幀數據連同時間標記的編解碼器被提供給編解碼器。在所有的Android版本中,最常見的接口是OMXCodec,它是底層OMX組件的抽象。在Gingerbread(Android 2.3)和ICS(Android 4.0.0)中,如果你想創建一個解碼器,最好的方法是創建一個OMXCodec組件,並通過MediaSource接口抽象你的代碼,也就是你的包裝代碼被建模爲MediaSourceOMXCodec從該源讀取並執行解碼。

鏈接至Android 2.3視頻解碼器創建:http://androidxref.com/2.3.6/xref/frameworks/base/media/libstagefright/AwesomePlayer.cpp#1094

鏈接到Android 4.0.0視頻解碼器創建:http://androidxref.com/4.0.4/xref/frameworks/base/media/libstagefright/AwesomePlayer.cpp#1474

的主要挑戰將是以下幾點:

  1. 模型的輸入作爲MediaSource

  2. 閱讀包裝代碼,從編解碼器中讀取緩衝區並進行處理並將其釋放回編解碼器。

爲了簡化起見,你可以看看stagefright命令行可執行代碼爲http://androidxref.com/4.0.4/xref/frameworks/base/cmds/stagefright/stagefright.cpp#233

然而,如果你的程序是基於豆形軟糖(Android的4.1.x版,4.2.x版)開始,那麼這些都是輕微更簡化。從您的JNI代碼中,您可以創建一個MediaCodec組件並採用相同的方式進行解碼。要在同一集成到你的程序,你可以參考SimplePlayer實現在http://androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/SimplePlayer.cpp#316

+0

我用Android上,主要模擬AwesomePlayer.cpp libstagefright硬件解碼視頻,調用OMXCodec,它是在Android 4.0的好,但在Android 4.1,它是黑色的屏幕,你有一些建議嗎? – crossle 2013-10-09 08:23:48

+0

@CrossleSong在「Android 4.1」即「JellyBean」中,顯示流水線經歷了一些重大改進。你能分享一些日誌進一步分析嗎?我建議從'SurfaceTexture','HwComposer'和'Layer'模塊進行日誌記錄。一方面說明:由於某種原因你的'圖層'標記爲安全嗎? – Ganesh 2013-10-22 15:35:26

+0

謝謝你的答案。我解決了這個問題,因爲ANativeWindow問題。缺少native_window_set_scaling_mode(mNativeWindow.get(),mVideoScalingMode); – crossle 2013-10-23 02:19:37