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

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


    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
    Поделиться публикацией
    Похожие публикации
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 19
    • +1
      Поздравляю. Загрузка просто поразила. Я бы посоветовал видео битрейт поменьше, аудио битрейт побольше. Но вы в любом случае молодец. Искренне желаю всяческих успехов.
      • 0
        Спасибо :)
        Мне нужен именно в HDTV с любым звуком ;)
        Это вещается на STB.
      • 0
        Никто не подскажет как при просмотре видео что вещается мультикастом, через
        VLC media player его можно записать себе на хард?
        • 0
          При открытии потока можно дополнить указать, чтобы он воспроизводился локально, выбрать опцию Сохранять на диск, выбрать аудио-видео кодеки, ввести название файла и готово. :)
          • 0
            спасибо
            сохраненное видео воспроизводится нормально только самим VLC, другие плееры его не хотят показывать, при условии что всякие кодеки установлены… никак не могу подобрать пару видео/аудио кодеков чтобы всё работало нормально :(
            • +2
              Итого, методом тыка пришел к следующим настройкам:
              encapsulation — mp4
              видео кодек — MPEG-4
              аудио кодек — mp3
              с такими настройками получилось нормально сразу смотреть и записывать трансляцию
        • 0
          Вот бы кто-то написал статью, как можна с помощью VLC стримить через rtsp для мобильных телефонов…
          • 0
            Да! Пожалуйста, напишите об этом!
          • 0
            Отличная статья, спасибо! Как раз вынашиваю идею трансляцию в домашних условиях на всё, что шевелится.
            Да, загрузка процессора реально порадовала, не ожидал.
            • 0
              *идею трансляциИ
              • 0
                Прежде всего спасибо за статью!

                У меня несколько вопросов:
                Насколько я понимаю через VLC можно ретранслировать практически все что угодно, включая mms?
                Просто IceCast не поддерживает mms и мы хотим полностью перейти на VLC.
                Возможно ли будет транслировать несколько станций параллельно?
                • 0
                  Да, я сейчас планирую вещание нескольких «каналов». Но тут всё упрется в дисковую подсистему :(
                  • 0
                    А какие возникают проблемы?
                    У нас просто в локалку ретранслируется радио, а хочется еще и видео и mms формат.
                    Сколько станций теоретически выдержать может?

                    Есть ли возможность не тянуть поток, если нет ни одного слушателя?
                    • 0
                      Проблема одна: нехватка времени, кроме IPTV приходится заниматься много чем.
                      Теоретически зависит от ширины канала и того, что будете вещать

                      Ниже в комментах есть отличный пример ;)
                • +2
                  По поводу playlist.m3u, демона и фразы «для паралельного запуска нескольких каналов, для более простого и удобного мониторинга процесса»
                  о_О
                  Используйте VLM: --vlm-conf вместе с vlm файлом. Для удаленного управления я использую связку --intf http --control telnet (http доступ по 8080 порту и консоль telnet).
                  Логирование --extraintf logger --logfile
                  Вещаю со спутника целым транспордером, загрузка CPU минимальна 5-7% так как демультиплексирования нет.
                  Бывает что канал пропадает с транспордера, для этого парсю tcpdump и если пакеты на мультикаст адрес не идут скрипт автоматом через консоль telnet делает control channel stop, control channel start vlc после этих манипуляций канал встает на место и никаких рестартов vlc.
                  • 0
                    а как-то можно, чтоб VLC показывал на одной машине видео на монитор, но в это же время аудиопоток этого видео транслировал для подхватки его на другой машине, к которой подключены колонки? :)
                    • 0
                      очень просто )
                      Запускаешь трансляцию и цепляешься к потоку 2-мя клиентами с 2-х разных компов, но на одном окошко сворачиваешь, чтобы был только звук, а на втором наоборот на весь экран )
                    • 0
                      Человек извне попросил меня задать вам вопрос:
                      «Хотелось бы поподробнее узнать о настройках сервисов для вашей amino, где брали прошивку, как её правили(и надо ли это делать), управляется ли вещание контента через amino?»
                      • 0
                        Если amino это STB, то она скорее всего является просто компом с встроенным HTML браузером и видеоплеером, так что управляется вещание контента на веб-сервере, куда эта STB подключается, а уж серверную часть можно на любом PHP написать.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.