流式传输x264丢包

时间:2014-10-06 12:37:22

标签: encoding ffmpeg x264

我编写程序,我使用x264作为编码器。 我使用以下参数:

av_opt_set (codecContextH264[numberCoder]-> priv_data, "profile", "baseline", 0);
av_opt_set (codecContextH264[numberCoder]-> priv_data, "preset", "ultrafast", 0);
av_opt_set (codecContextH264[numberCoder]-> priv_data, "tune", "zerolatency", 0);
codecContextH264[numberCoder]-> bit_rate =bitrate;
codecContextH264[numberCoder]-> bit_rate_tolerance=bitrate-5000;
codecContextH264[numberCoder]-> width = w;
codecContextH264[numberCoder]-> height = h;
codecContextH264[numberCoder]-> time_base.den = fps;
codecContextH264[numberCoder]-> time_base.num = 1;
codecContextH264[numberCoder]-> pix_fmt = PIX_FMT_YUV420P;
codecContextH264[numberCoder]-> gop_size = fps*3;
codecContextH264[numberCoder]-> keyint_min = fps*3;
codecContextH264[numberCoder]-> max_b_frames = 0; 
codecContextH264[numberCoder]-> slices = (int) (w*h)/1500+1;

我只使用I帧和P帧。 我将使用哪些x264设置可能会丢失P帧? 也许x264没有这样的机会?! 我读过如果使用“基础”配置文件,可能会丢失P帧... 请帮助。

1 个答案:

答案 0 :(得分:1)

您可以尝试将gop_sizekeyint_min设置为0 - 这应该会产生仅包含I帧的流,但这样会失去压缩感。

进一步基于您使用RTP over UDP的假设 - 如果您在丢包率高的环境中进行流式传输,为什么不使用TCP或实施某种优质服务,如果您看到RTP序列号你错过了强迫源发出新的关键帧。