有沒有辦法直接從JNI
層訪問libstagefright.so
解碼H.264
流Android 2.3或更高版本?訪問StageFright.so直接解碼來自Android的JNIlayer的H.264流
回答
如果您的目標是解碼的基本H.264
流,則代碼將具有以確保流被提取,該codec-specific-data
被提供給主要是SPS
和PPS
數據和幀數據連同時間標記的編解碼器被提供給編解碼器。在所有的Android
版本中,最常見的接口是OMXCodec
,它是底層OMX
組件的抽象。在Gingerbread(Android 2.3)和ICS(Android 4.0.0)中,如果你想創建一個解碼器,最好的方法是創建一個OMXCodec
組件,並通過MediaSource
接口抽象你的代碼,也就是你的包裝代碼被建模爲MediaSource
和OMXCodec
從該源讀取並執行解碼。
鏈接至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
的主要挑戰將是以下幾點:
模型的輸入作爲
MediaSource
。閱讀包裝代碼,從編解碼器中讀取緩衝區並進行處理並將其釋放回編解碼器。
爲了簡化起見,你可以看看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
- 1. 解碼H.264沒有流
- 2. h.264 udp流解碼
- 3. 來自RTSP流的H.264解碼錯誤日誌
- 4. 接收和解碼H.264實時流中的Android
- 5. 用於解碼H.264 RTSP流的庫
- 6. h.264字節流解析
- 7. 在Android上實時編碼H.264流
- 8. Openmax on Android for H.264解碼器?
- 9. Javacv:解碼H.264「活」流從RED5服務器未來的Android設備上
- 10. 如何使用MediaCodec類來解碼H.264流
- 11. 瞭解H.264流的NAL單元
- 12. H.264編解碼器
- 13. iOS流媒體直播h.264視頻
- 14. 在Android上解碼H.264(AVC)比特流?
- 15. 編碼/解碼具有不同參數的H.264流
- 16. H.264流標頭
- 17. WPF GUI中的H.264流
- 18. C++中的開源H.264解碼器
- 19. 對來自Google Glass的實況視頻流的H.264硬件編碼
- 20. 如何將來自攝像機的輸入圖像編碼爲H.264流?
- 21. H.264實時流媒體
- 22. 如何中繼h.264流?
- 23. 流H.264 + AAC,以在GStreamer
- 24. H.264解碼器配置記錄的格式取自.mp4
- 25. 調諧FFmpeg H.264解碼器
- 26. 使用FFmpeg無法解碼H.264流(Annex.B)
- 27. 使用MediaCodec解碼h.264流,dequeueOutputBuffer總是返回-1
- 28. iPhone中的H 264流的SPS值爲
- 29. 直接在GPU上將FBO紋理編碼爲H.264視頻
- 30. 修改MP4流中的H.264級別
我用Android上,主要模擬AwesomePlayer.cpp libstagefright硬件解碼視頻,調用OMXCodec,它是在Android 4.0的好,但在Android 4.1,它是黑色的屏幕,你有一些建議嗎? – crossle 2013-10-09 08:23:48
@CrossleSong在「Android 4.1」即「JellyBean」中,顯示流水線經歷了一些重大改進。你能分享一些日誌進一步分析嗎?我建議從'SurfaceTexture','HwComposer'和'Layer'模塊進行日誌記錄。一方面說明:由於某種原因你的'圖層'標記爲安全嗎? – Ganesh 2013-10-22 15:35:26
謝謝你的答案。我解決了這個問題,因爲ANativeWindow問題。缺少native_window_set_scaling_mode(mNativeWindow.get(),mVideoScalingMode); – crossle 2013-10-23 02:19:37