2

我有一个应用程序,它使用 x264 x264_encoder_encode 即时发送编码生成的原始 h264 NALU。我通过普通的 TCP 获取它们,所以我不会丢失任何帧。我需要能够使用 Windows 中的硬件加速 (DXVA2) 在客户端中解码这样的流。我一直在努力寻找一种使用 FFMPEG 使其工作的方法。也许尝试 Media Foundation 或 DirectShow 可能更容易,但它们不会采用原始​​ H264。我要么需要:

  1. 更改服务器应用程序的代码以返回 mp4 流。我对x264没有那么有经验。我可以通过调用 x264_encoder_encode 来获取原始 H264,方法是遵循以下问题的答案:如何使用 x264 C API 将一系列图像编码为 H264?我怎样才能从这个转到 MP4 中包装的东西,同时仍然能够实时流式传输它

  2. 我可以在接收器处用 mp4 头文件将其包装起来,然后将其输入到可以使用 DXVA 播放的东西中。我不知道该怎么做

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

一个重要的限制是我需要能够在显示每个解码帧之前对其进行预处理。任何一步完成解码和显示的解决方案都不适合我

两种解决方案我都可以

4

1 回答 1

2

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

我自己只是在学习 Media Foundation,并且正在尝试对您做类似的事情,在我的情况下,我想使用 RTP 数据包中的 H.264 有效负载,并且据我所知,这将需要自定义IMFSourceReader。从我读过的内容中也应该可以访问解码的帧,因为将组件链接在一起形成拓扑似乎具有完全的灵活性。

于 2012-05-07T04:58:59.620 回答