2012-04-29 84 views
2

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

  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加速它。

一个重要的限制是,我需要能够显示它之前预先处理每个解码帧。任何没有在一个单一的步骤解码并显示解决方案是行不通的,我

我会被罚款与任何一个解决方案

+1

'DXVA'的美丽和速度基本上假定视频呈现给用户,而不是从视频内存回读到RAM中。准备好从视频内存中读取数据可能会出现意想不到的速度,并且为演示之外的目的而消除快速硬件辅助解码的全部想法。 – 2012-05-01 12:05:06

+0

是啊......我想我现在就想接受这个事实。无论如何在DXVA的某个阶段预处理帧。也许写一个媒体基础过滤器或类似的东西? – cloudraven 2012-05-02 23:07:23

回答

2

我相信你应该能够使用H.264包了与媒体基金会的电线。本书http://www.docstoc.com/docs/109589628/Developing-Microsoft-Media-Foundation-Applications#的第298页上有一个示例,它在Media Foundation中使用HTTP流。

我只学习媒体基金会自己,我试图做类似的事情给你,在我的情况下,我想使用H.264有效载荷从一个RTP数据包,并从我的理解,这将需要定制IMFSourceReader。访问解码帧也应该可以从我读过的内容中看到,因为在将组件链接到拓扑中似乎具有完全的灵活性。

+0

感谢您的链接。那本书很不错。我非常确定,如果我建立媒体基础改造,我将能够做我想做的事。我还没有完成,但看起来很有希望 – cloudraven 2012-06-02 01:14:26