Pull to refresh

Вещание видеофайлов с помощью VLC multicast. С теорией.

Reading time4 min
Views53K
По просьбам переписываю статью с добавлением теоретический знаний. Итак, пара определений:


Multicast (англ. групповая передача) — специальная форма широковещания, при которой копии пакетов направляются определённому подмножеству адресатов. Технология IP Multicast использует адреса с 224.0.0.0 до 239.255.255.255. Поддерживается статическая и динамическая адресация. Примером статических адресов являются 224.0.0.1 — адрес группы, включающей в себя все узлы локальной сети, 224.0.0.2 — все маршрутизаторы локальной сети. Диапазон адресов с 224.0.0.0 по 224.0.0.255 зарезервирован для протоколов маршрутизации и других низкоуровневых протоколов поддержки групповой адресации. Остальные адреса динамически используются приложениями. Для определения членов различных групп в локальной сети маршрутизатор использует протокол IGMP. Один из маршрутизаторов подсети периодически опрашивает узлы подсети, чтобы узнать, какие группы используются приложениями узлов. На каждую группу генерируется только один ответ в подсети. Для того чтобы стать членом новой группы, узел получателя инициирует запрос на маршрутизатор локальной сети. Сетевой интерфейс узла-получателя настраивается на прием пакетов с этим групповым адресом. Каждый узел самостоятельно отслеживает свои активные групповые адреса, и когда отпадает необходимость состоять в данной группе, прекращает посылать подтверждения на IGMP — запросы. Результаты IGMP — запросов используются протоколами групповой маршрутизации для передачи информации о членстве в группе на соседние маршрутизаторы и далее по сети.

VLC media player (первоначально от VideoLAN Client) — это свободный медиаплеер.
Программа работает на большинстве современных операционных систем, в частности на:
* GNU/Linux
* BSD (FreeBSD, NetBSD, OpenBSD, Apple Darwin, Mac OS X)
* Solaris
* и других разновидностях UNIX…
* Семейство BeOS (BeOS, Zeta-OS, Haiku-OS)
* QNX
* MorphOS
* Microsoft Windows
* Microsoft Windows CE
Плеер VLC можно использовать в качестве сервера для трансляции потока аудио/видео по сети (поддерживает протоколы IPv4 и IPv6). Для воспроизведения файлов мультимедиа не требуется установка дополнительных кодеков, они уже «встроены» в программу. VLC может воспроизводить DVD и потоковое незашифрованное (бесплатное) видео (IPTV) и Интернет-радио. Также программа может записывать потоковое аудио/видео на компьютер. VLC хорошо воспроизводит испорченные файлы.

Для вещания был выбран слабенький Pentium III 800MHz c 512 Mb RAM и с дисковой подсистемой в RAID1. На все это железо воздрузилась Gentoo Linux:

Portage 2.1.6.4 (default/linux/x86/2008.0, gcc-4.1.2, glibc-2.6.1-r0, 2.6.25-gentoo-r8 i686)
=================================================================
System uname: Linux-2.6.25-gentoo-r8-i686-Pentium_III_-Coppermine-with-glibc2.0
Timestamp of tree: Mon, 09 Feb 2009 22:15:02 +0000
app-shells/bash: 3.2_p39
dev-lang/python: 2.4.4-r13, 2.5.2-r7
dev-python/pycrypto: 2.0.1-r6
sys-apps/baselayout: 1.12.11.1
sys-apps/sandbox: 1.2.18.1-r2
sys-devel/autoconf: 2.13, 2.63
sys-devel/automake: 1.7.9-r1, 1.9.6-r2, 1.10.2
sys-devel/binutils: 2.18-r3
sys-devel/gcc-config: 1.4.0-r4
sys-devel/libtool: 1.5.26
virtual/os-headers: 2.6.27-r2


VLC был собран со следующими флагами:

media-video/vlc-0.9.7 USE="a52 aac ffmpeg hal libgcrypt mp3 mpeg ncurses stream x264 -X -aalib -alsa (-altivec) -arts -atmo -avahi -bidi -cdda -cddax% -cddb -cdio -dbus -dc1394 -debug -dirac -directfb -dts -dvb -dvd -esd -fbcon -flac -fluidsynth -fontconfig -ggi -gnome -gnutls -httpd -id3tag -jack -kate -libass -libcaca -libnotify -libsysfs -libv4l2 -lirc -live -lua -matroska -mmx -modplug -musepack -nsplugin -ogg -opengl -optimisememory -oss -pda% -png -pulseaudio -pvr -qt4 -remoteosd -rtsp -run-as-root% -samba -schroedinger -sdl -sdl-image -seamonkey -shout -skins -speex -sse -svg -svga -taglib -theora -truetype -twolame -upnp -v4l -v4l2 -vcdinfo -vcdx -vlm -vorbis -win32codecs -xinerama -xml -xosd -xv -zvbi (-vcd%)"

Соответственно можно поиграть флагами кому как хочется, обязателен флаг stream. Описание флагов можно подсмотреть командой equery u vlc из пакета gentoolkit. Единственное на что хочется обратить внимание, это флаг optimisememory. Собирал с ним 3 предыдущих версии, процесс за пару дней сжирал на 100% ресурсы процессора и умирал.

Для запуска я писал демона, который удалял старый плейлист, создавал новый и запускал собственно vlc в screen:
vlc -v /home/ftp/pub/playlist.m3u --sout '#standard{access=udp{ttl=15},mux=ts{tsid=22,pid-video=23,pid-audio=24,pid-pmt=25,use-key-frames},dst=[multcast ip]}' --random --loop --volume 100

Screen, а не демон, был выбран для паралельного запуска нескольких каналов, для более простого и удобного мониторинга процесса. PID'ы мне нужны чтобы STB и MidlleWare все правильно скушали. Файлы конвертировались в:

Формат : MPEG Video
Версия формата : Version 2
Настройка матрицы формата : Standard
Режим расчёта битрейта : Переменный
Битрейт : 7 762 Кбит/сек
Ширина : 1 920 пикс.
Высота : 1 080 пикс.
Соотношение кадра : 16/9
Частота кадров : 30,000 кадр/сек
Колориметрия : 4:2:0
Тип развёртки : Прогрессивная


Формат : MPEG Audio
Версия формата : Version 1
Профайл формата : Layer 2
Режим расчёта битрейта : Постоянный
Битрейт : 64,0 Кбит/сек
Канал(ы) : 2 канала(ов)
Частота : 44,1 КГц
Разрешение : 16 бит


Производительность:
up 70 days, 17:08, load average: 0.16, 0.17, 0.11

Загрузка сети:
30 second input rate 8718000 bits/sec, 801 packets/sec
30 second output rate 2000 bits/sec, 2 packets/sec
Tags:
Hubs:
+35
Comments19

Articles

Change theme settings