magnify
formats

Организация видеотрансляции на сайте

Опубликовано: 09.02.2009 Автор: в

В одном из моих прошлых постов для передачи потокового видео я использовал связку Motion+ffmpeg+ffserver. В принципе, это рабочий вариант, но по какой-то причине ffserver довольно «криво» работал в качестве HTTP-сервера для отдачи видео.

В этот раз мы попробуем пойти другим путем и организовать трансляцию IP-камеры на сайте с помощью VLC Media Player — кроссплатформенного видеоплеера, а также, что наиболее важно в нашем случае, сервера потокового вещания. Сразу оговорюсь, что в качестве формата трансляции был выбран Flash Video (flv). Причин несколько, но самая главная — наличие Flash-плеера в браузере у 99% процентов пользователей Интернет. Конечно, можно выбрать и другой контейнер, например ASF.

Поскольку IP-камера (AXIS), с которой предполагалось вещание выдавала видео в формате MPEG ES, то предварительно его надо было преобразовать в MPEG TS, чтобы потом его можно было транскодировать в FLV.

Общая схема трансляции показана на рисунке ниже.

Общая схема

В качестве TS Muxer, FLV Encoder и FLV Streamer и будет выступать VLC.

Технически же это будет реализовано таким образом, что TS Muxer будет посылать MPEG TS поток по HTTP на порт 8080, откуда его можно будет «забирать», транскодировать в FLV и слать по HTTP на порт 8081. Чтобы было более понятно, проиллюстрирую это примером. Предположим, что все будет происходить на одном сервере (хотя это абсолютно не обязательно). Тогда техническая реализация работы будет следующей:

Реализация

Приступим к реализации. Как обычно, детали установки приведу для Debian Etch 4.0. VLC будем собирать из исходников.

1. Подготовка:

# Устанавливаем необходимые для сборки пакеты
# !!! НЕ ЗАБУДЬТЕ ДОБАВИТЬ РЕПОЗИТОРИЙ DEBIAN-MULTIMEDIA В APT !!!
apt-get install ffmpeg libavformatcvs51 libavcodeccvs51 libavcodeccvs51-dev libavformatcvs51-dev \
libavutilcvs49-dev libavutilcvs49 libavahi-client3 libavahi-common-dev libpostproccvs51-dev  \
libswscalecvs0-dev libswscalecvs0 libxvidcore4-dev libxvidcore4 libx264-dev libx264-54 automake1.9 \
autoconf g++ gcc liba52-0.7.4-dev libdvbpsi3-dev libdvbpsi3 libfaad-dev libfaac-dev libfribidi-dev \
libgcrypt11-dev liblame-dev liblua5.1-0-dev libmad0-dev libmpeg2-4-dev libogg-dev libvorbis-dev \
zlib1g-dev libvcdinfo-dev libiso9660-dev libcddb2-dev libflac-dev

# Скачиваем и собираем LIVE555 Streaming Media
# !!! ВНИМАНИЕ !!! На 4.11.2009 vlc с последней версией live от 28.10.2009 не работает. Проверено.
# http://forum.videolan.org/viewtopic.php?f=13&t=66303
# У меня сохранилась более старая версия, поэтому загружаем отсюда:
wget http://flance.onego.ru/files/live/live.tar.gz
tar xvfz live.tar.gz
cd live
./genMakefiles linux
make

2. VLC:

# На время написания статьи самая свежая стабильная версия - 0.9.8a
wget http://download.videolan.org/pub/videolan/vlc/0.9.8a/vlc-0.9.8a.tar.bz2
bzip2 -d vlc-0.9.8a.tar.bz2
tar xvf vlc-0.9.8a.tar

3. Добавляем live555 в дерево исходных текстов VLC:

cd vlc-0.9.8a
cp -r $YOUR_LIVE555_BUILD_DIR extras

4. Собираем VLC:

# Поскольку мне не нужен был VLC с графическим интерфейсом на сервере, то использовались ключи, которые его не собирали
./configure --enable-release --enable-faad --disable-remoteosd --disable-qt4 --disable-skins2 \
--disable-activex --disable-v4l2 --disable-libv4l2 --disable-x11 --disable-xvideo --disable-glx \
--disable-opengl --disable-visual --enable-realrtsp --enable-flac --with-live555-tree=extras/live \
--disable-dbus --disable-hal > /tmp/1 2> /tmp/2
# В файле /tmp/2 можно будет смотреть ошибки и предупреждения процесса конфигурирования
# Если будет какая-нибудь ошибка, то необходимо установить соответствующий пакет Debian и
# запустить configure еще раз
make

5. Запускаем VLC TS Muxer:

./vlc -vv --no-rtsp-tcp rtsp://<URL потока> --rtsp-caching=10000 --no-sout-audio --sout \
'#std{access=http,dst=127.0.0.1:8080,mux=ts}'

6. Запускаем FLV encoder+streamer:

./vlc -vv http://127.0.0.1:8080 --loop --http-caching=10000 --sout \
'#transcode{vcodec=FLV1,vb=1024}:std{access=http{mime=video/x-flv},dst=:8081/stream.flv,mux=ffmpeg{mux=flv}}'

6. Интеграция в HTML:

# Скачиваем flash-плеер, я рекомендую JW FLV Media Player, но можно попробовать и другой
wget http://www.longtailvideo.com/jw/upload/mediaplayer.zip
# Распаковываем и кладем файлы  player.swf и swfobject.js в один каталог с предполагаемой
# HTML-страницей, где будем показывать видео

Добавляем следующий HTML-код в страницу:

<script type="text/javascript" src="swfobject.js"></script>
<div id="mplayer">this will be replaced by the SWF.</div>
<script type="text/javascript">
var so = new SWFObject('player.swf','player','459','375','9');
so.addParam('allowfullscreen','true');
so.addParam('flashvars','start=1&amp;repeat=always&amp;file=http://<адрес потока>&amp;bufferlength=0&amp;autostart=true&amp;displayclick=none&amp;mute=true');
so.write('mplayer');
</script>

Внимание! Параметры start (спасибо Кириллу) и repeat важны.
Все, можно проверять. Хочу еще отметить, что на данный момент VLC с текущей версией FFMPEG для в плане FLV кодирования не работает, поэтому я использовал пакеты Debian. Если кодек FLV1 не нужен, то можно собрать VLC и со свежими FFMPEG и X264.

04.11.2009 ОБНОВЛЕНИЕ:
Важная информация:
1. Для сборки на Debian Lenny 5.0 необходимо добавить в опции конфигурирования VLC на 4 шаге опции --disable-nls и --disable-mozilla, иначе вылезет ошибка о Buggy glibc version.
2. VLC с последней версией liveMedia не стартует. Смотрите комментарии в шаге 1.

Ссылки:

  1. http://www.videolan.org
  2. http://www.ffmpeg.org
  3. http://www.live555.com/liveMedia
  4. http://www.longtailvideo.com/players/jw-flv-player
 
Просмотров: 40 611 | 100 комментариев  comments 
formats

Триггеры в Windows XP на VPN-соединения

Опубликовано: 31.01.2009 Автор: в

Иногда складывается не очень удобная ситуация, если в Windows настроено два VPN соединения. Одно на доступ в Интернет, другое — в корпоративную сеть. Но вот беда, если туннель на Интернет уже поднят, то он «отваливается» при поднятии копоративного туннеля, ясное дело по причине измненения таблицы маршрутов. Захотелось от этого избавиться, и, в конечном счете, удалось это сделать. Помогло в этом создание триггера на событие сетевого подключения.

В Windows XP c триггерами на событиями работает программа eventtriggers.exe.

Рассмотрим пример. Интернет соединение работает и включено. Мы хотим в то же самое время запустить корпоративное сетевое подключение. но при этом оставив рабочим Интернет. Схема такова:

  1. Отключаем в свойствах TCP/IP корпоративного VPN-подключения использование основного шлюза в удаленной сети (Свойства->Сеть->Cвойства TCP/IP->Дополнительно->Использовать основной шлюз в удаленной сети), чтобы после соединения не заменялся маршрут по умолчанию
  2. Выданный после подключения IP-адрес прописываем маршрут для той сети, куда нужен доступ. Например, выдался IP 192.168.0.1, нам нужно попасть в сеть 10.0.0.0/16. Тогда команда добавления маршрута будет выглядеть: route add 10.0.0.0 mask 255.255.0.0 192.168.0.1

Главная задача — назначить триггер на событие активизации сетевого подключения, после срабатывания которого нужно достать полученный IP-адрес и прописать нужный маршрут.

Для этого создаем триггер (ID события в моем случае был 20158, но его можно легко посмотреть в журнале событий):

eventtriggers /create /eid 20158 /tr route /tk «c:\routes.bat» /ru user /rp password

где /eid — ID события, /tr — название триггера, /tk — команда, выполняющаяся после срабатывания триггера, /ru — имя пользователя сеанса, /rp — его пароль

Просмотреть созданные триггеры можно командой eventtriggers /query /v

Удалить все созданные триггеры: eventtriggers /delete /tid *

Теперь создаем bat-файл, который будет доставать полученный IP и прописывать нужный маршрут. Его содержание:

for /F «tokens=2 delims=:» %%r in (‘ipconfig^|findstr /r «192\.168\.»‘) do @if not %%r==»» route add 10.0.0.0 mask 255.255.0.0 %%r

Можно наверняка сделать и по другому, но это первое, что пришло на ум.

Если нужно несколько маршрутов, то, думаю, подправить этот скрипт не составит труда.

Все, теперь после «поднятия» VPN-подключения будет выполняться c:\routes.bat, который пропишет нужный маршрут.

  1. http://www.windowsfaq.ru/content/view/179/57
  2. http://www.osp.ru/win2000/2005/01/177435
  3. http://www.osp.ru/win2000/2005/02/177535
 
Просмотров: 2 404 | Комментариев нет  comments 
formats

Установка Xen 3.3.1 на Debian Etch

Опубликовано: 30.01.2009 Автор: в

Сегодня поделюсь процессом установки свежего на данный момент дистрибутива Xen 3.3.1 на Debian Etch. Мне пришлось устанавливать гипервизор из исходных текстов, поскольку хотелось использовать поддержку блочных устройств (tap:aio), чего нет в текущей версии пакетов Xen для Debian Etch и Lenny.

Вкратце напомню, что такое Xen. Xen — это монитор виртуальных машин, который работает в паравиртуальном режиме (PV) или в режиме аппаратной виртуализации (HVM). Для работы в паравиртуальном режиме необходим модифицированные ядра ОС, для работы в режиме аппаратной виртуализации необходима ее поддержка со стороны центрального процессора (технологии Intel VT или AMD Secure Virtual Machines).

В моем случае процессор поддерживал технологию Intel VT, поэтому были доступны также преимущества и аппаратной виртуализации.

Процесс установки (проводился на чистой, только что установленной и обновленной системе Debian Etch ):

1. Подготовка

# Создаем каталог для сборки
mkdir -p /home/xen/build
cd build
# Устанавливаем необходимые для сборки пакеты
# (что-то может оказаться лишним)
apt-get install iproute bridge-utils python-twisted binutils zlib1g-dev python-dev transfig bzip2 screen \
ssh debootstrap libcurl3-dev libncurses5-dev x-dev build-essential gettext gawk pciutils-dev libc6-xen \
libsdl1.2-dev mercurial libvncserver-dev bin86 bcc
# Скачиваем исходные тексты Xen
wget http://bits.xensource.com/oss-xen/release/3.3.1/xen-3.3.1.tar.gz
tar -xvzf xen-3.3.1.tar.gz
# Скачиваем исходные тексты модифицированного для Xen ядра
hg clone http://xenbits.xensource.com/linux-2.6.18-xen.hg
cd xen-3.3.1

2. Сборка и установка

# Собираем Xen в локальный каталог ./dist
# !!!ВНИМАНИЕ!!! Для того, чтобы в HVM-режиме запускалась FreeBSD нужно в make
# добавлять VMXASSIST=n
# это необходимо проделать только в том случае, если используется технология Intel VT
make dist
# Устанавливаем скомпилированное ядро и модули для dom0 и сам гипервизор
make install
# Обновляем rcX
update-rc.d xend defaults

3. Настройка ядра
Если необходимо подправить ядро, то делаем следующее:

# Конфигурируем
make linux-2.6-xen-config CONFIGMODE=menuconfig
# Собираем и ставим новое ядро
make linux-2.6-xen-build
make linux-2.6-xen-install

4. Зависимости

# Обновляем зависимости
depmod 2.6.18.8-xen
# Создаем новый ramdisk
cd /boot
mkinitramfs -o initrd.img-2.6.18.8-xen 2.6.18.8-xen

5. GRUB
Добавляем в /boot/menu.lst новую секцию для загрузки скомпилированного ядра. В моем случае это выглядело таким образом:

 title Xen 3.3.1 / Debian GNU/Linux, kernel 2.6.18-8
 root (hd0,0)
 kernel /boot/xen-3.3.gz dom0_mem=14G
 module /boot/vmlinuz-2.6.18.8-xen root=/dev/cciss/c0d0p1 ro console=tty0
 module /boot/initrd.img-2.6.18.8-xen
 savedefault

После этого перезагружаемся в новое ядро, запускаем xend (/etc/init.d/xend start) и можно начинать создавать виртуальные машины.

Ссылки:

  1. http://xen.org
  2. http://wiki.xensource.com/xenwiki
  3. http://xgu.ru/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:Xen
 
Просмотров: 2 127 | 2 комментария  comments