【问题标题】:Wrap a stream of raw H264 NALUs into a container like MP4将原始 H264 NALU 流包装到 MP4 等容器中
【发布时间】:2012-05-09 08:14:20
【问题描述】:

我有一个应用程序可以发送原始 h264 NALU,这些 NALU 是使用 x264 x264_encoder_encode 动态编码生成的。我通过普通的 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 或其他以原始格式获取它的东西。

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

两种解决方案都可以

【问题讨论】:

  • DXVA 的美观和速度基本上假设视频是呈现给用户的,而不是从视频内存读回 RAM。请做好准备,从视频内存中读取可能会显得异常缓慢,并且会扼杀用于演示以外的其他目的的快速硬件辅助解码的整个想法。
  • 是的...我想我现在必须接受这个事实。无论如何在某个阶段使用 DXVA 对帧进行预处理。也许写一个媒体基础过滤器或类似的东西?

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


【解决方案1】:

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

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

【讨论】:

  • 感谢您的链接。那本书还不错。我很确定如果我建立一个媒体基础转换,我将能够做我想做的事。我还没做,但看起来很有希望
猜你喜欢
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
相关资源
最近更新 更多