我有一个 MF 拓扑,可以捕获视频和音频并将其编码为 H264,然后将其写入 MPEG4 接收器。但是,问题是我的 H264 编码器(英特尔 QuickSync H264 编码器)没有在其输出类型中定义 MF_MT_MPEG_SEQUENCE_HEADER 的值。因此,当我设置 MPEG4 接收器的视频媒体类型时,没有定义序列头并且接收器无法正确完成,如 MPEG4 接收器文档中所述:
https://msdn.microsoft.com/en-us/library/windows/desktop/dd757763(v=vs.85).aspx
四处搜索后,我了解到我需要获取 MF_MT_MPEG_SEQUENCE_HEADER 属性的 SPS 和 PPS 值。我不确定如何获得这些。我的应用程序仅适用于 Windows 7,但在 Windows 8 中,您似乎只需设置 MF_MPEG4SINK_SPSPPS_PASSTHROUGH 属性即可让接收器从输入样本中获取 SPS 和 PPS(请参阅上面的链接)。除了获取此值之外,我对单个帧样本不感兴趣,目前我的应用程序代码不查看单个 H264 样本。
在 Windows 7 上从 MF H264 流获取 SPS 和 PPS 值的简单方法是什么?
最佳答案
我可以准确地解释如何做到这一点。但我相信如果你不明白为什么会让人困惑。我有另一篇文章非常详细地解释了这些概念,在理解比特流格式后,编写代码来实现这一点应该是微不足道的。
您应该特别注意 AVCC 部分
Possible Locations for Sequence/Picture Parameter Set(s) for H.264 Stream
关于h.264 - 如何在 Win7 中为 MPEG4 Sink 计算 MF_MT_MPEG_SEQUENCE_HEADER?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28930607/