- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF116:Apache
Материал из Linuxformat.
- Сеть Свяжем Linux-машины и заставим их обслуживать нас
Содержание |
Медиафайлы: Слушать подано!
- ЧАСТЬ 3 Поделитесь медиафайлами. Нейл Ботвик покажет, как создать централизованный медиасервер и собственную радиостанцию.
На двух последних уроках мы изучали настройку и использование web- и почтового сервера. Оба они, несомненно, полезны, но кое-кто из вас может полагать, что личный почтовый или web-сервер нужны только технарям. Поэтому мы обратимся к предмету поближе к дому, а именно, к медиасерверу (хотя его, конечно, можно использовать и в коммерческих, и в публичных целях). Для создания медиасервера было бы достаточно установить обычный файловый сервер с NFS или Samba, о которых пойдет речь через месяц, и сделать все медиафайлы доступными для приложений на каждом компьютере. Но у выделенного медиасервера есть несколько преимуществ:
- Одновременный доступ нескольких пользователей к различным файлам.
- Все файлы находятся в одном месте, что облегчает поиск.
- Упрощается резервное копирование.
- Можно индексировать файлы.
- Медиафайлы можно проигрывать на устройствах, не являющихся полноценными компьютерами – например, на iPod.
На данном уроке мы настроим медиасерверы двух типов – сервер, работающий «по запросу» для медиафайлов всех типов, и потоковый сервер для аудиофайлов.
MediaTomb
С появлением второго компьютера вы сталкиваетесь с синдромом «нужный мне файл находится на другой машине». Наличие нескольких копий каждого файла требует добавочных усилий по их синхронизации и огромного расхода дискового пространства, особенно в случае с большими медиафайлами. А значит, нужен сервер, который хранил бы все файлы в одном месте и позволял проигрывать их на любом компьютере. MediaTomb – это потоковый UPnP медиасервер, и он будет работать с любым UPnP-совместимым ПО (см. врезку «UPnP»). Все файлы находятся на сервере, и любая UPnP-совместимая программа или устройство могут подключиться к нему и воспроизвести мультимедиа-данные. Такие программы существуют для различных платформ. Для Linux это MythTV (который может работать и как сервер), VLC (Video LAN Client) и даже файловая система UPnP, представляющая содержимое медиасерверов в виде локальных файлов. Вы также сможете открывать и воспроизводить медиафайлы в Windows Media Player или даже в браузере.
MediaTomb полезен не только дома – он пригодился бы любой организации, где нужно организовать общий доступ к медиафайлам, например, обучающим фильмам для школы, по сети.
Если в вашем дистрибутиве нет MediaTomb, можно загрузить набор пакетов или исходный код с сайта http://www.mediatomb.cc. Если ваш дистрибутив не поддерживается, скачайте статический двоичный пакет: он должен запуститься практически на любой х86-совместимой системе. Конечно, можно загрузить исходные коды и скомпилировать сервер из них. Для этого как всегда нужно распаковать архив и выполнить команду
./configure && make && sudo make install
После установки надо первым делом выбрать способ хранения данных MediaTomb. Возможны два варианта: СУБД SQLite или MySQL. Впрочем, менеджер пакетов вполне мог сделать этот выбор за вас. При первом запуске MediaTomb создает стандартный конфигурационный файл в ~/.mediatomb/config.xml. Отредактируйте его, уставив переменную sqlite3_enabled или mysql_enabled в yes, а вторую в no. Некоторые дистрибутивы используют глобальный конфигурационный файл /etc/mediatomb/config.xml, и это лучший вариант, если сервер запускается во время загрузки системы как сервис.
Если вы выбрали SQLite, MediaTomb создаст файл базы данных при первом запуске, однако при большой коллекции файлов скорее подойдет MySQL, особенно если вы уже им пользуетесь. Для использования MySQL создайте и заполните базу данных mediatomb. Все нужные команды есть в файле сценария, поэтому просто наберите
mysql -p mediatomb </usr/share/mediatomb/mysql.sql
Также потребуется создать пользователя с паролем и правами на чтение и запись для базы данных mediatomb, если ваш дистрибутив еще не позаботился об этом. Это делается с помощью клиента MySQL, если вы с ним знакомы, или поступите проще и откройте PHPMyAdmin, как делают все уважающие себя администраторы, когда их никто не видит. Отредактируйте упомянутый выше конфигурационный файл, задав имя пользователя и пароль.
Добавление контента
Храните ваши файлы в осмысленно названной структуре каталогов, например, Исполнитель/Альбом/Название для аудиофайлов. Клиентов это особо не затронет, но упростит обслуживание системы.
Запустите MediaTomb и перейдите по адресу http://localhost:49152 в Firefox (в Konqueror это сейчас не работает); если вы администрируете сервер с другого компьютера по сети, используйте вместо localhost адрес сервера. Появится пустое окно, поскольку на сервере еще ничего нет. Нажмите на кнопку +, чтобы начать добавлять контент. При добавлении видео укажите тип объекта, заголовок и абсолютный путь до файла.
Очень важна настройка Mimetype; один из способов определить ее правильное значение – выполнить команду file для видеофайла.
file -i /path/to/video.avi
Скоро вы осознаете, что этак добавление всей коллекции файлов отнимет кучу времени, но вам поможет командная строка. Для этого даже не обязательно останавливать работающий сервер. Добавить файлы можно с помощью команды
mediatomb -a /path/to/video
Предполагается, что MediaTomb запускается под обычным пользователем с настройками из файла ~/.mediatomb. Однако если MediaTomb стартует во время загрузки как сервис с конфигурационным файлом в каталоге /etc, потребуется не только указать путь до него, но и переключиться на root, чтобы получить достаточные права.
sudo mediatomb -c /etc/mediatomb/config.xml /path/to/video
Путь может указывать на один добавляемый файл или каталог. Если это каталог, будут извлечены все содержащиеся в нем медиафайлы, и ваше время заметно сэкономится. В дальнейшем эти записи можно редактировать через web-интерфейс.
С помощью обзора файловой системы можно добавить на сервер каталоги. Затем отредактируйте свойства директорий в базе данных, включив для них автосканирование. Тогда к новым файлам, появляющимся в этих каталогах, будет автоматически открыт общий доступ.
Безопасность
Как вы заметили, к серверу можно подключиться (а также добавить и удалить файлы) безо всякой видимой защиты. Дело в том, что стандартная установка полностью открыта и подходит только для локальной сети, где вы абсолютно доверяете каждому пользователю. Если вы делаете файлы доступными через Интернет, установите в конфигурационном файле переменную ui_enabled в no. Это полностью отключит web-интерфейс, сделав медиафайлы доступными только по прямым URL-адресам.
Даже в локальной сети стоит установить переменную accounts_enabled в yes и создать одного или нескольких пользователей с помощью такой конфигурации:
<accounts enabled=”no” session-timeout=”30”> <account user=”user1” password=”password1”/> <account user=”user2” password=”password2”/> </accounts>
Пароли хранятся в конфигурационном файле как простой текст, поэтому установите права доступа к нему в 600, чтобы предотвратить неавторизованный просмотр и изменение. Владельцем файла должен быть назначен пользователь, от имени которого запускается сервер; обычно он не имеет оболочки, поэтому прочесть настройки могут только программа и пользователь root.
Web-интерфейс удобен для управления сервером, но не предназначен для обзора его содержимого: тут нужен UPnP-клиент. Существует несколько UPnP-программ, умеющих просматривать и воспроизводить содержимое сервера. Один из неплохих вариантов – Video LAN Client (http://www.videolan.org/vlc). Запустите программу, зайдите в меню списка воспроизведения, выберите Additional Sources > Universal Plug’n’Play Discovery, затем откройте список воспроизведения, и ваши медиафайлы появятся под устройствами. В Linux можно также сделать контент доступным любой программе. Установите DJmount с сайта http://djmount.sf.net (для нее потребуется файловая система Fuse). Создайте подходящую точку монтирования, например, /mnt/media, и смонтируйте файловую систему командой
djmount /mnt/media
После этого в каталоге /mnt/media появится каталог MediaTomb, а также по каталогу на каждый UPnP-сервер сети с подкаталогами на каждый тип содержимого, например, /mnt/media/MediaTomb/Video.
Но что такое UPnP?
UPnP (Universal Plug and Play) – это набор протоколов, позволяющих сетевым устройствам взаимодействовать друг с другом на равных (p2p) без предварительной настройки. UPnP дает устройствам средства для опроса других устройств и сообщения им о своих возможностях.
Особая часть UPnP, используемая здесь – UPnP AV, которая охватывает медиасерверы и клиенты. Этот протокол дает возможность клиентам находить серверы в сети, запрашивать подробные данные о файлах, которые могут предоставить сервера, и получать выбранные файлы в потоковом режиме. Он также позволяет клиентам и серверам удаленно обмениваться командами друг с другом.
UPnP разработан для работы с NAT-устройствами, которыми являются большинство широкополосных маршрутизаторов, и работает поверх HTTP, поэтому не требует специальной настройки брандмауэра. Если в межсетевом экране разрешен web-серфинг, он пропустит и UPnP-трафик.
Icecast
MediaTomb предоставляет контент по запросу, т.е. вы сами выбираете, что и когда смотреть. Другой способ раздачи медиаконтента – потоковое аудио (как интернет-радио). Icecast – открытый проект для организации потокового вещания. Несколько сбивает с толку то, что одно название используется и для всего проекта, и для его серверного компонента. Icecast частично совместим с проприетарным сервером Shoutcast и сходен с ним по функциям. Он используется для организации потокового аудиовещания по сети в реальном времени – интернет-вещания, если хотите. Источником служат готовые файлы или вход звуковой карты.
Скорее всего, Icecast можно установить через менеджер пакетов вашего дистрибутива. После инсталляции отредактируйте конфигурационный файл Icecast.xml, обычно он находится в каталоге /etc/icecast2. Для большинства настроек подойдут значения по умолчанию, но кое-что надо изменить.
Укажите в hostname имя хоста или IP-адрес сервера (значение по умолчанию localhost не позволит создать список воспроизведения, если вы подключаетесь к серверу с другого компьютера). Прежде чем Icecast начнет принимать аудиопоток от источника (подробнее об этом чуть позже), последний должен пройти аутентификацию. По умолчанию для этих целей установлен пароль source-password, Admin-password используется для аутентификации администратора. При стандартных настройках Icecast использует сокет 8000. Остальные параметры пока можно не трогать. Зайдите в менеджер сервисов и включите автозапуск Icecast при загрузке или сразу же запустите его командой
/etc/init.d/icecast start
После запуска Icecast в файле журнала /var/log/icecast/error.log должно оказаться сообщение ‘Started’. Если его нет, значит, что-то не так, и стоит просмотреть файл журнала, чтобы понять и устранить причину ошибки.
Ну вот, Icecast настроен и запущен; не создать ли аудиопоток? Не выйдет. По сути, Icecast – всего лишь посредник, он получает один или несколько аудиопотоков и делает их доступными по сети. Для формирования самих аудиопотоков нам нужна другая программа. В Icecast такие программы называются «клиентами-источниками», одна из них входит в состав пакета и называется IceS. Она выдает поток аудиоданных в формате Ogg Vorbis, принимая их из разных источников и перекодируя в нужный формат с подходящим битрейтом на лету. Ее конфигурационный файл – /etc/ices2/ices.xml. Для IceS нет настроек по умолчанию, но есть набор примеров для различных типов входных данных. IceS может транслировать звук со входа аудиокарты (используя ALSA или OSS), PCM из stdin или плейлист из файлов на жестком диске. В последнем случае скопируйте файл ices-playlist.xml в /etc/ices2/ices.xml и отредактируйте его. Установите loglevel в 3 – тогда файлы журнала будут более подробными, что пригодится при настройке программы. Потом можете установить его в 1, для вывода только сообщений об ошибках.
После этого нужно определить один или несколько потоков в секциях <stream>. Каждая такая секция содержит одну секцию <input>, определяющую источник данных, и одну или несколько секций <instance>, определяющих выходные потоки. Смысл нескольких секций <instance> состоит в том, что можно определить несколько выходных потоков для одного входного, например, для быстрых и медленных каналов связи.
Секция input начинается с параметра module, который может принимать значения ALSA, OSS, stdinpcm и playlist. В первом и втором случае сигнал поступает со входа звуковой карты с использованием ALSA или OSS, в третьем случае поток аудиоданных в формате PCM принимается со стандартного ввода, что позволяет IceS получать информацию от других программ, например, CD-проигрывателя. Последний вариант соответствует списку воспроизведения файлов с жесткого диска.
За секцией modulе следует ряд параметров. Например, если вы используете плейлист, то конфигурация будет примерно такой:
<input> <module>playlist</module> <param name=”type”>basic</param> <param name=”file”>/mnt/audio/ices.m3u</param> <param name=”random”>0</param> <param name=”restart-after-reread”>0</param> <param name=”once”>0</param> </input>
Параметр type может принимать значения basic (если список воспроизведения хранится в файле) или script (тогда для генерации списка воспроизведения будет запущен сценарий). Параметр file, очевидно, задает полный путь к файлу списка воспроизведения. Он должен содержать перечень полных путей до файлов Ogg Vorbis или MP3 по одному на строку. Пустые и начинающиеся с символа # строки игнорируются, так что файл можно структурировать и комментировать. Остальные параметры определяют, нужно ли воспроизводить файлы в произвольном порядке (random), начинать воспроизведение с начала списка при его изменении (restart-after-reread), проигрывать песни один раз (once). В приведенном примере все эти опции выключены.
В секции <instance> нужно задать 4 параметра таким образом:
<hostname>localhost</hostname> <port>8000</port> <password>sourcepassword</password> <mount>/test.ogg</mount>
Параметры hostname и port – имя хоста и порт только что настроенного сервера Icecast. Сервер можно запускать на отдельном компьютере, но обычно источник потока и сервер находятся на одной машине: отсюда и localhost. Параметр password – пароль для источника, заданный в конфигурации Icecast, а параметр mount (он должен начинаться с /) задает имя, по которому поток будет идентифицироваться в Icecast. Имена потоков Ogg Vorbis должны заканчиваться на .ogg, потому что некоторые не сильно умные проигрыватели и браузеры определяют тип принимаемого аудиопотока по расширению. Остальные настройки можно оставить такими же, как в примере.
Теперь запускайте IceS командой
ices /path/to/config/file.xml
или как службу через менеджер сервисов. Просмотрите файл /var/log/ices/ices.log, чтобы убедиться, что он работает.
Проверка, проверка
Откройте в браузере адрес http://localhost:8000/admin/status.xml, и вы должны увидеть короткое сообщение, что Icecast запущен, и воспроизводимый поток. Сообщение не очень хорошо оформлено, но показывает, что все работает. Чтобы вникнуть в подробности, зайдите по адресу http://localhost:8000/admin/status.xsl. Затем откройте адрес http://localhost:8000/test.ogg.m3u – это URL сервера, за которым следует точка монтирования потока с расширением .m3u – и вы должны услышать прекрасную музыку (насколько прекрасную, зависит от содержимого плейлиста). Музыку можно воспроизвести и в любом доступном медиаплейере, например,
mplayer http://localhost:8000/test.ogg
Это возможно даже в Windows Media Player или Internet Explorer, если установить кодеки Ogg с сайта http://www.xiph.org, а вот WinAmp проиграет Ogg прямо «из коробки».
Потоковое MP3
Хотя многие признают превосходство Ogg Vorbis над MP3, последний знает больше людей, и он воспроизводится гораздо большим количеством компьютеров и плейеров. Текущая версия IceS поддерживает только потоки Ogg Vorbis, и для MP3-потоков понадобится другой клиент-источник. Один из вариантов – EZStream, он поддерживает потоки Ogg Vorbis и MP3. В отличие от IceS, который перекодирует аудиоданные с подходящим битрейтом, EZStream в обычном режиме передает данные без изменения. Удобно настроить все заранее, потому что можно закодировать весь исходный материал с нужным битрейтом до начала работы, чтобы уменьшить нагрузку на сервер при передаче потока. Такой подход особенно полезен, если для сервера используется не самое современное оборудование: можно произвести конвертацию заранее, на мощном компьютере. Как и IceS, EZStream использует настроечные файлы в формате XML, и с ним не поставляется конфигурация по умолчанию. Скопируйте файл ezstream_mp3.xml, который скорее всего находится в каталоге /usr/share/doc/ezstream-x.y.z/examples, в другой файл с подходящим именем и отредактируйте его.
Измените параметр <sourcepassword> и установите в параметре <filename> имя файла плейлиста, содержащего список файлов для воспроизведения, по одному в каждой строке. В параметре <url> нужно указать адрес сервера, номер порта и имя потока, например, таким образом:
<url>http://localhost:8000/mp3test</url>
В отличие от потоков Ogg Vorbis, для MP3-потоков не обязательно указывать расширение. Вы также, возможно, захотите добавить параметр
<shuffle>1</shuffle>
Затем запустите EZStream командой
ezstream -c /path/to/config.xml
Когда EZStream выполняется, можно кое-что настроить. Если вы изменили плейлист, можно заставить EZStream перечитать его, не останавливая сервер, с помощью команды:
killall -HUP ezstream
Для принудительного перехода на следующий трек, воспользуйтесь командой
killall -USR1 ezstream
EZStream может перекодировать потоки с помощью внешних программ, но если вы используете уже записанный материал, разумнее закодировать его в нужном формате заранее. Если вы хотите работать с сигналом со звуковой карты, закодированным в MP3, лучше будет выбрать что-то другое, типа DarkIce (http://darkice.sourceforge.net) или Muse (http://muse.dyne.org), которые к тому же имеют такую роскошь, как графический интерфейс.
На самом деле мы коснулись темы весьма поверхностно. Документация на web-сайтах и в вики соответствующих программ содержит гораздо больше информации, но приведенного материала вполне достаточно для начала и самостоятельных экспериментов. Удачи! LXF
Полезные программы
При раздаче медиаконтент часто нужно представлять в правильном формате. Обычно это подразумевает перекодировку видео- или аудиоданных. Хотя некоторые серверы, вроде разнообразных клиентовисточников для Icecast, делают это «на лету», как правило, лучше иметь заранее подготовленный материал, а с некоторыми программами без этого и не обойтись. Вот приложения, которые обычно используются для перекодирования форматов.
- DVD::Rip Преобразует DVD-треки в MPEG или AVI файлы http://www.exit1.org/dvdrip
- Transcode Программа для кодирования видео в распространенные форматы http://www.transcoding.org/cgi-bin/transcode
- Mencoder Часть пакета MPlayer, предназначенная для перекодировки/кодирования http://www.mplayerhq.hu
- Lame MP3-кодер http://lame.sourceforge.net
- Vorbis Tools Средства кодирования и декодирования Ogg Vorbis http://www.vorbis.com
- Grip CD-граббер и кодер на GTK http://www.nostatic.org/grip
- abcde CD-граббер и кодер командной строки http://www.hispalinux.es/~data/abcde.php