有没有办法直接从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