| Потоковое аудио/видео вещание с VideoLAN Достаточно скачать бесплатный программный комплекс VideoLAN (VLC) и, немного повозившись с его настройками, вещать хоть на локальную сеть, хоть на весь Интернет с максимально доступным для данного канала качеством, или же использовать VideoLAN в качестве обычного медиа-плеера, поддерживающего множество входных форматов с возможностью записи чужого потокового медиаконтента на жесткий диск. VLС - многофункциональный комплекс, портированный практически под все операционные системы, поддерживающий множество протоколов, форматов и контейнеров, который можно использовать и как локальный аудио/видеоплеер, и как сервер трансляции. Обзор основных возможностей VLС - это некоммерческий проект, бесплатную версию которого (вместе с исходными текстами и готовыми бинарными сборками) всегда можно скачать с официального сервера http://www.videolan.org/. Клиентская и серверные части исправно работают под Linux, Windows, Mac OS X, BeOS, xBSD, Solaris, Familiar Linux, Yopy/Linupy и QNX, однако их функциональность различна и в зависимости от выбранной платформы варьируется в очень широких пределах. Поддерживаются следующие входные форматы данных: MPEG-1, MPEG-2, MPEG-4/DivX (считываемые с локального жесткого диска или CD/DVD); "настоящие" DVD и VCD; спутниковые карты, работающие по стандарту (DVB-S); потоковое видео, "упакованное" в MPEG-1, MPEG-2 и MPEG-4 (то есть, VideoLAN может работать не только как сетевой транслятор, но и как ретранслятор чужого контента с возможностью сохранения последнего на жесткий диск). В настоящий момент реализованы два основных протокола трансляции: Unicast ("узконаправленное" вещание с доставкой контента только одному целевому узлу) и Multicast (групповая трансляция с доставкой одного и того же контента множеству узлов). Также (формально) имеется возможность широковещательной рассылки контента всем узлам локальной сети (для этого достаточно указать в качестве целевого IP-адреса 255.255.255.255), но с высокой степенью вероятности она будет задавлена брандмауэрами и маршрузитаторами, так что без их радикальной перестройки сеанс вещания не состоится даже в рамках локальной сети. Еще имеется ограниченная поддержка видео-по-требованию (Video-on-Demand или, сокращенно, VoD) с возможностью выбора контента по HTTP или TELNET интерфейсам, однако эта возможность обычно используется исключительно администраторами для удаленного управления сервером трансляции. Кстати, об интерфейсах. VideoLAN поддерживает широкий ассортимент, способный удовлетворить даже самых изысканных гурманов: GUI, NCUSERS, командная строка, HTTP и даже плагины для некоторых популярных браузеров. Графический интерфейс программы VideoLAN. Контейнеры, в которые помещается транслируемый поток, зависят от типа трансляции, допустимые комбинации которых перечислены в таблице. Естественно, все это хозяйство работает как с IPv4, так и с IPv6. Допустимые комбинации протоколов трансляции с контейнерами, в которые упаковывается транслируемый медиа-поток. Устанавливаем VLС На странице http://www.videolan.org/vlc/ выложены готовые бинарные сборки для следующих операционных систем, установка которых проходит без проблем (автор тестировал Windows, Debian, Mandriva, Fedora Core и SuSE): Windows; Mac OS X; BeOS; Debian GNU/Linux; Ubuntu Linux; Mandriva Linux; Fedora Core; Familiar Linux; SUSE Linux; Red Hat Linux; Slackware Linux; ALT Linux; YOPY/Linupy; Zaurus; Arch Linux; Начинаем трансляцию Разработчики рекомендуют начинающим "телемеханикам" использовать "Мастер Трансляции" (Файл -> Мастер, соответствующий горячей клавише <CTRL-W>), однако он содержит несколько подводных камней, кроме того ограничивает наши возможности по кручению тонких настроек, а потому мы пойдем другим путем. В меню "Файл" выбираем пункт "Открыть файл" <CTRL-F>, если хотим транслировать один или несколько mp3/avi/mpeg-файлов; "Открыть каталог" <CTRL-E>, чтобы одним махом выделить все содержащиеся в нем файлы; "Открыть диск" <CTRL-D> для трансляции контента непосредственно с DVD/VCD/Audio CD (правда, несмотря на все ухищрения, автору так и не удалось заставить VideoLAN транслировать музыку прямо с Audio CD без ее предварительной перекодировки); еще можно открыть URL (для ретрансляции чужого контента) или выбрать устройство типа спутниковой карты. Начнем с простого. С обычного AVI/MPEG файла, транслируемого по локальной сети на соседний компьютер. Жмем <CTRL-F> и через "Обзор" выбираем один или несколько файлов (не обязательно одного и того же типа). Для подключения субтитров (если мы хотим их подключать) взводим одноименную галочку и указываем путь к файлу с субтитрами, положение и цвет которых определяется кнопкой "Расширенные настройки". VideoLAN поддерживает множество субтитров различных типов (включая .srt и .sub), что позволяет нам, в частности, накладывать рекламу на видеопоток или различные сведения чисто информационного характера. Выбор файла для трансляции в локальную/глобальную сеть. Взводим галочку "Вещать/Сохранить" и давим "Настройки", открывающие огромный диалог с кучей галочек, строк редактирования и прочих элементов управления, в которых на первых порах не так-то просто разобраться, но ведь мы же не из пугливых!!! Настройки транслятора для вещания по протоколу UDP. Взводим галочку "UDP" и указываем IP-адрес машины, на которую мы собираемся вещать (например, "192.168.0.6"), а также порт (по умолчанию "1234"), формат контейнера не предоставляет нам свободы выбора, т.к. UDP unicast работает только с MPEG TS (вообще-то, еще поддерживается и RAW, но в данном диалоговом окне он заблокирован и в этом есть свой резон, поскольку RAW - не лучший выбор для трансляции в реальном времени). Аудио/видео-кодеки в графе "Настройки кодирования" можно выбрать на свой вкус, а можно оставить их по умолчанию (сравнение качества кодеков - тема отдельного большого разговора, традиционно сопровождаемого яростными священными войнами, которые нам ни к чему). Время жизни пакетов (TTL) зависит от количества узлов, через которые проходит транслируемый контент, и чтобы он не ушел чересчур далеко, это значение можно установить равному трем или даже одному. О строке "MRL выходного потока" можно не заботиться, программа сформирует ее за нас. Остальные значения лучше пока не трогать, оставив их такими, какие они есть. Это слегка ухудшит функциональность транслятора, но на первых порах нам главное вообще разобраться, как его запускать! Ок, нажимаем <ENTER> и возвращаемся в предыдущий диалог, в котором из всех немногочисленных опций обращает на себя параметр времени кэширования. В локальной сети на быстрых машинах особой разницы нет, но если возникнут проблемы и транслируемое видео станет двигаться судорожными рывками, имеет смысл взвести эту галочку. Нажимаем "ОК" еще раз и VideoLAN начинает трансляцию на заданный узел (о чем говорит бегущая полоска, отображающая текущее положение видеофайла). Кстати говоря, UDP unicast обходит некоторые типы персональных брандмауэров типа SyGate Personal Firewall/Windows Firewall, которые его не видят, а потому и не блокируют (даже если мы этого хотим). Настройки клиентского узла для приема медиа-потока, транслируемого по протоколу UDP. Идем на машину с IP-адресом 192.168.0.6, запускаем на ней VideoLAN, заходим в меню "Файл", находим там пункт "Открыть URL" и в появившемся диалоговом окне переводим радиокнопку в положение "UDP порт" с указанием порта-приемника, если он отличен от "1234", выбранного сервером по умолчанию. Вот и все! Нажимаем "ОК", поудобнее устраиваемся в кресле и наслаждаемся транслируемым видеоконтентом. Просмотр потокового видео на клиентской стороне. При желании (на клиентской стороне) можно нажать <CTRL-G> (Настройки -> Расширенный интерфейс) и поиграться яркостью, контрастностью, насыщенностью, эквалайзером и прочими "вкустностями". На серверную сторону они не оказывают никакого влияния и потому крутить их на узле-трансляторе никакого смысла нет. Трансляция через Web Главным недостатком unicast-трансляции является невозможность вещания на произвольные узлы локальной/глобальной сети. Сервер должен иметь список IP-узлов для рассылки пакетов. Получателям знать же IP-адрес транслятора ни к чему. Им достаточно "помнить" назначенный UDP-порт, чтобы ловить трафик. Странная какая-то трансляция у нас получается... В обычной жизни все наоборот. Передатчик ничего не знает о приемнике (приемниках), а каждый из приемников в любой момент времени может настроиться на волну любого из многочисленных передатчиков и отключиться, если передача ему неинтересна. Специально для реализации подобного способа общения, VideoLAN поддерживает трансляцию через Web по TCP/IP-протоколу. Возвращаясь к серверной стороне, говорим Файл -> Открыть файл -> Настройки и в уже знакомом нам диалоговом окне сбрасываем (при желании) галочку "UDP" и взводим "HTTP". В поле "адрес" ничего вводить не нужно!!! Порт можно оставить в значении по умолчанию ("1234") или выбрать любой другой (например, "8080", чтобы поменьше привлекать к себе внимание). Также рекомендуется увеличить и значение TTL, особенно если мы собираемся вещать в Интернет на далекие расстояния. Строку "MRL выходного потока", как и в прошлый раз, сформирует сама программа. Обратите внимание, сколько доступных контейнеров теперь появилось: MPEG TS/MPEG PS, MPEG 1, Ogg, ASF, MP4, MOV, WAV и RAW. Какой из них выбрать? Если все клиенты используют в качестве приемника программу VideoLAN, то особой разницы нет и лучше оставить контейнер по умолчанию (MPEG TS), если же планируется транслировать аудио/видеопоток на компьютеры, где кроме Windows и штатного медиаплеера ничего нет, лучше выбрать ASF, однако в таком случае следует позаботиться о совместимости с кодеками, поставляемыми вместе с Windows и в графе "видеокодек" выбрать что-то очень хорошо известное и проверенное временем (например, DIV3, WM1, WM2), аналогичным путем поступить и со звуком, в противном случае слушателям придется рыскать в поисках нужных кодеков перед началом воспроизведения контента. Впрочем, мы не будем вдаваться в дебри (не)совместимости различных кодеков, а поскорее нажмем на "OK". Бегущий ползунок линейки прогресса подтверждает, что вещание началось, даже если к нам еще никто не подключен (настройки персонального брандмауэра не имеют никакого значения, поскольку VideoLAN обходит все известные автору брандмауэры). http://www.insidepro.com/kk/253/253_11.jpg Настройки транслятора для вещания по протоколу HTTP. На клиентском узле (который может находится где угодно) запускаем VideoLAN, говорим Файл -> Отрыть URL и в появившимся диалоговом окне перемещаем радиокнопку к строке HTTP/HTTPS/FTP/MMS, в графе URL указываем адрес сервера вместе с портом (например, "http://192.168.0.1:1024") и нажмем "ОК". И все это отлично работает с той лишь разницей, что теперь к серверу клиенты подключаются отовсюду и ему совершенно необязательно знать их IP-адреса! Настройки клиентского узла для приема медиапотока, транслируемого по протоколу HTTP. Интеграция с браузерами Скачивать/устанавливать VideoLAN или запускать штатный media-player, чтобы ввести туда адрес сервера (вместе с портом!) - на это отважится далеко не каждый пользователь, особенно если media-player выдаст ошибку, потребовав установить некоторый кодек (и ведь, подлец, не скажет какой!). Намного удобнее внедрить видеоплеер непосредственно в HTML-страничку. И VideoLAN позволяет сделать это! Для Mozilla, FireFox и Safari-браузеров выпущены специальные плагины, исходные тексты которых можно скачать непосредственно с сервера проекта VideoLAN: http://developers.videolan.org/ и откомпилировать их. Каркас страницы, принимающей UDP-потоки, выглядит следующим образом (полужирным шрифтом выделен адрес целевого узла, на который предполагается вести трансляцию): <html> <head><title>Demo of VLC mozilla plugin</title></head> <body> <h1>Demo of VLC mozilla plugin - Example 2</h1> <embed type="application/x-vlc-plugin" name="video2" autoplay="no" loop="no" hidden="yes" target="udp:@239.255.12.42" /> <br /> <a href="javascript:;" onclick='document.video2.play()'>Play video2</a> <a href="javascript:;" onclick='document.video2.stop()'>Stop video2</a> <a href="javascript:;" onclick='document.video2.fullscreen()'>Fullscreen</a> </body> </html> Листинг 1. Каркас Web-страницы для приема потокового видео по протоколу UDP. Прием HTTP-потоков осуществляется слегка иначе (полужирным шрифтом выделен адрес сервера трансляции и имя транслируемого файла): <html> <head><title>Demo of VLC mozilla plugin</title></head> <body> <h1>Demo of VLC mozilla plugin - Example 1</h1> <embed type="application/x-vlc-plugin" name="video1" autoplay="no" loop="yes" width="400" height="300" target="http://server.example.org/video1.vob"/> <br /> <a href="javascript:;" onclick='document.video1.play()'>Play video1</a> <a href="javascript:;" onclick='document.video1.pause()'>Pause video1</a> <a href="javascript:;" onclick='document.video1.stop()'>Stop video1</a> <a href="javascript:;" onclick='document.video1.fullscreen()'>Fullscreen</a> </body> </html> Листинг 2. Каркас Web-страницы для приема потокового видео по протоколу HTTP. Как нетрудно видеть, в обоих случаях мы имеем дело с "видео по требованию", то есть позволяем пользователям самостоятельно выбирать, какой файл вещать и куда. Если подобная степень демократичности не устаивает администратора сервера, он может составить обыкновенную HTML-страничку, используя штатный ActiveX-компонент медиаплеера, но гарантий, что ее удастся воспроизвести на произвольной машине - никаких. Увы! Штатные Microsoft-кодеки не обеспечивает надлежащего уровня качества, а нештатные - требуют установки (с правами администратора, разумеется). Сохранение потокового контента в файл Большинству пользователей (особенно тех, кому безлимитный Интернет всего лишь снится) не слишком нравится перспектива просмотра аудио/видео контента без возможности его сохранения на локальный диск для последующего просмотра, особенно если сервер/канал тормозит или изображение идет рывками и насладиться качеством никак не получается в силу отсутствия такового. VideoLAN позволяет сохранять потоковый контент на диск, автоматически конвертируя его в наиболее предпочтительный формат. Удобнее всего это делать через "Мастера" (Файл -> Мастер или <CTRL-W>). В появившимся диалоговом окне переводим радиокнопку в положение "Кодировать/Сохранить в файл" и говорим "Next". Радиокнопку "Выберите поток" оставляем в значении по умолчанию и нажимаем "Выберите", где выбираем вкладку "Сеть", а в ней протокол (и порт!), на который осуществляется вещание (транслятором может выступать как сам VideoLAN, запущенный на соседней машине, так и посторонний сервер). Следующее диалоговое окно предлагает нам выбрать формат сжатия аудио и видео. MPEG1, выставленный по умолчанию - наилучший выбор с точки зрения качества, но если мы не хотим жертвовать размером (а у MPEG1 размер ого-го-го), лучше остановиться на MPEG4 или других более продвинутых форматах, не забывая, впрочем, о совместимости с популярными кодеками. Выбор формата сохраняемого видео и аудио. Наконец, нас спрашивают о формате контейнера. Контейнер - это то, куда ложится видеопоток, перемеженный с аудиопотоком. Наилучший выбор с точки зрения совместимости - это либо ASF, либо MPEG1. Все остальные контейнеры хоть и обладают определенными преимуществами, требуют обязательной установки дополнительного программного обеспечения (впрочем, к VideoLAN это не относится, так как он поддерживает их все). Все! Последний "Next" выносит нас к строке ввода, запрашивающей имя файла, в который следует толкать весь принимаемый контент и после нажатия на "FINISH" начинается процесс грабежа (сохранение потокового контента может быть признано нелегальным, так что поосторожнее с награбленным!).
|