将原始H264 NALU流包裹到像MP4这样的容器中

时间:2012-04-29 05:36:28

标签: ffmpeg directshow x264 ms-media-foundation dxva

我有一个应用程序使用x264 x264_encoder_encode动态发送原始h264 NALU。我通过普通的TCP获取它们,所以我没有错过任何帧。 我需要能够使用Windows中的硬件加速(DXVA2)在客户端中解码此类流。我一直在努力寻找一种方法来使用FFMPEG来实现这一点。也许尝试Media Foundation或DirectShow可能更容易,但他们不会采用原始​​的H264。 我要么:

  1. 更改服务器应用程序中的代码以返回mp4流。我不熟悉x264。我可以通过调用x264_encoder_encode来获取原始H264,方法是回答这个问题:How does one encode a series of images into H264 using the x264 C API?我怎样才能从这个到MP4包裹的东西,同时仍能实时流式传输

  2. 我可以在接收器上用mp4标头包装它并将其输入可以使用DXVA播放它的东西。我不知道该怎么做

  3. 我可以找到另一种方法来加速使用带有FFMPEG的DXVA或其他以原始格式获取它的方法。

  4. 一个重要的限制是我需要能够在显示每个解码帧之前对其进行预处理。任何解码和显示在一个步骤中的解决方案对我来说都不适用

    我对任何一种解决方案都没问题

1 个答案:

答案 0 :(得分:2)

我相信你应该能够通过Media Foundation使用H.264数据包。本书的第298页有一个示例http://www.docstoc.com/docs/109589628/Developing-Microsoft-Media-Foundation-Applications#,它使用带有Media Foundation的HTTP流。

我自己只是在学习媒体基金会,并且正在尝试对你做类似的事情,在我的情况下我想使用来自RTP数据包的H.264有效载荷,而根据我的理解,这将需要自定义{{3 }}。从我读过的内容中也可以访问已解码的帧,因为将组件链接到拓扑中似乎具有完全的灵活性。