Потоковая трансляция видео с помощью icecast и ezstream

()

Эта статья описывает запуск простого сервера для трансляции видео. Всё описаное в статье проделано её автором с целью эксперимента и только эксперимента. Хотя практическое использование и не исключается (автору это просто не было нужно:)).

Упор в статье будет сделан на дистрибутивы Gentoo и Mandriva, однако практически всё написаное применимо и к другим дистрибутивам.

Итак, для начала нам потребуется icecast, настроенный как в одной из предыдущих статей. На всякий случай повторим пройденый материал. Установка icecast в Mandriva:

urpmi icecast

Установка в Gentoo:

emerge icecast

Далее настраиваем его. Подойдёт файл конфигурации из предыдущей статьи:

<icecast>
    <limits>
        <sources>2</sources>
    </limits>
    <authentication>
        <source-password>hackme</source-password>
        <admin-user>admin</admin-user>
        <admin-password>hackme</admin-password>
    </authentication>
    <directory>
        <yp-url-timeout>15</yp-url-timeout>
        <yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
    </directory>
    <shoutcast-mount>/stream</shoutcast-mount>
    <hostname>localhost</hostname>
    <listen-socket>
        <port>8000</port>
    </listen-socket>
    <listen-socket>
        <port>8001</port>
        <shoutcast-compat>1</shoutcast-compat>
    </listen-socket>
    <fileserve>1</fileserve>
    <paths>
        <logdir>/var/log/icecast</logdir>
        <webroot>/usr/share/icecast/web</webroot>
        <adminroot>/usr/share/icecast/admin</adminroot>
        <alias source="/" dest="/status.xsl"/>
    </paths>
    <logging>
        <accesslog>access.log</accesslog>
        <errorlog>error.log</errorlog>
        <loglevel>3</loglevel>
    </logging>
    <security>
        <chroot>0</chroot>
        <changeowner>
            <user>icecast</user>
            <group>icecast</group>
        </changeowner>
    </security>
</icecast>

Не забудьте указать более сложный source-password:)

Далее нам нужно установить ezstream - сервер, который будет выполнять роль SOURCE для icecast. В Mandriva это делается очень легко:

urpmi ezstream

В Gentoo несколько сложнее. К сожалению ebuild для ezstream отсуствтует в официальном дереве, однако это не мешает написать его самостоятельно. Вот ebuild, написаный автором статьи:

DESCRIPTION="Enables you to stream mp3 or vorbis files to an icecast server without reencoding"
HOMEPAGE="http://www.icecast.org/ezstream.php"
SRC_URI="http://downloads.xiph.org/releases/ezstream/${P}.tar.gz"

KEYWORDS="x86"
IUSE="taglib"

DEPEND="media-libs/libvorbis
	media-libs/libogg
	>=media-libs/libshout-2.1
	media-libs/libtheora
	dev-libs/libxml2
	taglib? ( media-libs/taglib )"
RDEPEND="${DEPEND}
	net-misc/icecast"

src_compile() {
	econf $(use_with taglib) || die "econf failed"
	emake || die "emake failed"
}

src_install() {
	emake DESTDIR="${D}" install || die "make install failed"
}

Сохряняем этот файл под именем /usr/local/portage/media-sound/ezstream/ezstream-0.5.1.ebuild и выполняем следующую последовательность команд:

ebuild /usr/local/portage/media-sound/ezstream/ezstream-0.5.1.ebuild digest
ebuild /usr/local/portage/media-sound/ezstream/ezstream-0.5.1.ebuild merge

Теперь и "гентушники" имеют установленый ezstream, однако прежде чем приступать к его настройке, нужно установить конвертер ffmpeg2theora. Пользователи Mandriva как всегда используют urpm:

urpmi ffmpeg2theora

А пользователи Gentoo - emerge:

emerge ffmpeg2theora

Вот теперь приступаем к написанию файла конфигурации. Создадим файл /etc/ezstream.xml и добавим в него следуюее:

<ezstream>
    <url>http://127.0.0.1:8000/video.ogg</url>
    <sourcepassword>hackme</sourcepassword>
    <format>THEORA</format>
    <filename>/etc/ezstream.m3u</filename>
    <shuffle>1</shuffle>
    <svrinfoname>Test TV</svrinfoname>
    <svrinfourl>http://ylsoftware.com</svrinfourl>
    <svrinfogenre></svrinfogenre>
    <svrinfodescription>Test TV-Chanel</svrinfodescription>
    <svrinfobitrate>200</svrinfobitrate>
    <svrinfochannels>2</svrinfochannels>
    <svrinfosamplerate>44100</svrinfosamplerate>
    <reencode>
        <enable>1</enable>
        <encdec>
            <format>THEORA</format>
            <match>.avi</match>
            <decode>ffmpeg2theora -x 192 -y 128 -a 0 -v 4 --title "@M@" -o - "@T@"</decode>
        </encdec>
        <encdec>
            <format>THEORA</format>
            <match>.mpg</match>
            <decode>ffmpeg2theora -x 192 -y 128 -a 0 -v 4 --title "@M@" -o - "@T@"</decode>
        </encdec>
    </reencode>
</ezstream>

Параметры "url" и "sourcepassword" задают параметры соединения с icecast. Параметр "filename" указывает имя стандартного файла плей-листа. Каждая строчка которого - имя файла.

Для запуска ezstream в качестве демона создайте скрипт следующего содеражния:

#!/bin/sh
ezstream -c /etc/ezstream.xml >/dev/null 2>/dev/null &

И добавьте его в автозапуск. Для этого нужно дописать стрчку вызова скрипта в Mandriva в файл /etc/rc.local, а в Gentoo - в файл /etc/conf.d/local.start.

Теперь вы можете настроить ваш проигрыватель на воспроизведение потока, находящегося по адресу http://<адрес вашего icecast>/<точка монтирования>. Учтите что трансляция идёт в формате ogg, с использованием кодека theora.

Если вы хотите увеличить разрешение потока - обратите внимание на ключи -x и -y, передаваемые декодеру (см. файл конфигурации).

К сожалению (пере) кодирование видео - достаточно ресурсоёмкий процесс. Эта конструкция испытывалась на двух системах - двухядеhный AthlonXP 2600 Mhz, с 512MB оперативной памяти, и двухядерном Xeon 2400Mhz с 2GB оперативной памяти. В обоих случаях система потребляла примерно 60-80% процессорного времени одного из ядер.

Источники: [1] [2]

Ключевые слова: icecast, ezstream, ffmpeg2theora.

Комментарии:

2007-09-19 09:01:49 (#)

Интересная статья. это твой новый способ просмотра фильмов?:)

MooSE 2007-09-19 09:08:13 (#)

Не совсем. Мы тут IP TV щас клепаем. И между делом маемся дурью со всякими побочными вещами. Это одна из них.

К IP TV она никакого отношения не имеет, однако во время эксперимента я её запускал на нашем сервере радио. Честно говоря сам затрудняюсь объяснить зачем...

alexsx06 2007-09-19 19:47:19 (#)

а VLC чем не угодил

MooSE 2007-09-19 23:33:01 (#)

Я не говорю что он не угодил. Просто увидел что icecast поддерживает трансляцию видео и решил попробовать.

Anonymous 2013-03-20 16:09:33 (#)

а IP TV не подскажешь как сделать?

MooSE 2013-03-22 00:04:15 (#)

Цитата:

а IP TV не подскажешь как сделать?

Не подскажу
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE