Использование Wowza для приема MPEG-TS потока и проблемы с MPTS

2015-02-05 19:04:00

Одним из наиболее распространенных сценариев применения Wowza Streaming Engine является прием MPEG-TS транспортного потока ( обычно это мультикаст ) от спутникового или кабельного ресивера ( IP головной станции ) и ретрансляция потока в сети интернет, с транскодированием или без транскодирования ( если исходный поток кодирован H.264/AAC|MP3 ). MPEG-TS поток может быть двух типов SPTS и MPTS . На стороне Wowza адрес потока задается в .stream файле и поток публикуется посредством добавления в файл автоматического старта . C MPTS все выглядит абсолютно так же , только необходимо указать PID программы , которую предполагается ретранслировать. Но если с первым типом потоков проблем обычно не возникает , то результат с MPTS может сильно разочаровать - видео изображение периодически напополняется потерянными пикселями как на примере ниже:

При приеме этого же канала в SPTS потоке аналогичных проблем не наблюдается . Причиной в данном случае являются настройки UDP буфера приема заданные в операционной системе по умолчанию. И в Linux и в Windows размер буфера по умолчанию недостаточен для приема MPEG-TS потока в стандарте MPTS . Для Linux значения буферов задаются командой : echo 3000000 > /proc/sys/net/core/rmem_default echo 3000000 > /proc/sys/net/core/rmem_max или прописываются в файле sysctl.conf. Второй путь позволит сохранить изменения и после перезагрузки системы. Для Windows значение буфера задается в registry : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters Необходимо создать значение типа DWORD - "DefaultReceiveWindow" и задать в нем размер буфера в десятичной форме числа. Размер буфера зависит от битрейта входного потока и количества программ в MPTS. Можно исходить величины равной суммарному битрейту MPTS потока в байтах.