Как организовать потоковое вещание с веб-камеры в linux?

Приветствую!
Всех с наступившим Новым годом 2017!

Пере до мной встала задача организовать потоковое вещание с вебки на линуксе.
Вещание происходит внутри локальной сети, поэтому в качестве протокола передачи хочу использовать rtp, rtsp, или udp - по большому счёту протокол значения не имеет, но думаю не http точно.
На первом месте качество картинки. В windows эта вебка показывает очень хорошо, даже использует подсветку лица в темноте.
Так же очень желательно разделить видео и аудио на 2 разных потока, т.к. в итоге планируется раздельная обработка видео и аудио для разных задач.

На одной машине linux debian с подключенной веб-камерой, ну другой windows на которой я проверяю результаты трансляции с помощью плеера vlc.
В линуксе я не силен и задача довольно специфическая, так что гугл помог не сильно.

Что у меня получилось:

1) Получилось транслировать видео с помощью cv2 на питоне - я понимаю, это дикий костыль, но проверял работоспособность. Меня не устроило то, что качество захвата с веб-камеры при этом способе очень низкое. Изображение плохое и никакие настройки не дали приемлемого результата. Возможно дело в том, что opencv использует свой универсальный драйвер для работы с веб-камерой, но это догадка.

2) Попробовал использовать vlc - но настройки использовал из гугл-примеров. В итоге заработал только такой вариант:
vlc v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=1280 :v4l2-height=720 --sout="#transcode{vcodec=h264,vb=800,scale=1,acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{sdp=rtsp://:8554/live.ts}" -I dummy


При этом звук вообще отсутствовал, а изображение было серым, с со смазанными конурами того, что есть перед камерой.

3) Использовать ffmpeg вообще не вышло, на смотрящей стороне, воспроизведение хоть и не вызвало никаких ошибок, но изображения не было вовсе, как и звука. Примерный код того, что я писал:
ffmpeg -f video4linux2 -i /dev/video0 -f alsa -vcodec libx264 -s 320x240 -pix_fmt yuv420p -vb 200000 -minrate 200000 -maxrate 200000 -bufsize 2000000 -acodec libmp3lame -ab 128k -ar 44100 -ac 2 -f rtp rtp://:8554/


В итоге ни один из вариантов не привёл к удачной трансляции.
Хотелось бы получить помощь с настройкой этой злосчастной трансляции, на которую я уже потратил не один час :)

Спасибо)
  • Вопрос задан
  • 3949 просмотров
Пригласить эксперта
Ответы на вопрос 1
можно в сторону GStreamer глянуть, сам сейчас с ним разбираюсь.
начать с такого пайпа и расширять до обработки звука, кодирования в h264 и последующего rtp стриминга. тут уже гугл, знаю только, что соответствующие плагины имеются.
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=1280,height=720 ! videoconvert ! autovideosink


gst-inspect-1.0 -> покажет доступные плагины (элементы pipeline, вроде v4l2src выше)
gst-inspect-1.0 ${plugin} -> покажет подробную инфу о плагине и доступные настройки
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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