Потоковое видео в кодировке h.264 по UDP - PullRequest
10 голосов
/ 29 сентября 2010

Я не слишком много знаю о h.264, но дело в том, что у меня есть это видео в h.264 в контейнере mp4, который я хотел бы транслировать по UDP.

У меня простой вопрос, есть ли какие-нибудь хитрости, которые я могу, возможно, сделать при кодировании видео, чтобы оно получалось достаточно терпимым к некоторой "легкой" потере пакетов?

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

Если быть более точным, я провел несколько экспериментов и понял, что, просто удалив 1024 байта из потока видео, я делаю его полностью "неиграемым" с точки зрения потери и т.

Что бы я хотел, чтобы оно терпело такие потери света, возможно ли это?

Спасибо

Nelson

1 Ответ

10 голосов
/ 10 ноября 2010

Это зависит от того, какие данные вы теряете.Некоторые данные в потоке H264 не являются данными, которые могут быть потеряны.Например, если ваш эксперимент, в котором вы отбросили 1024 байта, оказался первым 1024 байтом, который вы отправили, то вы, вероятно, отбросили свой набор параметров последовательности и набор параметров изображения (SPS / PPS), который в основном является информацией, которая говорит декодеру, какинтерпретировать поступающую информацию.Вы также, вероятно, не можете просто удалить случайные 1024 байта из потока;как правило, H264 пакетируется, чтобы такого рода вещи не происходили в любом случае.

Таким образом, H264 содержит некоторые небольшие фрагменты данных, которые на самом деле не «отбрасываются»;многие из потоковых протоколов, такие как RTSP, проясняют это, в частности, указав, что НЕ ДОЛЖНЫ отправлять такого рода информацию через транспортный канал с потерями, а вместо этого во время обмена SDP (что происходит по TCP).

Что касается потери- допуск идет, у H264 действительно есть функции, которые должны помочь допускать потери (ASO, FMO и т. д.), но на практике большинство кодеров не поддерживают их.Если вы можете, я бы использовал x264;их потоковая конфигурация с низкой задержкой якобы хорошо работает даже при потере пакетов до 20% и более.Если ваш H264 уже закодирован, то делать особо нечего.Ваше видео уже закодировано, и вам придется транслировать его как есть.

...