В даний час я розробляю онлайн-трансляцію з 3 miniDV-камер, підключених через FireWire, що досить схоже на ваші потреби.
Швидкий натяк: vlc + flowplayer / jw player
Перш за все, є два формати відео, які можна використовувати в онлайн-потоці: FLV та h264. FLV легше перекодувати, h264 має кращі співвідношення розмір / якість, але перекодування набагато більше процесора. Обидва можуть бути відображені флеш-програвачами на веб-сторінці.
По-друге, потокова інфраструктура. Оскільки ваша пропускна здатність з ноутбука обмежена (пара Мбіт / с вершини), вам потрібно перейти на ваш сервер і там передати його клієнтам. Таким чином, потік буде надходити 1 раз до сервера, а потім N разів до клієнтів звідти. Ви не описали підключення до Інтернету для свого ноутбука, тому сценарій розділений на два розділи:
Ноутбук пов'язаний з загальнодоступною IP-адресою АБО ви можете NAT-порт на ноутбук . Цей сценарій набагато простіше, оскільки ви можете підключити з сервера до ноутбука приємно і просто. Великим недоліком є те, що ви пов'язані з одним місцезнаходженням (однією IP-адресою).
Ноутбук не пов’язаний із загальнодоступною адресою . Це трохи непросто, але працюватиме з будь-якої мережі, яка дозволить вам SSH на ваш сервер і мати достатню завантаження (1 Мбіт / с це слід зробити).
Незалежно від використовуваного сценарію, інфраструктура буде виглядати приблизно так
CAMERA - (usb) - LAPTOP - (network, limited upload) - SERVER - (network) - Client 0
- Client 1
- Client 2
- Client N
Потокове передавання з ноутбука
Захоплення відео з веб-камери . Я ніколи не захоплював потік з локально підключеної веб-камери, але є багато прикладів, як це зробити через V4L, наприклад:
Налаштування веб-камери . Єдина частина, яка повинна вас зацікавити:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2"
Яка перша частина команди VLC для підключення до веб-камери. Для отримання детальної інформації дивіться згаданий HOWTO. Особливо подивіться на частину "відеогрупи" та виправте шлях пристрою до / dev / video та / dev / audio. Вони можуть бути різними на вашому ноутбуці.
Перекодувати відео в FLV . Я особисто використовую FLV, оскільки він менш вимогливий до процесора. Я використовую такий рядок перекодування:
--sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}'
Який буде перекодувати відеопотік у формат FLV з аудіо MPGA (MP3 не доступний в моєму Ubuntu). Вибір проб якимось чином обов'язковий, без нього не вийде. Але ви можете вибрати менший розмір, наприклад, 22050. Це перекодуватиме відеопотік "як є", тому масштаб становить 1: 1. Ви можете додати параметри ширини та висоти або навіть параметр масштабу. Погляньте на документацію VLC.
Передайте його з ноутбука . Тепер ви повинні зробити локальний потік, на якому буде підключено сервер:
:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}
Це зв’яже потік VLC до 0,0.0.0:8081/stream.flv. Вся команда буде виглядати приблизно так:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2" --sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}'
Переповнення на сервер
Захопіть потік на сервері та відправте його . Знову ми використовуємо VLC для зйомки та передачі потоку. Використання базується на інфраструктурному сценарії з початку цієї посади. Як я показав, VLC на ноутбуці передає відео на якомусь порті. Цей порт повинен бути доступний із сервера. Якщо у вас є публічна IP-адреса ноутбука або порт NATED, ви можете протестувати його за допомогою telnet:
server$ telnet public_ip_address 8081
Все, крім "тайм-аут підключення", виявить, що ви можете підключитися до потоку вашого ноутбука. Якщо у вас немає загальнодоступної IP-адреси або ви не можете NAT-порта, вам доведеться робити це навпаки. Ви можете SSH з ноутбука на сервер і віддалено переслати порт свого ноутбука на сервер. Правильною командою SSH було б:
laptop$ ssh your_user@server_ip_address -R 8081:127.0.0.1:8081
Ця магічна команда буде "прив'язувати" ваш порт 8081 ноутбука до порту сервера 8081. Це означає, що коли ви підключитесь до сервера до 8081, ви мовчки підключитесь до порта 8081 свого ноутбука через тунель SSH. Класно, так? :) Отже, все, що нам потрібно зробити, - це просте підключення та передавання VLC:
server$ vlc http://localhost:8081/stream.flv --sout '#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8082/stream.flv}'
Або у випадку із загальнодоступною IP-адресою чи NATED-портом:
server$ vlc http://public_ip_address:8081/stream.flv --sout '#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8082/stream.flv}'
Як і в частині ноутбука, ваш VLC на сервері прив’язаний до порту 8082. Чому 8082, а не 8081? 8081 вже прийнятий віддаленим вперед SSH. Чому ми не використовуємо частину перекодування, як у першому прикладі? Відео вже в потрібному форматі, тому все, що нам потрібно зробити, - це просто передати його як є.
Тестування . В обох прикладах ви можете перевірити функціональність, переглядаючи потоки через VLC. Ви можете протестувати свій локальний потік:
laptop$ vlc http://localhost:8081/stream.flv
І ви можете перевірити потік вашого сервера:
laptop$ vlc http://server_ip_address:8082/stream.flv
В обох випадках ви повинні бачити свої дані веб-камери.
Відображення потоку в Інтернеті
Відображення потоку в Інтернеті, який працюватиме в більшості випадків, здійснюється через flash player. Я спробував два продукти, безкоштовні для некомерційного використання: JW Player та Flowplayer . Я залишився у Flowplayer, але не пам'ятаю причину, можливо, через плагіни (якими я не користуюся :)) або через кращу документацію.
Як відобразити потік FLV з VLC на веб-сторінці описано тут: Потік VLC на веб-сайт за допомогою asf та Flash
Вирішення проблем
Будьте в курсі багатьох проблем, які виникнуть. По-перше, як у всьому, прочитайте . VLC - це дуже балакуча програма, тому вона підкаже, де проблема. Можуть виникнути проблеми з дозволом на доступ до відео / аудіопристрою, відсутні кодеки, неправильно написані параметри виходу, ... Навчіться використовувати, iftop
щоб побачити, чи дійсно дані протікають через мережу тощо.