LINUX.ORG.RU

Трансляция с USB камеры в сеть

 , , ,


0

1

Есть linux устройство к которому подключена USB UVC камера. Надо организовать вещание с нее в сеть. Подошел бы mjpg streamer, но нет возможности его установить.
Есть gstreamer1.0, ffmpeg (без сервера) и v4l2-ctl
Пока только смог выжать
v4l2-ctl --stream-mmap=4 --stream-from-host=http://localhost:8080
Светодиод на камере загорается. В терминале видно что идет снятие картинки
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.09 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.04 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.03 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.09 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.07 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.06 fps

v4l2-ctl берет 2-3% от процессора и 1-2% оперативки, но не через браузер ни через VLC картинку получить не могу.

Что посоветуете?

Ответ на: комментарий от Andrey-

Запускаешь программу и выбираешь опцию меню «Медиа» → «Передавать…».

Переходим на вкладку «Устройство захвата». В списке «Название видеоустройства» выбираешь подключённую веб-камеру. В списке «Название аудиоустройства» выбираешь микрофон.

В разделе «Параметры» нажимаешь кнопку «Другие», в открывшимся диалоге ставишь галочку «Настройки устройства» и нажимаешь «ОК».

Нажимаешь кнопку «Поток». Откроется мастер настройки вещания. На первом шаге просто жмёшь «Next >».

На втором шаге в выпадающем списке «Новое назначение» выбираешь «HTTP» и нажимаешь на кнопку «Добавить».

Откроется диалог для настройки порта и URI, оставляешь всё по умолчанию.

Deathstalker ★★★★★ ()
Ответ на: комментарий от erfea

Разумеется. Иначе зачем бы мне было вещать в сеть.
Я же привел аналогию с mjpg streamer
надо организовать именно то что делает mjpg streamer, но только с помощью gstreamer1.0, ffmpeg (без сервера) и v4l2-ctl

Andrey- ()

да, например, в репах армбиан нет mjpg_streamer, но вообще, он же собирается достаточно просто.

Для gst-launch-1.0

передача

gst-launch-1.0 -v v4l2src device=/dev/video0 \
! "image/jpeg" \
! rtpjpegpay \
! udpsink host=127.0.0.1 port=5000

прием

gst-launch-1.0 -e -v udpsrc port=5000 ! application/x-rtp, encoding-name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink

zudwa ()
Ответ на: комментарий от erfea

Туплю.

Input/Output options: -I, --get-input query the video input [VIDIOC_G_INPUT] -i, --set-input=<num> set the video input to <num> [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=<num> set the video output to <num> [VIDIOC_S_OUTPUT] --set-audio-output=<num> set the audio output to <num> [VIDIOC_S_AUDOUT] --get-audio-input query the audio input [VIDIOC_G_AUDIO] --set-audio-input=<num> set the audio input to <num> [VIDIOC_S_AUDIO] --get-audio-output query the audio output [VIDIOC_G_AUDOUT] --set-audio-output=<num> set the audio output to <num> [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=<w>,height=<h>,pixelformat=<pf>,field=<f>,colorspace=<c>, xfer=<xf>,ycbcr=<y>,quantization=<q>,premul-alpha,bytesperline=<bpl> 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. <f> can be one of the following field layouts: any, none, top, bottom, interlaced, seq_tb, seq_bt, alternate, interlaced_tb, interlaced_bt <c> can be one of the following colorspaces: smpte170m, smpte240m, rec709, 470m, 470bg, jpeg, srgb, adobergb, bt2020, dcip3 <xf> can be one of the following transfer functions: default, 709, srgb, adobergb, smpte240m, smpte2084, dcip3, none <y> can be one of the following Y'CbCr encodings: default, 601, 709, xv601, xv709, bt2020, bt2020c, smpte240m <q> can be one of the following quantization methods: default, full-range, lim-range

Video Streaming options: --stream-count=<count> stream <count> 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=<count> skip the first <count> buffers. The default is 0. --stream-sleep=<count> sleep for 1 second every <count> buffers. If <count> is 0, then sleep forever right after streaming starts. The default is -1 (never sleep). --stream-to=<file> stream to this file. The default is to discard the data. If <file> is '-', then the data is written to stdout and the --silent option is turned on automatically. --stream-to-host=<hostname[:port]> stream to this host. The default port is 8362. --stream-poll use non-blocking mode and select() to stream. --stream-mmap=<count> capture video using mmap() [VIDIOC_(D)QBUF] count: the number of buffers to allocate. The default is 3. --stream-user=<count> 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=<file> stream from this file. The default is to generate a pattern. If <file> is '-', then the data is read from stdin. --stream-from-host=<hostname[:port]> 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=<count> 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=<aspect select a pixel aspect ratio. The default is to autodetect. <aspect> can be one of: square, ntsc, pal --stream-out-video-aspect=<aspect select a video aspect ratio. The default is to use the frame ratio. <aspect> can be one of: 4x3, 14x9, 16x9, anamorphic --stream-out-alpha=<alpha-value> 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 [16-235] instead of full range. --stream-out-hor-speed=<speed> choose speed for horizontal movement. The default is 0, and the range is [-3...3]. --stream-out-vert-speed=<speed> choose speed for vertical movement. The default is 0, and the range is [-3...3]. --stream-out-perc-fill=<percentage> percentage of the frame to actually fill. The default is 100%. --stream-out-mmap=<count> output video using mmap() [VIDIOC_(D)QBUF] count: the number of buffers to allocate. The default is 4. --stream-out-user=<count> 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]

Что мне надо использовать что бы вещать в сеть?

Andrey- ()
Ответ на: комментарий от Andrey-

Ты если хочешь чтоб тебе помогли, принимай помощь. Я тебе дал линк для ознакомления. Говори прямо: ты дебил и читать не умеешь или школьник (возомнивший себя супер тонким тролем)?

erfea ★★★★★ ()
Последнее исправление: erfea (всего исправлений: 1)
Ответ на: комментарий от zudwa

Это не openwrt
openwrt у меня есть на 4-х устройствах и там все давно настроено и отлично работает
Был бы mjpg_streamer - не было бы этой темы.
Тут доступные пакеты https://yadi.sk/i/Dv5hNYFs3SPXqZ
нет плагина - нет поддержки usb-video .... так где ег искать? Это библиотека или программа ?

Andrey- ()
Ответ на: комментарий от Andrey-

plugin libgstvideo4linux2.so это библиотека в составе gstreamer.

Еще можно проверить: gst-inspect-1.0 -b

Или поискать его: locate libgstvideo4linux2.so

Или напишите в конфу разработчиков вашего дистрибутива. Быстрее получится.

zudwa ()
Ответ на: комментарий от Andrey-

В общем самое близкое к выполнению задачи это попытка вывести стрим через v4l2-ctl.
Вот команды v4l2-ctl https://yadi.sk/i/JvWyuWj_3SQp7F
Соединение с камерой есть но не отправляет в сеть.
Может тут кто подскажет как правильно оформить вывод?

Andrey- ()
Ответ на: комментарий от erfea

Нет, там в чем-то другом дело

Проверил

$ v4l2-ctl -d /dev/video0 --stream-mmap  --stream-from-host=http://127.0.0.1:8080

но netstat вообще ничего не пишет про 8080. Т.е. даже на лупбэке тут ничего не транслируется. Так что не тупи

cvs-255 ★★★★★ ()