2

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

我正在查看的两个主要参数是 GOP 大小和 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,否则在每个第 N 个 GOP 的第一帧编码 IDR。

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

我也知道这是高度依赖解码器的,所以为了争论,假设我在客户端的主要解码器是 VLC。

提前感谢所有帮助。

4

1 回答 1

2

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

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

于 2013-11-13T18:57:22.040 回答