2013-04-21 66 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