Freelance Karelia
Блог, посвященный фрилансу, заработку в сети и системному администрированию
Фриланс и системное администрирование - почему бы и нет?
Организация видеотрансляции на сайте
Автор Waster
В одном из моих прошлых постов для передачи потокового видео я использовал связку 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:
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:
cp -r $YOUR_LIVE555_BUILD_DIR extras
4. Собираем 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:
'#std{access=http,dst=127.0.0.1:8080,mux=ts}'
6. Запускаем FLV encoder+streamer:
'#transcode{vcodec=FLV1,vb=1024}:std{access=http{mime=video/x-flv},dst=:8081/stream.flv,mux=ffmpeg{mux=flv}}'
6. Интеграция в HTML:
wget http://www.longtailvideo.com/jw/upload/mediaplayer.zip
# Распаковываем и кладем файлы player.swf и swfobject.js в один каталог с предполагаемой
# HTML-страницей, где будем показывать видео
Добавляем следующий HTML-код в страницу:
<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&repeat=always&file=http://<адрес потока>&bufferlength=0&autostart=true&displayclick=none&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.
Ссылки:
- http://www.videolan.org
- http://www.ffmpeg.org
- http://www.live555.com/liveMedia
- http://www.longtailvideo.com/players/jw-flv-player
Комментарии
Комментарий
Дополнительно
-
Февраль 9, 2009 -
Администрирование -
97 комментариев
-
Comments RSS -
Del.ico.us
-
Digg!

Спасибо!!! Очень полезная статья.
Но у меня есть вопрос.
МОжно ли на основе етого сделать прямые трансляции через сайт, с помощю професионально камеры???
Да, конечно, попробовать организовать можно. Для этого нужно настроить v4l или v4l2 на работу с камерой и запускать VLC для чтения с v4l. Например, ./vlc -I dummy v4l:// < параметры> —sout ‘#transcode{…}:std{http=…}’. Только если хочется нормального качества, то рекомендую использовать муксер asf, а кодек, например, mp4v, ну и выставить нормальный битрейт.
Блин. У меня рюки крюки может, но бьюсь уже битый час.
Не хочет кодировать в FLV
[00000705] main mux error: no sout mux module matched «flv»
[00000701] stream_out_standard stream out error: no suitable sout mux module for `http/flv://0.0.0.0:8081′
Что для этого нужно?
Убедитесь, что используется VLC, версии >=0.9.0 и vcodec=FLV1 (именно с 1 и большими буквами).
Привет!
Параллельно с тобой, очевидно, делали одну и ту же вещь.
посмотреть можно на URL
Камеры D-Link 2102
для vlc конфиг выглядит так:
new kamera1 broadcast enabled
setup kamera1 input «rtsp://87.251.159.6:554/jpeg»
setup kamera1 output #transcode{vcodec=FLV1,vb=1048,acodec=mp3,samplerate=22050}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}
new kamera2 broadcast enabled
setup kamera2 input «rtsp://87.251.159.8:554/jpeg»
setup kamera2 output #transcode{vcodec=FLV1,vb=1048,acodec=mp3,samplerate=22050}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8082/stream2.flv}
new kamera3 broadcast enabled
setup kamera3 input «rtsp://87.251.159.9:554/jpeg»
setup kamera3 output #transcode{vcodec=FLV1,vb=1048,acodec=mp3,samplerate=22050}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8083/stream3.flv}
new kamera4 broadcast enabled
setup kamera4 input «rtsp://87.251.159.10:554/jpeg»
setup kamera4 output #transcode{vcodec=FLV1,vb=1048,acodec=mp3,samplerate=22050}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8084/stream4.flv}
все круто, кроме!
если установлен flash 9, то autostart в jw flv работает!
а вот если flash 10, то хрен, приходится play нажимать, и буффер ставить, иначе не пашет.
непонятно в какую сторону копать.
причем, есть подозрение, что генерируемый flv в начале какой-то битый, что-ли,то ли метаданные какие-то не передаются, не было подобных симптомов?
экспериментируя, боюсь что-то сломать.
ой, пардон, старый конфиг скинул
не jpeg, конечно, а mp4
вот так
new kamera1 broadcast enabled
setup kamera1 input «rtsp://87.251.159.6:554/mp4″
setup kamera1 output #transcode{vcodec=FLV1,vb=2048,acodec=mp3,samplerate=22050}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}
Да, такая проблема действительно есть. Но я думаю, что она не обязательно связана с flash 10, может и с в JW Player (экземпляр последней версии, например, не захотел работать). Именно поэтому я добавил repeat=always и bufferlength=0 во flashvars. Проверял в IE, Firefox, Opera с Flash-плеером 10-ой версии, вроде работало. А вообще я еще на всякий случай добавил mms поток…8)
Ты знаешь, удивительным образом, начал ковыряться, добавил всего лишь start=1024 (хотя это же секунды!) и все заработало и в 10-ом.
дурь
ладно, спасибо!
кстати, меня вот интересовало, что мешает разрабочикам vlc сделать нормально чтобы встроенный http не обязательно отдавал потоки на разных портах, а достаточно было бы обычной части url для обращению к разным потокам.
не копал?
мы тут пост собираемся на habrahabr.ru оформить по этому делу, про тебя упомянем, если не против.
Нет, если честно не копал. Но думаю, сделано это было не просто так. Насчет start=1024 — это интересно, надо попробовать…8)
Да, конечно, буду благодарен, если упомянете мой пост со ссылкой.
Действительно, со start>0 проблем нет…8) Обновлю статью.
Интересно. Но есть один вопрос:
можно как-нибудь сделать чтобы flv поток передавался не сразу клиентам, а на еще какой-нибудь сервер — а оттуда уже клиентам?
Думаю, можно. Попробуйте указать в качестве параметра dst IP-адрес этого «другого» сервера. Хотя что мешает просто забирать этот поток сторонним сервером и оттуда уже «раздавать»?
Полезная статья! Спасибо! А на windows это можно организовать?
Я рад, что моя статья оказалась полезной. Насчет Windows, честно говоря, не могу точно сказать. Попробуйте найти и установить одну из последних сборок VLC с FFMPEG для Windows.
Спасибо! Хорошая статья.
Но вот вопросик: видеопоток во флеш-плеер не могу подхватить.
Система построена таким образом:
Один комп под виндой (192.168.0.13), второй — freebsd (он же сервер — 192.168.0.2)
К винде подключена камера. Оттуда vlc по хттп раздает поток.
На сервере подхватываю поток как вы писали, конвертирую в флв и отдаю на 8081/stream.flv:
vlc -vv http://192.168.0.13: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}}
Затем пытаюсь в браузере словить поток через флеш плеер. Опять таки так же как вы писали:
var so = new SWFObject(‘mediaplayer.swf’,'player’,’459′,’375′,’9′); so.addParam(‘allowfullscreen’,'true’); so.addParam(‘flashvars’,'start=1024&repeat=always&file=http://192.168.0.2:8081/stream.flv&&bufferlength=0&autostart=true&displayclick=none&mute=true’);
so.write(‘mplayer’);
Но плеер его не видет. В чем может быть проблема?
А VLC на FreeBSD, который забирает поток с 192.168.0.13 ничего в отладочной информации не показывает противоестественного? Попробуйте сначала просто сделать wget 192.168.0.2:8081/stream.flv и проверить идет ли FLV-поток вообще.
Та же история. Пробую делать трансляцию через VLM.
new camera broadcast enabled
setup camera input «rtsp://192.168.0.99:554/live.sdp»
setup camera output #transcode{vcodec=FLV1,vb=512}:duplicate{dst=std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=127.0.0.1:8080/stream.flv}}
Исходящий поток удается увидеть только в самом vlc, если указать dst=display.
Другие плееры не подключаются.
Камера у меня D-Link DSC 2120. Вещает в mpeg-4.
А почему dst=127.0.0.1:8080/stream.flv?
Кстати, качество картинки, которую показывает vlc на выходе резко падает через несколько секунд после запуска трансляции.
Возможно потому, что я плохо шарю.
Я на локалхосте проверяю. Поэтому так и выставил.
Качество картинки может зависеть от ffmpeg, битрейта и т.д. Если веб-страница с плеером открывается на локалхосте, где запущен VLC, то можно и так указать.
Читал форум videolan. С качеством у многих проблемы. Битрейт никак не влияет. Говорят, FLV1 — плохой кодек
Можете немного конкретнее расписать блок с кодом для флеш-плеера? У многих проблеммы. Допустим VLC проигрывает поток через http протокол на порт 8080 по IP-адресу 67.234.90.12 Как его теперь флешом поймать?
Если FLV-поток отдается по URL http://67.234.90.12:8080 и его можно просмотреть с помощью VLC, то соответствующая строка в кода с flash-плеером будет иметь вид:
…
so.addParam(‘flashvars’,'start=1&repeat=always&file=http://67.234.90.12:8080&bufferlength=0&autostart=true&displayclick=none&mute=true
…
Методом, описанным вами почему-то не получается. Пишет «this will be replaced by the SWF.» Я пробовал написать другой код.(применяется в примере самого лонгтейл плеера)
swfobject.registerObject(«player»,»9.0.98″,»expressInstall.swf»);
Get Flash to see this player.
Но и так не хочет работать. Пишет, что файл XML повреждён
В прошлом коментарии все теги были сьедены=) Но думаю, что вы меня поняли
Моя неточность. В коде не было написано строчки подключения javascript-библиотеки SWFObject. Проверьте, что эта библиотека подключена. И http://code.google.com/p/swfobject/wiki/documentation Вам в помощь.
А кто может подсказать как реализовать вот такую схему, есть поток mjpeg, который я захватываю vlc и раздаю его как http, но к этому потоку нужно еще приколбасить звук, как орагнизовать это. Звук идет от микрофона.
Короче как с миксовать два потока(звук и видео) в один и потом его раздовать?
OS MS Windows Vista
Привет всем!
А железа какого будет достаточно для такого он-лайн вещания?
Современного обычного компьютера, думаю, хватит…8)
Спасибо, очень познавательно. Не подскажите, какими должны быть характеристики канала, чтобы трансляцию могла смотреть, допустим, тысяча юзеров? И есть ли возможность брать звук не с камеры, а отдельно, например с пульта?
Кто разобрался? Сколько будет стоить организация такого под ключ? Жду ваших предложений mail@telsystems.ru
Waster, сорри, долго не отвечал, на то что вы мне писали. Но мы вот с админом разобрались и вроде все настроили. ) Остался только такого рода вопросик:
мне надо запаролить этот поток. грубо говоря открывать только залогиненным и т.п. Пробовал реализовать через промежуточный php-скрипт, указывал для плеера в качестве источника не сам поток а скрипт, который соответственно должен в случае успешной авторизации его отдать. Но вот как оперировать с потоком на php не разобрался, именно как его правильно открыть и отдать назад плееру. Может у вас есть какие-то решения?
К сожалению, у меня нет таких решений. Попробуйте посмотреть нужный кусок кода для работы с flv-потоком на http://xmoov.com/xmoov-php/source или на http://www.flashcomguru.com/index.cfm/2005/11/2/Streaming-flv-video-via-PHP-take-two
Большое спасибо за статью!) Интересный эффект — поток идет, но постоянно повторяется, причем такое впечатление как будто кэшируется и время повторяемого фрагмента с каждым разом становится больше. Подскажите в чем может быть проблема? HTML-rод полностью повторяет Ваш.
Попробуйте просмотреть поток не flash-плеером, а, например, vlc или mplayer и поиграйтесь с параметрами start и bufferlength. Может быть причина еще и в нехватке канала?
На vlc идет но со звуком проблема (то появляется то пропадает), заметил разницу с частотой кадров — флеш на страничке играет похоже 25, а исходный поток у меня 1 кадр/с. Причем в vlc нормальный 1 кадр/с в transcode параметр fps=1 я добавил
Получается ужасная картинка: http://spline.ifmo.ru/cam2/
Не подскажете, что может быть не так? Исползую FLV1, и есть подозрение, что какие-то проблемы с кодеком, именно в ОС (FreeBSD 7.1-RELEASE). Стоит ffmpeg-2008.07.27_10 из портов, vlc-0.9.9.a_1,3 — оба из портов. Битрейт пробовал разный — не влияет.
Еще момент: я продовал wget’ать
wget http://localhost:8081/cam.flv
Resolving localhost… 127.0.0.1
Connecting to localhost|127.0.0.1|:8081… connected.
HTTP request sent, awaiting response… 200 OK
Length: unspecified [video/x-flv]
- почему-то очень низкая скорость, 3.28K/s, 2.76K/s и т.д. Может тут проблема?
Конфиг:
setup kamera output #transcode{vcodec=FLV1,vb=2048,acodec=mp3,samplerate=22050}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/cam.flv,delay=1000}
Попробуйте другой кодек, например
setup kamera output «#transcode{vcodec=DIV3,vb=1024}:std{access=mmsh,dst=:8082,mux=asfh}
Будут ли лучше результаты? Также не могу сказать влияет ли параметр delay=1000 на скорость.
Пробую. Кодек такой есть, запустилось, камера вещает. А как поймать это вещание клиентом? Как я понимаю, это Microsoft ASF? То есть будет http://192.168.2.4:8082/? Что-то не работает =(
Вещание можно поймать, например, тот же VLC, указав URL потока как mms://192.168.2.4:8082/.
Код для вставки в HTML можно легко найти в сети. Если возникнут сложности, добавлю в статью примечание насчет ASF.
Выяснился еще такой момент: если согласно указанных выше настроек запускать vlc под виндой он отдает http-поток в виде http://IP:port/ независимо от наличия в задающей строке имени файла в потоке. А под линуксом получается http://IP:port/file.flv
Пробую под виндой и ничего не работает вообще. VLС просто ничего не делает и никаких ошибок не выдает. Никто не знает, нужны ли какие-то библиотеки? FFMPEG, например, как внедрять в винду?
Насколько мне известно, VLC под Windows уже имеет все необходимое с собой.
ivan@userver:~/vlc-0.9.8a$ ./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
вот что выдает:
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –enable-release
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –enable-faad
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –disable-remoteosd
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –disable-qt4
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –disable-skins2
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –disable-activex
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –disable-v4l2
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –disable-libv4l2
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –disable-x11
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –disable-xvideo
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –disable-glx
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –disable-opengl
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –disable-visual
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –enable-realrtsp
configure: WARNING: you should use —build, —host, —target
configure: WARNING: invalid host type: –enable-flac
configure: error: invalid variable name: –with-live555-tree
Как вы могли с такими ключами собрать?
В опциях конфигурирования в начале должны стоять два дефиса. Просто движок сайта заменяет их на длинное тире. Постараюсь исправить эту проблему.
lavrik@userver:~/vlc-0.9.8a$ ./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
configure: error: unrecognized option: -–enable-release
Try `./configure —help’ for more information.
‘тире»тире’enable-release и т.д.
Почему-то на сайте нет ваших координат для связи. оставляю свои-
adv@yar-net.ru напишите пожалуйста!
Внизу страницы есть ссылка «Связаться».
поднял сие дело на slackware, работает как часы
поток идет, замечательно ловится vlc, но не в какую не ловится адм плеером на странице.. в чем может быть проблема? пробывал уже и activex плагином vlc воспроизвести, тот же эффект, так же не получилось с момощью windows media player……
flv-поток нормально воспроизводится vlc? Если да, то проверьте внимательно параметр ‘file=’ в flashvars для JW Player. Какие симптомы у плеера? File not found или индикатор загрузки вечно крутится?
о.. неожидал быстрого ответа
т.е. никакой реакции на происходящее
да, через vlc поток воспроизводится замечательно/
параметр file, кусок скрипта… тут тоже все верно.
repeat=always&file=http://192.168.225.212:8081/stream.flv&bufferlength=0&autostart=true
симптомы у плеера.. молчание
http://www.longtailvideo.com/support/jw-player-setup-wizard
пробывал тут запустить, вбил ссылку на свою флешку. пишет Video not found or access dinided.
vlc запускаю следующим образом
—loop —http-caching=10000 —sout ‘#transcode{vcodec=FLV1,vb=1048,scale=0.5,acodec=mp3,samplerate=22050}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}’
Я так понимаю, 192.168.225.212 — IP-адрес из локальной сети. Когда пользователь открывает браузер, именно его компьютер коннектится к этому IP через flash-плеер. Есть ли доступ до этого IP с компьютера пользователя, где запускается браузер (vlc для проверки с него запускается)? Понятное дело, что с сайта не получилось проверить.
все.. проблема решена..
спасибо за отличный мануал, и простите за мою глупость
я пытался запускать все с локального адреса C:\mediaplayer\flash.html
стоило перенести на сервер апача… и о чудо все работает
Доброго времени суток!
Спасибо большое за статью, очень нужное и ценное дело!
Собственно реализовал всё под Windows, камеры выдают RTSP, ну все как выше расписано.
Результат- здесь: http://raduga-center.com/index.php?option=com_content&view=article&id=68&Itemid=123
Вопросы следующие, на всех камерах заметно, что изображение как бы «дышит», картинка становится хуже периодически, я правильно понимаю, что это издержки кодирования FLV? Причем, на первой слева камере(площадь перед кинотеатром) VLC кодирует VB=512, а две остальные этот параметр не стал ставить вообще, установка VB=1024 качества не прибавляет, битрейт все равно держится около 650- 750 кбит/с, кто знает, это предел качества FLV1? И ещё не очень нравится такое растранжиривание трафика, думаю, что для такого качества 700кбит/с слишком. Никто не задавался подобными вопросами? Здесь нашел http://www.fridu.org/sip-voiceip-faqs-tips-83/47-linux-mp4-quicktime-streaming если правильно понял , то можно флеш плейером, нашим любимым JW FLV Media Player подхватить Direct stream mp4, тоже вот, поподробнее может кто прокоментирует.
Обратился, помог очень быстро и качественно. Спасибо!
Всем рекомендую! Хороших фрилансеров сейчас сложно найти.
доброе время суток.. снова я
вопрос такой.. во время просмотра потока он кешируется C:\Documents and Settings\%username%\Local Settings\Temp\fla5C2.tmp
через энное время этот файл уже занимает значительное пространство на жестких дисках, подскажите пожалуйста.. можно ли как либо заставить плеер не кешировать, ну или обнулять кеш при определенном обьеме?
с уважением.
День добрый. Получается, качество намного хуже исходного rtsp. В чем может быть дело?
Дело в FLV-кодеке.
Жаль. Возможно ли использовать другой кодек? просто я несколько пробовал, но не все я так понимаю flash-плееры их поддерживают. Если кто сталкивался с транслированием видео с пмощью другого кодека — расскажите?
vlc -vvv —noaudio «rtsp://10.77.172.52:554/mpeg4/media.amp/trackID=1″ —sout ‘#transcode{vcodec=H263,venc=ffmpeg{keyint=25},vb=40,width=176,height=144,fps=5}:rtp{dst=127.0.0.1,port-video=9550,sdp=file:///usr/local/share/DarwinStreamingServer/movies/s2.sdp,name=test}’
[0x2871c7f0] main input error: open of `rtsp://10.77.172.52:554/mpeg4/media.amp/trackID=1′ failed: (null)
[0x2871c7f0] main input error: Your input can’t be opened
[0x2871c7f0] main input error: VLC is unable to open the MRL ‘rtsp://10.77.172.52:554/mpeg4/media.amp/trackID=1'. Check the log for details.
[0x285efbc0] main playlist debug: nothing to play
таже хрень при rtsp://10.77.172.52:554/mpeg4/media.amp и при rtsp://10.77.172.52:554/mpeg4/media.3gp
камера axis 211, сервер под Freebsd 8, сборка vlc из портов
VLC media player 1.0.3 Goldeneye
[0x285171c0] main libvlc debug: VLC media player — version 1.0.3 Goldeneye — (c) 1996-2009 the VideoLAN team
[0x285171c0] main libvlc debug: libvlc was configured with ./configure ‘—enable-vlc’ ‘—enable-release’ ‘—enable-avcodec’ ‘—enable-avformat’ ‘—enable-postproc’ ‘—without-dv-raw1394′ ‘—disable-dv’ ‘—disable-galaktos’ ‘—disable-glx’ ‘—disable-qt4′ ‘—enable-dbus’ ‘—disable-gnomevfs’ ‘—disable-notify’ ‘—disable-skins2′ ‘—disable-libtar’ ‘—enable-loader’ ‘—disable-jack’ ‘—disable-remoteosd’ ‘—disable-pulse’ ‘—disable-fluidsynth’ ‘—enable-zvbi’ ‘—disable-hal’ ‘—disable-arts’ ‘—enable-bonjour’ ‘—enable-vcd’ ‘—enable-libcddb’ ‘—disable-cddax’ ‘—enable-cdda’ ‘—enable-cddax’ ‘—enable-dvbpsi’ ‘—with-dvbpsi=/usr/local’ ‘—enable-dvdnav’ ‘—disable-dvdread’ ‘—disable-esd’ ‘—with-ffmpeg-faac’ ‘—enable-faad’ ‘—disable-fribidi’ ‘—enable-aa’ ‘—disable-dirac’ ‘—disable-schroedinger’ ‘—enable-x264′ ‘—enable-lua’ ‘—disable-caca’ ‘—enable-dca’ ‘—enable-ggi’ ‘—enable-mkv’ ‘—enable-a52′ ‘—enable-libmpeg2′ ‘—enable-real’ ‘—enable-realrtsp’ ‘—enable-shout’ ‘—enable-theora’ ‘—enable-live555′ ‘—with-live555-tree=/usr/local/live’ ‘—enable-taglib’ ‘—enable-mad’ ‘—with-mad=/usr/local’ ‘—enable-mod’ ‘—enable-mpc’ ‘—disable-ogg’ ‘—enable-ncurses’ ‘—enable-smb’ ‘—disable-sdl’ ‘—enable-gnutls’ ‘—enable-speex’ ‘—disable-svg’ ‘—enable-svgalib’ ‘—disable-tremor’ ‘—enable-twolame’ ‘—disable-vorbis’ ‘—disable-xosd’ ‘—enable-debug’ ‘—enable-v4l’ ‘—disable-x11′ ‘—prefix=/usr/local’ ‘—mandir=/usr/local/man’ ‘—infodir=/usr/local/info/’ ‘—build=i386-portbld-freebsd8.0′ ‘build_alias=i386-portbld-freebsd8.0′ ‘CC=cc’ ‘CFLAGS=-pipe -g’ ‘CXX=c++’ ‘CXXFLAGS=-pipe -g’ ‘LUA_CFLAGS=-I/usr/local/include/lua51′ ‘LUA_LIBS=-L/usr/local/lib/lua51 -llua’
с компа с винды влс нормально открывается rtsp://10.77.172.52:554/mpeg4/media.amp/trackID=1
мдааа, не получив ответа, я взял второй сервак, поставил на него фрю 7.2 и собралл из пакетов vlc.
теперь лайфмедиа вроде нормально работает. сейчас буду пытаться постить на сайт видео
У меня нужно обрабатывать mpeg-2 поток с другого сервера в flv:
Запускаю Muxer:
./vlc -vv http://217.171.2.37:8080 —sout ‘#std{access=http,dst=127.0.0.1:8080,mux=ts}’
Запускаю 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}}’
после второй команды получаю:
…
[0x16b89f8] main input debug: Stream buffering done (10058 ms in 10060 ms)
[0x16b89f8] main input debug: Decoder buffering done in 0 ms
[0x16d1148] avformat mux debug: writing header
flv does not support that sample rate, choose from (44100, 22050, 11025).
[0x16d1148] avformat mux error: could not write header
[0x2861048] libmpeg2 decoder debug: 720×576 (display 720,576), aspect 576000, sar 16:15, 25.000 fps
[0x2861048] main decoder warning: dts != current_pts (-1971123231544)
[0x2861048] main decoder warning: decoder synchro warning: pts != current_date (-40000)
…
[0x16c7388] main encoder debug: using encoder module «avcodec»
[0x16c7388] main encoder debug: TIMER module_need() : 4.000 ms — Total 4.000 ms / 1 intvls (Avg 4.000 ms)
[0x16d1148] main mux error: cannot add a new stream (unsupported while muxing to this format). You can try increasing sout-mux-caching value
[0x16c8808] stream_out_transcode stream out error: cannot add this stream
в чем может быть проблема?
А обязательно в Вашем случае запускать muxer?
Описал свою проблема вам на email, буду очень благодарен за помощь
Спасибо за статью. Очень полезно!
При попытке реализации (вводные примерно такие же, тоже камера AXIS) столкнулся со следующей проблемой. В общем и целом решение работает. Но на некоторых комьютерах (думаю дело в комбинации браузер/версия флеша) поток во флеш-плейере не сразу воспроизводится, а какое-то время висит на «стоп-кадре». Может минуту висеть, может несколько секунд. Часто помогает несколько раз стоп/старт нажать.
Пока предварительно заметил, что подобное часто всплывает на опере + 10-ый флеш и на IE7-8 + 10-ый флеш. В мозилле/файрфоксе и в IE6 + 9-ый флеш вроде все сразу нормально работает.
Плейер — JW Player 4.5.230. С 5-ым тоже пробовал — такая же картина.
VLC использовал последний стабильный — 1.0.3 (правда не под юниксом, а под Вин2к3, но думаю это не должно повлиять).
Муксер запускаю абсолютно так же как у вас.
Кодировщик запускаю вот так:
start /min /D»C:\Program Files\VideoLAN\VLC» vlc.exe -vv http://127.0.0.1:8081 —loop —http-caching=5000 —sout «#transcode{vcodec=FLV1,vb=300,fps=10,scale=0.5}:std{access=http{mime=video/x-flv},dst=172.16.16.163:8083/stream.flv,mux=ffmpeg{mux=flv}}»
Т.е. добавил, чтобы только на определенный интерфейс вешался, уменьшил битрейт и частоту кадров и добавил масштабирование.
Буду крайне признателен, если натолкнете на мысль в какую сторону копать, чтобы решить проблему.
Попробуйте использовать JW Player версии 4.1.xx.
Заметил только что. VLC (тот, который уже конечный поток формирует) в логе вот такое пишет (при уровне детализации лога 1 или 2):
stream_out_transcode debug: drift is too high, resetting master sync
avcodec warning: almost fed libavcodec with a frame in the past (current: 1143950692235, last: 1143950696023)
Это что значит? Может тут пролебма?
Если это сообщение появляется достаточно редко, можно не обращать не него внимания,а вот если постоянно,то будут частые лаги на видео.
> Попробуйте использовать JW Player версии 4.1.xx.
Спасибо! В самом деле помогло.
А почему так получается, что более свежие версии не поддерживают такой режим работы?
Попробовал еще с кодеком поиграться, h264 кодировать. Вот так:
vlc -vv http://127.0.0.1:8081 —loop —http-caching=0 —sout «#transcode{vcodec=h264,vb=300,fps=10,scale=0.5,acodec=none}:std{access=http{mime=video/x-flv},dst=172.16.16.163:8084/stream.flv,mux=ffmpeg{mux=flv}}»
Обратно странная ситуация получилась. В 5-ой версии плейера более менее нормально стало показываться в ИЕ7-8 и опере (с задержкой в несколько секунд начинает показывать, т.е. сначала черный экран — через какое-то время показывает), но в мозилле/файерфоксе либо вообще не показывает, либо после очень долгого таймаута. И проц конечно заметно больше на h264 тратится.
> Если это сообщение появляется достаточно редко, можно не обращать не него
> внимания,а вот если постоянно,то будут частые лаги на видео.
Постоянно.
И в самом деле на видео заметно с той же частотой некое «пульсирование».
При пульсировании попробуйте добавить параметр fps=xx (кадров в сек) в transcode.
Я так и делал — «fps=10″. Может наоборот стоит убрать? Или 25 поставить?
Поднял битрейт до 512, частоту кадров 12 сделал. Вроде и сообщения пропали и пульсация исчезла.
Пример рассмотрен хороший, но только не стоит использовать VLC, как сервер вещания. Например, очень несложно с его помощью отправить видеопоток через erlyvideo клиентам по RTMP
Согласен насчет RTMP. Это более правильный путь. Вообще говоря, VLC как раз и хорош в качестве сервера транскодинга+вещания, но в случае с FLV это действительно не самый лучший вариант. Мне удалось запустить трансляцию через связку vlc+red5+steamStream. Тоже неплохой вариант. В скором времени постараюсь написать об этом. Что касается erlyvideo, то спасибо за совет. Обязательно покопаю в эту сторону.
Подтверждаю, что есть проблемы с ffmpeg под FreeBSD, после установки ffmpeg-devel из портов битрейт возрос, однако Линух всеравно не догоняет. Поменял немного параметры jwplayer-а, прочитав:
http://developer.longtailvideo.com/trac/wiki/Player5Formats#HTTPStreaming.
В результате пропал эффект повторения видео с начала соединения при плохом коннекте, причем теперь jwplayer сам переконнекчивается при обрыве и продолжает с текущего места.
мои параметры:
so.addParam(‘flashvars’,'http.startparam=1&repeat=none&provider=http&file=http://x.x.x.x:x/stream.flv&bufferlength=0&autostart=false&displayclick=none&mute=false&controlbar=none’);
По странному стечению обстоятельств, новый JW Player ну никак не хочет нормально у меня проигрывать поток, даже с flashvars в виде, указанном выше. Приходится использовать версию постарее.
обнаружилась некоторая странность, при первом коннекте к vlc плеер играет видео, если подождать некоторое время, то уже не играет, хотя судя по тому, что круглый значек в центре пропадает — к серверу он законнекчивается. может в переменной http.startparam дело?
и еще:
почему то коннект к vlc какой-то рваный в начале, да и потом могут проскакивать дисконнекты, странно и что интересно, клиентская машина не нагружена, сервак тоже. проверяю top-ом. флэшплугин свежайший, только что установленый.
Огромное спасибо за статью!!!
Chuck Norris
а какая настройка jwplayer’a отвечает за авто реконнект. Кто нибудь еще сталкивался с потерей коннекта к стриму со стороны jwplayer’a и автоматическим восстановлением?
Автор статьи не сталкивался с
vbv buffer overflow?
У меня параметры запуска кодировщика:
vlc http://127.0.0.1:8080 —loop —sout ‘#transcode{vcodec=FLV1,vb=512,fps=10,scale=0.5}:std{access=http{mime=video/x-flv},dst=127.0.0.1:8081/stream.flv,mux=ffmpeg{mux=flv}
при большем значении vb возрастает нагрузка на проц. а при отсутствие параметра маштабирования, у видео потока тремор)))
ffmpeg версии 0.5_p20373, vlc 1.0.5
Рад, что пригодилась. C vbv buffer overflow сталкивался, но эти сообщения были редки и на кач-во видео не влияли при правильно выставленном vb. Попробуйте указать параметр fps с нужным значением в параметрах transcode.
добрый день,Waster
у меня есь несколько вопросов по конфигурированию vlc
если сможете на них ответить приватно — буду вам очень признательна
Спасибо за материал, организовал у себя на сайте трансляцию благодаря нему.
Теперь вопрос не менее важный, трансляцию «тырят» разные быдлосайты вроде «1000 и она камера». Озаботился вопросом защиты, предлагаю на Вашем сайте это обсудить, есть кое какие мысли. Немного не хватает знаний для реализации. Если заинтересует, напишите. С ув. Максим.
не пойму, зачем конструкция п.5?
У меня все работает так:
vlc -vv rtsp://адрес:порт —loop —http-caching=10000 —sout \
‘#transcode{vcodec=FLV1,vb=1024}:std{access=http{mime=video/x-flv},dst=:8081/stream_1.flv,mux=ffmpeg{mux=flv}}
ubuntu 9.10
5 пункт нужен был для камеры Axis, поскольку видео-поток там в формате MPEG4-ES
Тоже хотелось бы задать вопрос о защите потока. Каким образом можно организовать защиту потока по имени пользователя и паролю?
Мне сложно ответить, поскольку таким вопросом не задавался. Взгляните на http://www.longtailvideo.com/support/jw-player/48/securing-content-protect-your-video
Ребят, такой вопрос!
для выше перечисленного обязательно нужен сервер???
Просто у меня камера ip, в связке с 3G роутером.. с выделенным IP..
Как мне организовать прямую трансляцию с нее?
Народ помогите!!! Всю голову сломал. Не получается вещать звук,видео вещает, а звука нет!!!
Пример кода:
vlc -vv —no-rtsp-tcp rtsp:///axis-media/media.amp/trackID=1 —rtsp-caching=1000 —sout ‘#std{access=http,dst=127.0.0.1:8080,mux=ts}’
vlc -vv http://127.0.0.1:8080 —loop —http-caching=1000 —sout ‘#transcode{vcodec=FLV1, vb=1048,acodec=mp3,ab=128}:std{access=http:{mime=video/x-flv},dst=:8081/stream.flv,mux=ffmpeg{mux=flv}}
Привет! Спасибо за статью!
Но как организовать трансляцию видео с камеры dcs-2102 напрямую без участия компьютера?