2013-11-13 3 views
1

В настоящее время у меня есть поток GStreamer, отправляемый по беспроводной сети. У меня есть аппаратный кодер, который скрывает необработанное несжатое видео в транспортном потоке MPEG2 с кодировкой h.264. Оттуда я передаю данные в конвейер GStreamer, который отправляет поток через RTP. Все работает, и я вижу видео, однако мне было интересно, есть ли способ ограничить эффект потери пакетов, настроив определенные параметры на кодировщик.Streaming Video On Lossy Network

Два основных параметра, на которые я смотрю, - это размер 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, в противном случае кодировать IDR в первом кадре каждой N-й GOP.

В принципе, я стараюсь дать декодеру как можно больше шансов создать плавное воспроизведение видео, даже учитывая тот факт, что сеть может отбрасывать пакеты. Увеличивает ли I частота кадров? А именно, поскольку I-кадр не имеет данных относительно предыдущих или будущих пакетов, отправит «полный» образ помощи? Какова была бы «идеальная» настройка для двух вышеуказанных параметров, учитывая тот факт, что данные передаются через сеть с потерями? Обратите внимание, что я могу принять небольшое (~ 10%) увеличение полосы пропускания, если это означает, что видео стало более плавным, чем сейчас.

Я также понимаю, что это сильно зависит от декодера, поэтому для аргумента предположим, что моим основным декодером на стороне клиента является VLC.

Заранее благодарим за помощь.

ответ

2

Увеличение количества I-Frames поможет ускорить восстановление декодера. Вы также можете взглянуть на ограничение пропускной способности потока, поскольку с большей вероятностью он сможет получить данные. Вам нужно будет посмотреть размер данных, потому что качество видео может сильно пострадать, так как I-Frames значительно больше, чем P или B-кадры, и кодер будет продолжать нацеливаться на указанный бит.

Если у вас есть некоторый контроль над воспроизведением (даже при локальном захвате потока и повторной передаче в VLC), вы можете добавить FEC, который будет исправлять потерянные пакеты.

+0

Спасибо за головы, но, к сожалению, у меня нет контроля над клиентом. Похоже, я могу установить размер GOP и IDR как на 1 (см. Выше определения), и это будет отправлять только I фреймы, и это поможет любому клиентскому декодеру обновить изображение, исправить? –

+0

Да, но учтите дополнительные накладные расходы. Видео будет выглядеть значительно хуже, чем стандартная 15-кратная GOP. Вы можете играть с вашими значениями, чтобы увидеть, что дает лучшее видео с наименьшей потерей. Выполнение ключевого кадра каждые 5 или 6 кадров, вероятно, будет выглядеть лучше и иметь разумное время восстановления. Это над контролируемой сетью? – jeremy

+0

Благодарим за рекомендации по частоте I-кадра и размеру GOP. Я буду играть со значениями и посмотреть, что произойдет. Должен ли я видеть значительное увеличение пропускной способности при изменении частоты I-кадров? Причина, по которой я спрашиваю, это то, что я не сейчас, поэтому мне также интересно, неправильно ли этот код устанавливает эти ставки. Кроме того, чтобы ответить на ваш вопрос, у меня нет контроля над сетью, но если бы я это сделал, каковы некоторые параметры, которые я мог бы применить или использовать для улучшения качества моего потока? –