Видео с низкой задержкой, передаваемое в локальной гигабитной сети с использованием Linux

1181
user3387542

Для выполнения задачи робототехники нам необходимо поделиться видео (веб-камерой) в прямом эфире примерно 6 или 7 пользователям в одной комнате. OpenCV будет использоваться на клиентах для чтения ситуации и отправки новых задач роботам. Задержка не должна быть намного больше одной секунды, чем ниже, тем лучше. Какие команды вы бы порекомендовали для этого?

У нас есть одна камера на хосте Linux, которая хочет передать видео примерно 6 другим устройствам, находящимся всего в нескольких метрах.

Я уже экспериментировал с различными настройками. Хотя raw-видео выглядит совершенно без задержки (локальная петля, проблема заключается в объеме данных), любое сжатие внезапно сообщает о второй задержке. И как мы должны поделиться этим в сети. Является ли вещание правильным подходом? Как это может быть так сложно, они рядом друг с другом.

Работает локально, проблемы по сети.

#server ffmpeg -f video4linux2 -r 10 -s 1280x720 -i /dev/video0 -c:v libx264 -preset veryfast -tune zerolatency -pix_fmt yuv420p -f mpegts - | socat - udp-sendto:192.168.0.255:12345,broadcast #client socat -u udp-recv:12345,reuseaddr - | vlc --live-caching=0 --network-caching=0 --file-caching=0 - 

необработанное видео - идеально, как это, видео со множеством артефактов, если оно отправлено по сети

ffmpeg -f video4linux2 -r 10 -s 1280x720 -i /dev/video0 -c:v rawvideo -f rawvideo -pix_fmt yuv420p - | vlc --demux rawvideo --rawvid-fps 10 --rawvid-width 1280 --rawvid-height 720 --rawvid-chroma I420 - 

Используемая технология не имеет значения, мы не заботимся о загрузке сети. Просто хочу использовать opencv на разных клиентах, использующих живые данные.

1
Вопрос перенесен из Stackoverflow, так как он был отложен и говорит, что я должен переместить его в суперпользователя. http://stackoverflow.com/questions/43825945/low-latency-video-shared-in-local-gigabit-network-using-linux user3387542 7 лет назад 0
Вещание определенно правильная идея. Однако о каком разрешении и частоте кадров мы говорим? 1280x720 @ 10fps (= 26, x МБ / с) должны работать без проблем. Daniel B 7 лет назад 1
Камера, которую мы сейчас используем, будет способна (fullhd) 1920x1080 при 30 Гц. Ничего против улучшенного качества видео. Просто подумал, чтобы это сработало Вы знаете команды, которые должны работать? Какую кодировку вы использовали для расчета 26x МБ / с? user3387542 7 лет назад 0
Это было бы сырым 24-битным RGB. Вы можете легко проверить это, вставив `pv -r` (« представление канала ») в ваш тестовый канал. Daniel B 7 лет назад 1
Может быть, попробуйте [icecast] (http://icecast.org/), если вам все равно нужно вещание? dirkt 7 лет назад 1
О да, у меня просто была другая мысль: без какой-либо буферизации и без надлежащего формата потока, сможет ли получатель определить, когда кадр начинается и заканчивается, а когда он пропустил данные? Daniel B 7 лет назад 1
Я думаю, что это именно то, что произошло, и почему это не сработало или только с множеством странных цветных артефактов. Что бы вы порекомендовали сделать, чтобы этого избежать? user3387542 7 лет назад 0

1 ответ на вопрос

0
plumpsack

ОС: Debian Stretch

cat /etc/*release PRETTY_NAME="Debian GNU/Linux 9 (stretch)" NAME="Debian GNU/Linux" VERSION_ID="9" VERSION="9 (stretch)" ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/"  uname -v #1 SMP Debian 4.9.25-1 (2017-05-02)  cvlc --version VLC media player 2.2.6 Umbrella (revision 2.2.6-0-g1aae78981c) VLC-Version 2.2.6 Umbrella (2.2.6-0-g1aae78981c) Kompiliert von buildd auf binet.debian.org (May 24 2017 16:00:59) Kompiler: gcc version 6.3.0 20170516 (Debian 6.3.0-18) Dieses Programm kommt OHNE GEWÄHRLEISTUNG. Sie dürfen das Programm unter den Bedingungen der GNU General Public License weitergegeben; Für Details bitte die Datei COPYING ansehen. Geschrieben von der VideoLAN-Gruppe; zu sehen in der AUTHORS-Datei.  ffplay -version ffplay version 3.2.5-1 Copyright (c) 2003-2017 the FFmpeg developers built with gcc 6.3.0 (Debian 6.3.0-18) 20170516 configuration: --prefix=/usr --extra-version=1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared libavutil 55. 34.101 / 55. 34.101 libavcodec 57. 64.101 / 57. 64.101 libavformat 57. 56.101 / 57. 56.101 libavdevice 57. 1.100 / 57. 1.100 libavfilter 6. 65.100 / 6. 65.100 libavresample 3. 1. 0 / 3. 1. 0 libswscale 4. 2.100 / 4. 2.100 libswresample 2. 3.100 / 2. 3.100 libpostproc 54. 1.100 / 54. 1.100  ffmpeg -version ffmpeg version 3.2.5-1 Copyright (c) 2000-2017 the FFmpeg developers built with gcc 6.3.0 (Debian 6.3.0-18) 20170516 configuration: --prefix=/usr --extra-version=1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared libavutil 55. 34.101 / 55. 34.101 libavcodec 57. 64.101 / 57. 64.101 libavformat 57. 56.101 / 57. 56.101 libavdevice 57. 1.100 / 57. 1.100 libavfilter 6. 65.100 / 6. 65.100 libavresample 3. 1. 0 / 3. 1. 0 libswscale 4. 2.100 / 4. 2.100 libswresample 2. 3.100 / 2. 3.100 libpostproc 54. 1.100 / 54. 1.100 

ffplay / dev / video0

Input #0, video4linux2,v4l2, from '/dev/video0':B sq= 0B f=0/0  Duration: N/A, start: 45810.627382, bitrate: 122880 kb/s Stream #0:0: Video: rawvideo (YUY2 / 0x32595559), yuyv422, 640x480, 122880 kb/s, 25 fps, 25 tbr, 1000k tbn, 1000k tbc 

-> yuyv422

Идеальная пара (необработанное видео):

Сервер:

cvlc -vvv v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=640 :v4l2-height=480 :v4l2-fps 25 --sout '#standard' 

Клиент:

ffplay -f rawvideo -pixel_format yuyv422 -video_size 640x480 -framerate 25 http://localhost:8081  (ffplay -f rawvideo -pixel_format yuyv422 -video_size 640x480 http://localhost:8081) (ffplay -f rawvideo -pixel_format yuyv422 -video_size 640x480 http://server-ip:8081) 

Извините, нет ни gbit-сети, ни 1080p-камеры :(

Для пользователей Raspberry Pi (3):

sudo modprobe bcm2835-v4l2 

(Нет дисплея / X11 на pi3)

ffprobe /dev/video0  ffprobe version N-85344-gb438a78 Copyright (c) 2007-2017 the FFmpeg developers built with gcc 4.9.2 (Raspbian 4.9.2-10) configuration:  libavutil 55. 60.100 / 55. 60.100 libavcodec 57. 92.100 / 57. 92.100 libavformat 57. 72.100 / 57. 72.100 libavdevice 57. 7.100 / 57. 7.100 libavfilter 6. 84.100 / 6. 84.100 libswscale 4. 7.100 / 4. 7.100 libswresample 2. 8.100 / 2. 8.100 Input #0, video4linux2,v4l2, from '/dev/video0': Duration: N/A, start: 153.062714, bitrate: 283115 kb/s Stream #0:0: Video: rawvideo (I420 / 0x30323449), yuv420p, 1024x768, 283115 kb/s, 30 fps, 30 tbr, 1000k tbn, 1000k tbc 

-> yuv420p

Но с,

cvlc -vvv v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=1024 :v4l2-height=768 :v4l2-fps=30 --sout '#standard' 

результат с

ffplay -f rawvideo -pixel_format yuv420p -video_size 1024x768 http://server-ip:3333 

на клиенте не было в порядке.

cvlc -vvv v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=800 :v4l2-height=600 :v4l2-fps=16 --sout '#standard' 

(~ 12 Мбит / с -> 100 Мбит)

на сервере и результат с

ffplay -f rawvideo -pixel_format yuv420p -video_size 800x600 http://server-ip:3333 

на клиенте было ок !

Не могли бы вы объяснить, что представляет собой каждый из разделов и как на это отвечает ОП? music2myear 7 лет назад 0
Извините, но я не понимаю ваш вопрос, может быть, я пропустил тему ... "Видео с малой задержкой, передаваемое в локальной гигабитной сети с использованием linux" Я предложил решение для "почти" свободной без задержек потоковой передачи необработанного видео. Почти зависит от хоста, сети и клиентов (производительность). Что ты не понимаешь в моем ответе? plumpsack 7 лет назад 0
Вы опубликовали много команд и их вывод, но нигде не упоминали, что это была «почти низкая задержка», или краткое повествование, объясняющее конечную цель и роль, которую каждый шаг, который вы включили, играет в этом решении. Это не займет много, но немного больше объяснения повествования значительно улучшит этот ответ. music2myear 7 лет назад 0
«Вы отправили много команд ...» и что вы не поняли? plumpsack 7 лет назад 0
Я не ОП. Ответ не для меня. Я - пользователь этого сайта, заинтересованный в том, чтобы вопросы и ответы были ясными и хорошими, понимаю я их или нет. music2myear 7 лет назад 0
Что непонятно «вам» в таких командах, как cat / etc / * release, uname -v, cvlc --version, ffplay -version, ffmpeg -version, ffplay / dev / video0, ffprobe / dev / video0,? plumpsack 7 лет назад 0

Похожие вопросы