Вещаем в сети! Курс начинающего медиамагната
Andrushock
Xakep, номер #056, стр. 056-070-1
(andrushock@real.xakep.ru)
В одном из прошлых номеров я рассказывал о том, как создать свой собственный потоковый музыкальный сервер. На эту статью пришло довольно много откликов с просьбой дать более подробную информацию о вещании, как аудио, так и видеопотоков. Сегодня мы продолжим разговор об mp3-серверах, подробно остановимся на потоковых киносерверах и затронем не менее интересную тему – телевидение и сеть. После прочтения ты сможешь, используя самый обычный ТВ-тюнер и свой любимый дистрибутив линукса, не только сам смотреть телепередачи, но и показывать их своим односетчанам!
Мал ffmpeg, да дорог
Разработчики ультрабыстрого аудио/видео конвертера ffmpeg с недавнего времени закрыли анонимный доступ к своему CVS-репозиторию, поэтому придется скачать автоматически генерируемый ежедневный снапшот исходного кода. После распаковки архива перейдем в созданный каталог, озадачим скрипт configure инсталляционным каталогом, скомпилируем и установим:
$ tar zxvf ffmpeg-cvs-YEAR-MONTH-DAY.tar.gz
$ cd ffmpeg-cvs-YEAR-MONTH-DAY
$ ./configure --prefix=/usr/local/ffmpeg
$ nice make
# make install
В итоге мы получим статически слинкованные (т.е. не зависимые от программных библиотек) кодек libavcodec для воспроизведения видеоданных и ffserver для реализации потокового вещания. Простейший конфигурационный файл (синтаксис которого очень напоминает конфиг Apache) потокового mp3-сервера может состоять всего лишь из четырех строчек:
# vi /etc/ffserver.conf
<Stream girls.mp3>
File /path/to/mp3/girls.mp3
Format mp2
</Stream>
Хотя, конечно же, корректней будет сразу задать все необходимые параметры:
<Stream test.mp3>
File /path/to/music/girls.mp3
Format mp2
AudioCodec mp3
AudioBitRate 64
AudioChannels 1
AudioSampleRate 44100
NoVideo
</Stream>
Запускаем ffmpeg-сервер и проверяем, за’bind()’ился ли он на дефолтный 8080 порт:
# /usr/local/ffmpeg/bin/ffserver -f /etc/ffserver
# netstat -na --inet | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
Если у тебя этот порт занят апачем или проксей, то в конфиге просто переопредели его значение директивой Port:
Port 8090
Что же подразумевают под потоковым аудио и видеовещанием? Обычно мы действуем последовательно: с удаленного сервера скачиваем на винт нужный файл и скармливаем его проигрывателю. В случае с потоковой информацией все происходит совсем по-другому: сервер, на котором хранятся транслируемые данные, единовременно осуществляет одностороннюю доставку всем клиентам, подписавшимся на определенный виртуальный канал. Доставка происходит односторонняя, так как пользовательские плееры не отправляют никаких команд на сервер, а просто воспроизводят полученные данные в реальном времени, не сохраняя их на жесткий диск.
Теперь для проверки на клиентской машине открываем Winamp, указываем адрес только что созданного mp3-сервера: Add -> Add URL http://ip.address.of.ffserver/test.mp3 и наслаждаемся запрошенной композицией. Для трансляции видео поступаем точно таким же способом (тестовый видеоролик sample.asf можно взять из установленного WinXP в каталоге Program Files\Movie Maker):