2014-10-06 5 views
1

Я пишу программу, в которой я использую 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

Вы можете попробовать установить gop_size и keyint_min на 0 - это должно привести к потоку с только I кадрами, но такой тип потеряет ощущение сжатия как такового.

Дальше основывается на предположении, что вы используете RTP через UDP - если вы выполняете потоковую передачу в среде с высокой степенью потери пакетов, почему бы не использовать TCP или реализовать какой-либо качественный сервис, если вы видите, что последовательность RTP номера отсутствуют, вы вынуждаете источник выпускать новый ключевой кадр.