Предаване на живо видео със свободен софтуер

Васил Колев

<vasil@ludost.net>

http://vasil.ludost.net/

wtf?

Що е то видео предаване на живо през Internet, и има ли то почва у нас?

Предаване в реално време на видео и аудио

Сървър, към който се свързват клиентите, за да получават потоците

Какъв е смисълът?

Не всички могат да присъстват на различни събития

Не всички искат да чакат официалните записи (ако има такива)

Увеличава се аудиторията

За какво ще ви говоря

Какво е нужно за $topic

софтуер

хардуер

други работи

Как всъщност се прави

Какви са основните проблеми

Решения

Реализацията на такива предавания на живо

OpenFest 2004

Семинар на Linux-BG 04.2005

Как изглежда цялата работа

Encoder

приема потока от камерата, кодира го, и го изпраща до сървъра

Streaming сървър

приема потоците от encoder-а, мултиплексира ги и ги дава на клиентите

Клиенти

свързват се до сървъра и заявяват поток за гледане

Един човекоподобен

следи дали нещата работят

Нужен хардуер

Камера с firewire интерфейс

повечето по-нови имат такъв

не искате да използвате webcam

Машина с firewire интерфейс

повечето laptop-и имат

контролерите имат перфектна поддръжка под Linux

Достатъчно дисково пространство, ако искате архив на некомпресирания материал

90 мин = 19 GB

Всичките нужни кабели

Нужен софтуер

ffmpeg-0.4.8 („стабилна“ версия)

Състои се от encoder (ffmpeg) и streaming сървър (ffserver)

Трябва patch за един бъг във ffserver

http://vasil.ludost.net/blog/index.php?p=634

dvgrab

Също трябва patch, ако няма да пазите архив

http://vasil.ludost.net/patches/dvgrab_nofiles.patch

MPlayer

Нали все по някакъв начин трябва да тествате?:)

Свързаност

Има два вида свързаност, която ни интересува:

Свързаност от encoder-а до сървъра

Трябва да е е поне колкото големината на потоците +20 %

Трябва да няма забележима загуба на пакети (>0.01%)

Свързаност от сървъра към клиентите

Колкото повече, толкова повече :)

Самото разпращане не товари машината, така че може спокойно да се напълнят 400-500 Mbps

Настройки на хардуера

Камерата

Да праща данни по firewire порта

Да не прекъсва предаването при странни случаи

powersaving режими и спирания

Спиране при смяна на касетката

Да е сложена така, че местенето и да не повлече закачената към нея машина :)

Машината, която encode-ва

Да има достатъчно дисково пространство

Да има достатъчно мощен процесор

Настройки на софтуера - 1

dvgrab

Пуска се от директорията, в която ще пази архив

Има странни идеи за писане във файлове, за това се ползва FIFO

Може да се добави –buffers, за големина на буфера

mkfifo av.dv

dvgrab --format raw --size 0 > av.dv

ffmpeg

Компилира се с поддръжка на mp3lame

ffmpeg -i av.dv http://HOST:8090/feed1.ffm

Настройки на софтуера - 2

ffserver

Конфигурацията му си е бая голяма

Важно е да се минимизира броя потоци, които трябва да му се подават

Оставете един чист аудио поток

Ако искате да ви гледат от windows:

Подкарайте ASF поток

Тествайте!

Ако машината е много натоварена, е добре да му се вдигне приоритета

http://vasil.ludost.net/ffserver.conf

Клиенти

MPlayer

mplayer http://HOST:8090/stream.avi

Totem, xine

Windows Media Player

Поддържа само .asf потоци

Възможни проблеми

Свързаността

Най-големия и често срещан проблем

Претоварване на encoder-а

Случва се само ако не сте тествали предварително машината

Претоварване на streaming сървъра

Репликация

Реализации

OpenFest 2004

Семинар на Linux-BG 04.2005

В бъдеще - WebTech 2005, семинар на LUG-BG 2005

Заключение

FFmpeg е добър продукт, но доста нестабилен

Има и други варианти, но не са разработени докрай:

Darwin Streaming Server

Helix Server

И за двата няма свободен encoder, който да праща данните

VLC, VLS – не се обичат с firewire

Край!

Благодаря за вниманието!

Въпроси?

2005-04-12T21:43:53