Як пряму трансляцію відео з сервера Linux?


30

Ось що я хочу зробити. Озирнувся, але прямої відповіді не знайшов. У мене є вікно Linux із веб-сайтами, що використовують Ubuntu / MySQL / Apache. У мене також є власний статичний IP, тобто не використовую веб-хостинг. Я хотів би мати можливість передавати відео-канал з веб-камери на ноутбуці (імовірно, під керуванням Windows) на мій сервер Linux, а користувачі одного з моїх веб-сайтів зможуть бачити це відео в прямому ефірі. Очевидно, що ноутбук повинен був би якось аутентифікуватись із сервером, але не повинно бути обмежень щодо того, хто може переглядати відео в прямому ефірі на веб-сайті. Спасибі.


Ви запитуєте, як реалізувати таке рішення чи шукаєте готове до використання рішення сторонніх розробників? у колишньому випадку ТАК - це неправильне місце для цього питання, я вважаю, що це причина відмови

Відповіді:


46

В даний час я розробляю онлайн-трансляцію з 3 miniDV-камер, підключених через FireWire, що досить схоже на ваші потреби.

Швидкий натяк: vlc + flowplayer / jw player

Перш за все, є два формати відео, які можна використовувати в онлайн-потоці: FLV та h264. FLV легше перекодувати, h264 має кращі співвідношення розмір / якість, але перекодування набагато більше процесора. Обидва можуть бути відображені флеш-програвачами на веб-сторінці.

По-друге, потокова інфраструктура. Оскільки ваша пропускна здатність з ноутбука обмежена (пара Мбіт / с вершини), вам потрібно перейти на ваш сервер і там передати його клієнтам. Таким чином, потік буде надходити 1 раз до сервера, а потім N разів до клієнтів звідти. Ви не описали підключення до Інтернету для свого ноутбука, тому сценарій розділений на два розділи:

  1. Ноутбук пов'язаний з загальнодоступною IP-адресою АБО ви можете NAT-порт на ноутбук . Цей сценарій набагато простіше, оскільки ви можете підключити з сервера до ноутбука приємно і просто. Великим недоліком є ​​те, що ви пов'язані з одним місцезнаходженням (однією IP-адресою).

  2. Ноутбук не пов’язаний із загальнодоступною адресою . Це трохи непросто, але працюватиме з будь-якої мережі, яка дозволить вам SSH на ваш сервер і мати достатню завантаження (1 Мбіт / с це слід зробити).

Незалежно від використовуваного сценарію, інфраструктура буде виглядати приблизно так

CAMERA - (usb) - LAPTOP - (network, limited upload) - SERVER - (network) - Client 0
                                                                         - Client 1
                                                                         - Client 2
                                                                         - Client N

Потокове передавання з ноутбука

  1. Захоплення відео з веб-камери . Я ніколи не захоплював потік з локально підключеної веб-камери, але є багато прикладів, як це зробити через V4L, наприклад: Налаштування веб-камери . Єдина частина, яка повинна вас зацікавити:

    laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2"

    Яка перша частина команди VLC для підключення до веб-камери. Для отримання детальної інформації дивіться згаданий HOWTO. Особливо подивіться на частину "відеогрупи" та виправте шлях пристрою до / dev / video та / dev / audio. Вони можуть бути різними на вашому ноутбуці.

  2. Перекодувати відео в FLV . Я особисто використовую FLV, оскільки він менш вимогливий до процесора. Я використовую такий рядок перекодування:

    --sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}'

    Який буде перекодувати відеопотік у формат FLV з аудіо MPGA (MP3 не доступний в моєму Ubuntu). Вибір проб якимось чином обов'язковий, без нього не вийде. Але ви можете вибрати менший розмір, наприклад, 22050. Це перекодуватиме відеопотік "як є", тому масштаб становить 1: 1. Ви можете додати параметри ширини та висоти або навіть параметр масштабу. Погляньте на документацію VLC.

  3. Передайте його з ноутбука . Тепер ви повинні зробити локальний потік, на якому буде підключено сервер:

    :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}'

Переповнення на сервер

  1. Захопіть потік на сервері та відправте його . Знову ми використовуємо 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. Чому ми не використовуємо частину перекодування, як у першому прикладі? Відео вже в потрібному форматі, тому все, що нам потрібно зробити, - це просто передати його як є.

  2. Тестування . В обох прикладах ви можете перевірити функціональність, переглядаючи потоки через 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щоб побачити, чи дійсно дані протікають через мережу тощо.


1
Дуже дякую! Це було більше інформації, ніж я очікував. Буде перевірка VLC і використовувати вашу інформацію в якості посібника.

3

Моїм інструментом вибору тут буде vlc . Це не просто багатоцільовий багатоформатний відеоплеєр, він також здатний передавати потоки у величині форматів файлів та потокових протоколів. Як бонус, він працює між платформами серед хостів Windows та Linux.

Кілька років тому ми створили щось подібне, коли клієнтові, що використовував лінію вузької пропускної здатності DSL (128 К вище за течією), необхідні, щоб його веб-камери, підключені до мережі, передавались широкій аудиторії. Установка VLC як "рефлекторний" хост робила обертання сигналу кулачком, приймала основне навантаження пропускної здатності від потокових клієнтів і представляла потік у різних протоколах та форматах потоку.


1

Насправді не моя область знань, але, можливо, я можу вказати вам на потенційний напрямок.

Комерційна реалізація полягає у використанні Flash Media Server Adobe. Звичайно, це може бути досить дорогим підходом. Однак існують альтернативи з відкритим кодом - наприклад, Red5 . Вам потрібно буде встановити сервер (він має залежність від Java).

Після запуску сервера ви можете вибрати свій передній (я вважаю, що Red5 поставляється з деякими зразками, але ви також можете використовувати JW Player із type=camera).

Передній кінець отримає потокове відео з медіа-сервера, і ви завантажите свій потік на медіа-сервер.

Додаткова інформація: Довідка та інформація Red5 та Довідка Red5


jwplayer - дивовижна річ для особистого користування
Кендрік,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.