我正在开发基于媒体基础的h264播放器,以便从我自己的自定义媒体源播放h264视频和HE-AAC音频。
我的原型不播放视频,只播放音频。 如何解决?
这是问题所在。我打开我的网址。
框架创建并初始化我的媒体源,然后创建并初始化我的2个流,音频和视频。
然后它会询问视频样本,直到到达文件末尾。 日志填充CMFTransformDetours :: ProcessOutput失败hr = 0xC00D6D72 MF_E_TRANSFORM_NEED_MORE_INPUT
然后在我的视频流发送MEEndOfStream后,框架会要求更多的音频样本,最后将状态转换为播放,并开始播放音频。
框架试图在我的视频流中找不到什么?
如果由内置流源打开,则相同的播放器代码可以播放相同的文件。 mftrace.exe表示当内置流源播放文件时,第一个视频样本比我的流源播放时长38个字节(所有其他样本长度完全相同)。 38字节正好是我视频的MF_MT_MPEG_SEQUENCE_HEADER的大小(即00 00 01 + SPS + 00 00 01 + PPS)。我试过将MF_MT_MPEG_SEQUENCE_HEADER值添加到我的第一帧,但没有帮助。
系统提供的流源为视频样本设置未记录的属性,GUID = {19124E7C-AD4B-465F-BB18-20186287B6AF},值为8字节二进制值,如“09 00 00 00 29 0d 00 00”,并更改每一帧 - 那是什么,它可能是什么原因?
我还能尝试什么?
有没有关于MF h264解码器究竟在输入上需要什么的文档?
提前致谢。
答案 0 :(得分:1)
我的代码中存在两个主要问题。
我的视频流描述符的MF_NALU_LENGTH_SET属性设置为TRUE。这就是h264解码器跳过我所有视频样本的原因 - 它在它们上面寻找MF_NALU_LENGTH_INFORMATION属性,但它不在那里。
简单的修复方法 - 从描述符中删除MF_NALU_LENGTH_SET,没有该数据,解码器就可以了。