LXF87-88:VideoLAN
|
|
|
- VideoLAN Организация потокового видеовещания за 10 минут
Содержание |
А давайте покажем им всем!
- Если вы когда-либо пытались продемонстрировать видеозапись своего отпуска сразу всем своим друзьям и знакомым, то наверняка представляете, как трудно бывает собрать их всех в одном месте. VideoLAN поможет решить эту проблему – просто настройте сервер потокового вещания, и пусть каждый из них насладится видом солнечного пляжа прямо на рабочем месте! Сергей Яремчук расскажет, что вам потребуется.
Задачу одновременного просмотра видеоролика большим количеством пользователей можно решить различными способами. Самым простым из них будет открыть доступ к видеофайлу по сети и смотреть его в обычном видеопроигрывателе. Данный метод обладает тремя несомненными достоинствами, а именно: не требует никакого специального программного обеспечения, не зависит от операционной системы, установленной на стороне клиента, сам файл можно просмотреть в любое время. Недостатков же не так много (по количеству), зато их «качественный» вес перетягивает все остальное. Например «живое» видео, полученное с web-камер или со спутникового ТВ таким образом уже не посмотришь. Сервер и канал при большом количестве подключений будет перегружен. Выход – трансляция видеопотоков. Ею мы сейчас сейчас и займемся.
Мы будем использовать VideoLAN (http://www.videolan.org/) – проект, начатый французскими студентами, а сейчас поддерживаемый разработчиками более чем из двадцати стран мира. VideoLAN прост в настройке и обладает всеми необходимыми нам возможностями. С его помощью можно легко организовать трансляцию потоков мультимедиа из различных источников: видеофайлов формата MPEG-1, MPEG-2, MPEG-4 и DivX, цифровых видео и DVD-дисков, цифровых спутниковых и телевизионных каналов и «живых» видеотрансляций, полученных с web-камер. Все это можно осуществить как для отдельного компьютера, так и в небольшой сети или в Интернете. Для трансляции потока MPEG-4 ширина канала должна быть от 0.5 до 4 Мбит/с, для потока MPEG-2, идущего со спутникового или телевизионного канала – от 3 до 4 Мбит/с, а для DVD потребуется от 6 до 9 Мбит/с. Этот проект выделяет еще одна особенность – многоплатформенность. VideoLAN может работать на компьютерах под управлением различных версий GNU/Linux, всех распространенных BSD-систем, Windows, Mac OS X, BeOS, Solaris, QNX. VideoLAN распространяется по лицензии GPL.
Для организации вещания VideoLAN предлагает два приложения:
- VLS – сервер VideoLAN, транслирующий (как уже говорилось) потоки из файлов MPEG-1, MPEG-2 и MPEG-4, DVD и VCD, цифровых спутниковые и телевизионных каналов, а также «живое» видео.
- VLC – изначально, клиент VideoLAN, способный получать, декодировать и выводить потоки MPEG. Сейчас эта программа может использоваться и как сервер, транслирующий потоки из файлов в формате MPEG-1, MPEG-2 и MPEG-4/DivX, видеодисков и «живое» видео. Помимо этого, VLC является универсальным видеопроигрывателем локальных файлов, поддерживающим большинство форматов.
Для VLS отдельно поставляется SAP-сервер. Его назначение – объявление анонсов транслируемых по сети программ (VLC анонсирует себя сам). Клиенты VLC получают эти сообщения и автоматически добавляют объявленные программы в свой плей-лист.
VLC имеет понятный графический интерфейс, позволяющий настроить большинство параметров. Для организации одного потока достаточно компьютера класса Pentium 100 с 32 Mб ОЗУ, жесткий диск, естественно, нужен побольше.
Установка VLC
Перекомпилированные пакеты VLC доступны для большинства дистрибутивов. В системах, базирующихся на APT, все, что касается VLC, можно найти одной командой:
$sudo apt-cache search vlc
Список будет большим, но, к счастью, все устанавливать не нужно. Например, чтобы установить VLC в минимальной конфигурации в KUbuntu, достаточно ввести:
$ sudo apt-get update $ sudo apt-get install vlc vlc-plugin-alsa #или vlc-plugin-esd для Ubuntu
При этом будут установлены все необходимые пакеты, включая зависимости. По умолчанию используется графический интерфейс wxvlc (библиотека wxWidgets/wxGTK), но при желании можно добавить к списку kvlc, qvlc или gnome-vlc и установить интерфейсы для KDE, Qt или GNOME ['имейте в виду, что некоторые из них уже официально не поддерживаются,-прим.ред.]. Кроме того, VLC доступен в виде подключаемого модуля Mozilla mozilla-plugin-vlc. Для ALTLinux команда установки выглядит так.
$ apt-get install vlc-normal
На странице http://www.videolan.org/vlc/ приведены ссылки с информацией по установке VLC в основных дистрибутивах GNU/Linux.
Если вы будете устанавливать VLC вручную, вам понадобится еще несколько дополнительных библиотек:
- libdvdcss – если вы планируете читать зашифрованные DVD-диски (кстати, модуль не обращает внимание на зоны);
- libdvdplay – если требуется поддержка DVD-меню;
- libdvbpsi – если вы планируете читать видеопотоки TS/DVB со спутников или цифрового телевидения;
- a52dec – при необходимости декодировать звук в формате AC3 (A52), принятом в мире DVD;
- ffmpeg, libmad и faad2 – для чтения файлов MPEG 4/DivX;
- libogg и libvorbis – для поддержки звукового формата Ogg Vorbis;
- lirc – для управления с помощи пульта ДУ
Ключ на старт!
Запустить VLC можно как из основного меню рабочего стола, в которое встраивается ярлык программы, так и c консоли, командой vlc. В результате перед вами появится главное окно VLC (рис.1). Теперь можно просмотреть локальный видеофайл, создать поток или подключиться к уже имеющемуся. Разберем со всем этим по порядку.
Чтобы просмотреть файл, введите в командной строке:
$ vlc -vvv my_videofile.mpg
Программа сама подберет необходимый декодер. В случае неудачи его можно задать вручную параметром --codec.
$ vlc -vvv --codec ffmpeg my_videofile.mpg
Просмотр VCD или DVD начинается командой
$ vlc -vvv vcd:/dev/cdrom:@1:1
То же самое можно сделать и через меню. Просто откройте пункт Файл и выберите источник сигнала, файл, папку или диск.
Создание и просмотр потока
VLC (как и VLS) может создавать два типа видеопотоков: unicast и multicast (возможно применение обеих вариантов одновременно). В первом случае видеофайл разбивается на пакеты и отправляются по индивидуальному IP-адресу, указанному программе при запуске. Принимающая сторона просто считывает данные, поступающие на открытый для приема UDP-порт (по умолчанию используется 1234). Во втором случае сервер организует передачу на специальный групповой IP-адрес, с которого и считывают информацию многочисленные клиенты. Для создания unicast-потока следует ввести команду вроде:
# vlc -vvv videofile.avi --sout udp://192.168.0.42 --ttl 1
где videofile.avi – транслируемый видофайл, udp://192.168.0.42 – unicast IP-адрес (имя unicast IP-адрес (имя DNS) отдельного компьютера, ttl означает Time To Live т.е. время жизни пакета. Каждый маршрутизатор уменьшает значение TTL на единицу и, когда оно становится равным нулю, пакет уничтожается. Таким образом, установив значение TTL в 1, мы не допустим передачи трансляции в глобальную сеть.
Можно отправить в сеть и содержимое DVD диска.
# vlc -vvv dvd:/dev/dvd --sout udp://example.org
Для трансляции DVD или VCD под Unix потребуется право на запись в /dev/dvd (/dev/cdrom). Обычно для этого необходимо вклю чить пользователя, от имени которого запускается сервер, в группу cdrom. Более грубый, но и более простой подход состоит в передаче этого права всем и каждому:
# chmod 666 /dev/dvd
Аналогичным образом можно транслировать сигнал и с других источников.
Подключиться к unicast-потоку можно следующим образом.
# vlc -vvv udp:
В случае использования порта, отличного от 1234, необходимо явно указать его номер:
# vlc -vvv udp:@:9876
Забегая немного вперед, скажем, что при подключении к multicast- потоку необходимо добавить еще и IP-адрес.
# vlc -vvv udp:@multicast_address[:server_port]
Для широковещательных передач зарезервирован специальный диапазон IP-адресов: от 224.0.0.0 до 239.255.255.255. Для организации multicast-потока можно выбрать любой понравившийся адрес из этого диапазона и настроить его использование как на сервере, так и на клиенте. Для трансляции можно воспользоваться и стандартным для любой сети широковещательным адресом, как правило, заканчивающимся на 255, но в большой сети это может помешать нормальной работе некоторых служб.
VideoLAN поддерживает и так называемое HTTP-вещание, когда клиенты подключаются к почти обычному Web-серверу, только в ответ на запрос получают не текстовый файл, а видеоданные. Сервер в таком случае запускается так.
# vlc -vvv input_stream --sout ‘#standard{access=http,mux=ogg,url=server.example.org:1234}’
Клиенту (VLC или другой программе, например, Xine) достаточно указать стандартный URL, начинающийся с http://:
# vlc http://server.example.org:1234
Поток можно создать и с помощью меню. Для этого выберите источник (Файл – Открыть файл). В появившемся диалоговом окне отметьте нужный файл и поставьте флажок напротив Вывод потока (Stream Output), затем нажмите Настройка. В открывшемся окне (рис.2) можно либо перечислить параметры командной строки в поле Destination Target, либо (что более удобно), воспользоваться группой элементов Output Methods.
Например, для организации потока UDP multicast необходимо поставить флажок напротив пункта UDP. Параметры Адрес (224.10.10.10) и порт (1234) можно оставить без изменения. Активировав пункт Воспроизводить локально, вы сможете контролировать, что уходит в сеть, на компьютере-сервере. Для приема потока на другом компьютере используйте меню Файл – Open Network Stream, в появившемся окне укажите реквизиты multicast-сервера. Полученный поток можно тут же ретранслировать на другой адрес, как показано на рис.3.
Существует и третий вариант – использование мастер-трансляции и перекодирования, которое вызывается из одноименного пункта меню Файл. В этом случае вам необходимо будет пройти всего пять шагов:
- выбор режима работы – Вещание в сеть
- выбор источника сигнала – поток или список
- выбор варианта выходного потока – UDP unicast, multicast или HTTP
- выбор формата форматирования пакета
- установки TTL и анонсов SAP
После нажатия на кнопку Finish можно подключаться к потоку и проверять результат. Как можно видеть, при использовании мастера некоторые опции оказываются недоступными.
Продвинутые возможности
На закуску поговорим о некоторых возможностях VLC, выходящих за пределы базовой функциональности «потокового вещателя». Например, очень полезная в хозяйстве вещь – transcoding. При этом исходный файл перекодируется в любой из поддерживаемых VLC форматов «на лету» и затем уже отправляется в странствие или сохраняется на жестком диске (опция File во вкладке Stream Output). Активировав пункты Audio и Video codec в поле Transcoding Options, можно установить кодек, битрейт и количество аудио-каналов. В командной строке все эти функции можно подключить через опцию transcode, если, конечно, вам нравятся конструкции вида:
# vlc -vvv dvd:/dev/dvd –sout ‘#transcode{vcodec= DIV3, acodec=vorb,v b=800,ab=128,channels=2,deinterlace}:standard{access=udp,mux=ts,url=2 39.255.12.42,sap=TestStream}’
Подобным образом можно легко собрать очень неплохую и к тому же универсальную программу «ограбления» видеодиска и захвата видео. С помощью модуля duplicate есть возможность разделить входящий поток на два и затем каждый из них обработать по своему усмотрению.
# vlc -vvv videofile.avi --sout ‘#duplicate{dst=display, dst=”transcode{vcodec=mp4v,acodec=mpga,vb=800,ab=128}: duplicate{dst=standard{access=udp,mux=ts,url=192.168.1.2}, dst=standard{access=udp,mux=ts,url=192.168.1.12}”}’
Все параметры, чтобы не вводить их каждый раз, можно прописать в конфигурационном файле. По умолчанию используется $HOME/.vlc/vlcrc.
В итоге, после небольших манипуляций, мы получили свой сервер, транслирующий видеопоток. Ответы на все вопросы о возможностях программ проекта VideoLAN можно найти в документации, которой более чем предостаточно на официальном сайте. LXF