Трансляция с USB камеры в сеть
Есть linux устройство к которому подключена USB UVC камера. Надо организовать вещание с нее в сеть. Подошел бы mjpg streamer, но нет возможности его установить.
Есть gstreamer1.0, ffmpeg (без сервера) и v4l2-ctl
Пока только смог выжать
v4l2-ctl —stream-mmap=4 —stream-from-host=http://localhost:8080
Светодиод на камере загорается. В терминале видно что идет снятие картинки
VLC как плагин только для приема с сервера.
Нет, для трансляции видео в сеть.
VLC только как плеер может брать видео с расшаренных папок в домашней сети и проигрывать.
А в чём проблема использовать ffserver? У ffmpeg есть же static-build если нельзя поставить пакетом: https://www.ffmpeg.org/download.html
Запускаешь программу и выбираешь опцию меню «Медиа» → «Передавать…».
Переходим на вкладку «Устройство захвата». В списке «Название видеоустройства» выбираешь подключённую веб-камеру. В списке «Название аудиоустройства» выбираешь микрофон.
В разделе «Параметры» нажимаешь кнопку «Другие», в открывшимся диалоге ставишь галочку «Настройки устройства» и нажимаешь «ОК».
Нажимаешь кнопку «Поток». Откроется мастер настройки вещания. На первом шаге просто жмёшь «Next >».
На втором шаге в выпадающем списке «Новое назначение» выбираешь «HTTP» и нажимаешь на кнопку «Добавить».
Откроется диалог для настройки порта и URI, оставляешь всё по умолчанию.
Есть linux устройство
—stream-from-host=http://localhost:8080
но не через браузер ни через VLC картинку получить не могу
Дай угадаю: браузер и vlc на другом устройстве?
Разумеется. Иначе зачем бы мне было вещать в сеть.
Я же привел аналогию с mjpg streamer
надо организовать именно то что делает mjpg streamer, но только с помощью gstreamer1.0, ffmpeg (без сервера) и v4l2-ctl
Ну пока знаний достаточно только для установки готовых пакетов. И сервера ffmpeg среди них нет.
Там ОЧЕНЬ сильно кастрированный VLC
Разумеется. Иначе зачем бы мне было вещать в сеть.
Так и вещай в сеть, а не на localhost.
ЗЫ ржунимагу
Почитай для начала
да и гуглится довольно много — gstreamer streaming server
Ну пока знаний достаточно только для установки готовых пакетов
А что за железяка такая?
Ну так я же использовал параметр from
-stream-from-host=
Спутниковый ресивер Dreambox
Ты сейчас так беспонтово тролишь или тупишь?!
Хе-хе.. А ffserver совсем грохнули:
Warning: ffserver has been removed on 2018-01-06. If you still need it checkout commit 2ca65fc or use the 3.4 release branch. Or try an alternative such as mkvserver_mk2.
да, например, в репах армбиан нет mjpg_streamer, но вообще, он же собирается достаточно просто.
Input/Output options: -I, —get-input query the video input [VIDIOC_G_INPUT] -i, —set-input= set the video input to [VIDIOC_S_INPUT] -N, —list-outputs display video outputs [VIDIOC_ENUMOUTPUT] -n, —list-inputs display video inputs [VIDIOC_ENUMINPUT] -O, —get-output query the video output [VIDIOC_G_OUTPUT] -o, —set-output= set the video output to [VIDIOC_S_OUTPUT] —set-audio-output= set the audio output to [VIDIOC_S_AUDOUT] —get-audio-input query the audio input [VIDIOC_G_AUDIO] —set-audio-input= set the audio input to [VIDIOC_S_AUDIO] —get-audio-output query the audio output [VIDIOC_G_AUDOUT] —set-audio-output= set the audio output to [VIDIOC_S_AUDOUT] —list-audio-outputs display audio outputs [VIDIOC_ENUMAUDOUT] —list-audio-inputs display audio inputs [VIDIOC_ENUMAUDIO]
Video Output Formats options: —list-formats-out display supported video output formats [VIDIOC_ENUM_FMT] —list-fields-out list supported fields for the current output format —get-fmt-video-out query the video output format [VIDIOC_G_FMT] —set-fmt-video-out —try-fmt-video-out=width= ,height= ,pixelformat=
,field= ,colorspace= , xfer= ,ycbcr= ,quantization= ,premul-alpha,bytesperline= set/try the video output format [VIDIOC_S/TRY_FMT] pixelformat is either the format index as reported by —list-formats-out, or the fourcc value as a string. premul-alpha sets V4L2_PIX_FMT_FLAG_PREMUL_ALPHA. The bytesperline option can be used multiple times, once for each plane. can be one of the following field layouts: any, none, top, bottom, interlaced, seq_tb, seq_bt, alternate, interlaced_tb, interlaced_bt can be one of the following colorspaces: smpte170m, smpte240m, rec709, 470m, 470bg, jpeg, srgb, adobergb, bt2020, dcip3 can be one of the following transfer functions: default, 709, srgb, adobergb, smpte240m, smpte2084, dcip3, none can be one of the following Y’CbCr encodings: default, 601, 709, xv601, xv709, bt2020, bt2020c, smpte240m can be one of the following quantization methods: default, full-range, lim-range
Video Streaming options: —stream-count= stream buffers. The default is to keep streaming forever. This count does not include the number of initial skipped buffers as is passed by —stream-skip. —stream-skip= skip the first buffers. The default is 0. —stream-sleep= sleep for 1 second every buffers. If is 0, then sleep forever right after streaming starts. The default is -1 (never sleep). —stream-to= stream to this file. The default is to discard the data. If is ‘-‘, then the data is written to stdout and the —silent option is turned on automatically. —stream-to-host= stream to this host. The default port is 8362. —stream-poll use non-blocking mode and select() to stream. —stream-mmap= capture video using mmap() [VIDIOC_(D)QBUF] count: the number of buffers to allocate. The default is 3. —stream-user= capture video using user pointers [VIDIOC_(D)QBUF] count: the number of buffers to allocate. The default is 3. —stream-dmabuf capture video using dmabuf [VIDIOC_(D)QBUF] Requires a corresponding —stream-out-mmap option. —stream-from= stream from this file. The default is to generate a pattern. If is ‘-‘, then the data is read from stdin. —stream-from-host= stream from this host. The default port is 8362. —stream-loop loop when the end of the file we are streaming from is reached. The default is to stop. —stream-out-pattern= choose output test pattern. The default is 0. —stream-out-square show a square in the middle of the output test pattern. —stream-out-border show a border around the pillar/letterboxed video. —stream-out-sav insert an SAV code in every line. —stream-out-eav insert an EAV code in every line. —stream-out-pixel-aspect= can be one of: square, ntsc, pal —stream-out-video-aspect= can be one of: 4×3, 14×9, 16×9, anamorphic —stream-out-alpha= value to use for the alpha component, range 0-255. The default is 0. —stream-out-alpha-red-only only use the —stream-out-alpha value for the red colors, for all others use 0. —stream-out-rgb-lim-range Encode RGB values as limited 22 instead of full range. —stream-out-hor-speed= choose speed for horizontal movement. The default is 0, and the range is [-3. 3]. —stream-out-vert-speed= choose speed for vertical movement. The default is 0, and the range is [-3. 3]. —stream-out-perc-fill=
percentage of the frame to actually fill. The default is 100%. —stream-out-mmap= output video using mmap() [VIDIOC_(D)QBUF] count: the number of buffers to allocate. The default is 4. —stream-out-user= output video using user pointers [VIDIOC_(D)QBUF] count: the number of buffers to allocate. The default is 4. —stream-out-dmabuf output video using dmabuf [VIDIOC_(D)QBUF] Requires a corresponding —stream-mmap option. —list-patterns list available patterns for use with —stream-pattern. —list-buffers list all video buffers [VIDIOC_QUERYBUF] —list-buffers-out list all video output buffers [VIDIOC_QUERYBUF] —list-buffers-vbi list all VBI buffers [VIDIOC_QUERYBUF] —list-buffers-vbi-out list all VBI output buffers [VIDIOC_QUERYBUF] —list-buffers-sliced-vbi list all sliced VBI buffers [VIDIOC_QUERYBUF] —list-buffers-sliced-vbi-out list all sliced VBI output buffers [VIDIOC_QUERYBUF] —list-buffers-sdr list all SDR RX buffers [VIDIOC_QUERYBUF] —list-buffers-sdr-out list all SDR TX buffers [VIDIOC_QUERYBUF]
Что мне надо использовать что бы вещать в сеть?
Источник
Linux трансляция с веб камеры
Порой возникает необходимость обеспечить видеонаблюдение за определенными объектами, и всегда есть вполне оправданное желание максимально сократить расходы.
Таковая необходимость, при всей своей прозаичности, возникла и у меня. Пожалуй, описание выйдет за пределы этой темы.
Что у меня имелось?
> Домашний сервер [Ubuntu server] (pppoe, nat, кеширующий http прокси, торренты, ftp/http сервер, apt-прокси и т.п.)
> Дешевая USB веб-камера от Genius
На основе этого набора и предполагалось реализовать идею.
Путем долгого гугления и рытья в списках пакетов был найден продукт под названием «Motion».
Я понятия не имею какого прямое применение этой софтины, потому, что в конфигах присутствует много (даже очень много) параметров, о значении которых я до сих пор ломаю голову.
Оговорка: мой сервер не имеет иксов, следовательно вся настройка осуществлялась с помощью SSH. Там где я использую консольные инструменты, вы можете заменить их любыми другими, это не критично.
Итак, далее все попытаюсь разделить на шаги:
1) В Debian-based дистрибутивах делаем:
Код: [Выделить]aptitude install motion
Он тянет за собой много зависимостей, так что придется подождать.
2) После завершения установки открываем текстовым редактором конфиг:
Код: [Выделить]nano /etc/motion/motion.conf
Далее приведу параметры, которые, вероятно, нужно изменить:
Код: [Выделить]daemon on # Режим демона. По умолчанию «off», я поменял на «on».
videodevice /dev/video0 # Меняете на путь к вашей камере
width 640 # Ширина картинки. По умолчанию 320.
height 480 # Высота картинки. По умолчанию 240.
gap 60 # Задержка перед воспроизведением. Оставил по умолчанию.
ffmpeg_video_codec swf # Используемый кодек. Доступные варианты: swf, flv, ffv1, mov.
webcam_port 8081 # Порт, на котором будет висеть, собственно, сама трансляция.
webcam_quality 50 # Качество картинки. Оставил по умолчанию.
webcam_maxrate 15 # Количество кадров в секунду. По умолчанию 1.
webcam_localhost off # Разрешить подключение к веб-камере только с localhost. По умолчанию off (то есть никакие другие компьютеры не смогут просмотреть поток)
control_port 8080 # Порт веб-панели.
control_authentication user:pass # Аутентификация для доступа к веб-панели. По умолчанию отключено.
3) После правки конфига убиваем motion:
Код: [Выделить]killall motion
По идее, после этого всего нужно просто запустить демон motion, однако у меня он начал плеваться непонятными ошибками.
Пожав плечами, я начал ковырять его дальше. После непродолжительных танцев с бубном, оказалось что нужно изменить права доступа на конфиг:
Код: [Выделить]chmod 777 /etc/motion/motion.conf
Знаю что небезопасно, но я работаю в этом направлении — если что, отпишу позднее.
После очередного запуска motion, он начал ругаться что не может создать файл /var/run/motion/motion.pid.
Опять же, проблема решилась сменой прав доступа:
Код: [Выделить]chmod 777 /var/run/motion/
Опять же костыль, но будем работать на досуге над решением этой проблемы.
4) Теперь уже запускаем motion:
Код: [Выделить]/etc/init.d/motion start
Набираем в браузере адрес компьютера с портом камеры:
Код: [Выделить]http://something.kz:8081
И смотрим .
Источник
Как транслировать видео в реальном времени с сервера Linux?
Вот что я хочу сделать. Осмотрелся, но не нашел прямого ответа. У меня есть окно Linux, на котором работают веб-сайты, использующие Ubuntu / MySQL / Apache. У меня также есть свой статический IP, то есть я не использую веб-хостинг. Я хотел бы иметь возможность передавать поток видео с веб-камеры на ноутбуке (предположительно под управлением Windows) на мой сервер Linux, и чтобы пользователи одного из моих веб-сайтов могли видеть это видео в прямом эфире в режиме потокового видео. Очевидно, что ноутбук должен был бы как-то проходить аутентификацию на сервере, но не должно быть никаких ограничений в отношении того, кто может просматривать живое видео на веб-сайте. Спасибо.
В настоящее время я занимаюсь онлайн-трансляцией с 3 камер miniDV, подключенных через FireWire, что вполне соответствует вашим потребностям.
Быстрый совет: vlc + flowplayer / jw player
Прежде всего, есть два видеоформата, которые вы можете использовать в онлайн-трансляции: FLV и h264. FLV легче транскодировать, h264 имеет лучшее соотношение размер / качество, но транскодирование требует гораздо больше ресурсов процессора. Оба могут отображаться флеш-плеерами на веб-странице.
Во-вторых, потоковая инфраструктура. Так как пропускная способность вашего ноутбука ограничена (пара Мбит / с), вам необходимо получить поток на ваш сервер и там передать его клиентам. Таким образом, поток будет передаваться 1 раз серверу, а затем N раз клиентам. Вы не описали подключение к Интернету для своего ноутбука, поэтому сценарий разделен на два раздела:
Портативный компьютер подключен к общедоступному IP-адресу или вы можете подключить порт NAT к ноутбуку . Этот сценарий намного проще, так как вы можете легко и просто подключиться с сервера на ноутбук. Большим недостатком является то, что вы привязаны к одному месту (одному IP-адресу).
Ноутбук не связан с публичным адресом . Это немного сложно, но будет работать из любой сети, которая позволит вам подключиться к вашему SSH и иметь достаточную загрузку (это должно делать 1 Мбит / с).
Независимо от используемого сценария, инфраструктура будет выглядеть так
Потоковое с ноутбука
Захват видео с веб-камеры . Я никогда не записывал поток с локальной веб-камеры, но есть много примеров, как это сделать с помощью V4L, например: Настройка веб-камеры . Единственная часть, которая вас должна заинтересовать:
laptop$ vlc v4l:// :v4l-vdev=»/dev/video0″ :v4l-adev=»/dev/audio2″
Который является первой частью команды VLC для подключения к веб-камере. Для более подробной информации следуйте упомянутому HOWTO. Особенно обратите внимание на часть «видео группы» и правильный путь к устройству / dev / video и / dev / audio. Они могут быть разными на вашем ноутбуке.
Перекодировать видео в FLV . Я лично использую FLV, так как он требует меньше ресурсов процессора. Я использую следующую строку:
Который будет транскодировать видеопоток в формат FLV с аудио MPGA (MP3 не доступен в моей Ubuntu). Samplerate как-то обязателен, без него не получится. Но вы можете выбрать меньший, например, 22050. Это позволит транскодировать видеопоток «как есть», поэтому масштаб равен 1: 1. Вы можете добавить параметры ширины и высоты или даже параметр масштаба. Посмотрите документацию VLC.
Поток это с ноутбука . Теперь вам нужно создать локальный поток, к которому будет подключаться сервер:
Это свяжет поток VLC с 0.0.0.0:8081/stream.flv. Вся команда будет выглядеть так:
Перераспределение на сервере
Захватите поток на сервере и передайте его . Опять же, мы используем VLC для захвата и потоковой передачи. Использование основано на сценарии инфраструктуры с начала этого поста. Как я показал, VLC на ноутбуке транслирует видео на некоторый порт. Этот порт должен быть доступен с сервера. Если у вас есть публичный IP-адрес ноутбука или порт NAT, вы можете проверить его с помощью 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
Или в случае с публичным IP-адресом или NAT-портом:
server$ vlc http://public_ip_address:8081/stream.flv —sout ‘#std
Как и в части ноутбука, ваш VLC на сервере привязан к порту 8082. Почему 8082, а не 8081? 8081 уже занято удаленным SSH вперед. Почему мы не используем транскодированную часть, как в первом примере? Видео уже в правильном формате, поэтому все, что нам нужно сделать, это просто транслировать его как есть.
Тестирование . В обоих примерах вы можете проверить функциональность, просматривая потоки через VLC. Вы можете проверить свой локальный поток:
laptop$ vlc http://localhost:8081/stream.flv
И вы можете проверить поток вашего сервера:
laptop$ vlc http://server_ip_address:8082/stream.flv
В обоих случаях вы должны увидеть вход вашей веб-камеры.
Отображать поток в Интернете
Отображение потока в Интернете, который будет работать в большинстве случаев, осуществляется через флеш-плеер. Я попробовал два продукта, которые бесплатны для некоммерческого использования: JW Player и Flowplayer . Я остался с Flowplayer, но не помню причину, возможно, из-за плагинов (которые я не использую :)) или из-за лучшей документации.
Как отобразить поток FLV из VLC на веб-странице, описано здесь: Поток VLC на веб-сайт с asf и Flash
Поиск проблемы
Знайте о многих проблемах, которые БУДУТ возникать. Первым делом, как и во всем, прочитайте . VLC — очень болтливая программа, поэтому она расскажет вам, в чем проблема. Могут быть проблемы с разрешениями на доступ к видео / аудио устройству, отсутствующими кодеками, ошибочными параметрами —sout, . Научитесь использовать, iftop чтобы узнать, действительно ли данные передаются по сети и т. Д.
Источник