【发布时间】:2013-05-03 15:09:00
【问题描述】:
我编写了一个实时推送过滤器,它可以获取包含 h.264 视频和 aac 音频的 mpeg-ts 流。我设置了一个 directshow 管道并配置了输出引脚。我可以渲染 h.264 流,但是我在渲染中得到了伪像,从这个截图可以看出,当使用 videotestsrc 和“球”模式从 gstreamer 流式传输时。这个截图应该只包含一个黑色的白点背景。另外两个是动画播放时出现的“剩菜”。
如果我流式传输 MPEG-2 并相应地更改流水线,则模式渲染不会出错。我尝试使用on msdn 描述的设置来配置引脚,都使用 H264 和 AVC1 显式提供序列头等。我仍然得到相同类型的工件。
一个有趣的事情是,伪影大多以与 I-Frame 到达相同的频率出现,如果我们只发送 I-Frame (key-int-max=1),伪影就会完全消失。
此外,当 I 帧间隔为 60 时,即每 2 秒,错误似乎出现在图像的上半部分。当我们每隔一帧更改为一个 I-Frame (key-int-max=2) 时,伪影仅出现在图像顶部的窄条中。
以下 gstreamer 管道生成视频流:
videotestsrc live-source=true pattern=ball ! video/x-raw-yuv,format=(fourcc)I420,width=1366,height=768,framerate=30/1 ! timeoverlay halign=left valign=bottom shaded-background=true ! x264enc bitrate=4096 tune=zerolatency ! h264parse ! queue ! mux. audiotestsrc wave=ticks volume=0.2 ! voaacenc ! mux. mpegtsmux name=mux ! udpsink host=<ip> port=<port>
这是管道的样子:
本例中的配置是majortype = MEDIATYPE_Video,subtype = MEDIASUBTYPE_H264,formattype = FORMAT_MPEG2Video。没有专门提供sequenceheader等。
所以问题是,这些类型的工件是一些常见配置问题的症状吗?
【问题讨论】:
标签: directshow h.264 gstreamer live-streaming mpeg2-ts