在有损网络上流式传输视频

时间:2013-11-13 18:47:53

标签: networking encoding gstreamer h.264 rtp

目前,我通过无线网络发送了GStreamer流。我有一个硬件编码器,可以将原始的未压缩视频转换为带有h.264编码的MPEG2传输流。从那里,我将数据传递给GStreamer管道,该管道通过RTP发送流。一切正常,我正在看视频,但我想知道是否有办法通过调整编码器上的某些参数来限制数据包丢失的影响。

我正在看的两个主要参数是GOP Size和I帧率。两者都在编码器(Sensoray 2253)的文档中进行了总结,如下所示:

  

V4L2_CID_MPEG_VIDEO_GOP_SIZE:   整数范围0到30.默认设置为0表示使用编解码器默认值   GOP大小。仅捕获。

     

V4L2_CID_MPEG_VIDEO_H264_I_PERIOD:   整数范围0到100.仅适用于H.264编码。默认设置为0   仅将第一帧编码为IDR,否则在第一帧编码IDR   每个第N GOP。

基本上,即使考虑到网络可能丢弃数据包这一事实,我也试图给解码器提供尽可能好的机会来创建流畅的视频播放。增加I帧速率会这样做吗?也就是说,由于I帧没有相对于先前或未来数据包的数据,是否会发送“完整”图像帮助?鉴于数据是通过有损网络发送的,上述两个参数的“理想”设置是什么?请注意,如果视频比现在更流畅,我可以接受轻微(~10%)的带宽增加。

我也明白这是高度依赖于解码器的,所以为了论证,让我们说客户端的主要解码器是VLC。

提前感谢所有帮助。

1 个答案:

答案 0 :(得分:2)

增加I帧的数量将有助于解码器更快地恢复。您可能还希望考虑限制流的带宽,因为它更有可能通过数据流。您需要观察数据大小,因为您的视频质量会受到很大影响,因为I帧比P帧或B帧大得多,编码器将继续以指定的比特率为目标。

如果您对播放有一定的控制权(甚至本地捕获流并重新传输到VLC),您可以添加FEC来纠正丢失的数据包。