Трансляция видео

" Ранее я обещал отчитаться об установке на Raspberry Pi операционной системы Debain 6.0 Squeeze для архитектуры ARM. Отчитываюсь:

Поставил. Как и пишут в Сети, она не поддерживает fpu этого процессора. Поэтому не имеет смысла, если надо выполнять какие-либо трудоемкие вычисления. Вернулся обратно на Raspbian - в ней, по крайней мере, vlc рапортует о том, что fpu процессора задействован.

С видео все оказалось намного грустнее:

Для опытов использую древнюю web-камеру Sven IC930 (USB, VGA (640x480 0.3 MPx)). На Debain 7.0 на платформе IA она нормально показывает VGA картинку (640x480). На Raspberry, хоть и рапортует v4l2 о поддержке данного режима для данной камеры, но на Raspberry работает только QVGA (320x240) максимум: при попытке использования режима VGA плейер vlc вообще ни байта от камеры не получает, а в gstreamer изредка проскакивают отдельные кадры, но битые. Sad Грешу на v4l2. Причины не ясны, т.к. используется стандартный драйвер ucvideo. Ситуация одинакова для vlc и в режиме передачи несжатого видеопотока (video/x-raw-yuv) и при использовании внутреннего сжатия в камере (MJPEG). gstreamer редкие кадры отдает только при использовании MJPEG - с передачей несжатого потока ситуация аналогична vlc. Возможно тут нюансы данной конкретной камеры, но другую купить пока не собрался. Правда, на Хабрахабре пишут, что Logitech c270 работает в режиме VGA (640x480).

Если ограничится разрешением QVGA (320x240), то ситуация следующая:

И gtsreamer и vlc прекрасно отдают rtp видеопоток на другой компьютер.

Цитата:
$ gst-launch-0.10 v4l2src device=/dev/video0 ! always-copy=false input-src=composite ! 'video/x-raw-yuv,width=320,height=240, framerate=20/1'! rtph264pay ! udpsink host=192.168.1.101 port=5100 sync=false -v

Цитата:
$ vlc v4l2:///dev/video0:width=320:height=240:fps=25:image/mjpeg: --sub-filter=marq --marq-marquee="Cam1 %Y-%m-%d %H:%M:%S" --sout='#transcode{vcodec=mp2v,vb=4600,scale=1,width=320,height=240,fps=25,acodec=none,sfilter=marq}:rtp{mux=ts,dst=192.168.1.101,port=5100,sync=false}'

, где 192.168.1.101 и 5100 - IP адрес и порт принимающего rtp поток компьютера соответственно

При передаче vlc -> vlc получаем вот такую картинку:

Для просмотра rtp потока от vlc можно использовать как сам vlc, так и любой другой совместимый player - достаточно знать на какой порт принимающего компьютера идет вещание. При просмотре потока от gstreamer или от vlc, но gstreamer'ом, необходимо на принимающем компьютере предварительно создать описательный файл SDP или в командной строке указывать явно эти параметры, как в данном примере:

Цитата:
для несжатого потока:
$ gst-launch-0.10 udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:0, depth=(string)8, width=(string)640, height=(string)480, ssrc=(uint)1825678493, payload=(int)96, clock-base=(uint)4068866987, seqnum-base=(uint)24582" port=5100 ! queue ! rtpvrawdepay ! queue ! ffmpegcolorspace ! autovideosink

для сжатого потока:
$ gst-launch-0.10 udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)JPEG, ssrc=(guint)469657143, payload=(int)96, clock-base=(guint)2841649723, seqnum-base=(guint)39869" port=4000 ! rtpjpegdepay ! jpegdec ! autovideosink

gstreamer передает поток практически без задержки (около 0.1...0.2 сек), а vlc дает задержку в 3 сек. Sad Установка при запуске ключа caching "игнорируется из соображений безопасности" Sad Использование других, более меньших, поддерживаемых данной камерой разрешений, тоже ничего не дает. Другие форматы вещания (rtsp, http) пока не пробовал. Т.к. vlc более универсален, кроссплатформенный, в нем очень просто накладывать надписи на изображение и формировать пакеты каналов, то дальше планирую сосредоточиться на нем, не смотря на 3 сек задержку вещания. Последний нюанс можно устранить перекомпилированием vlc "под себя" в конце концов Eye

При вещании rtp потока в формате MPEG2 (QVGA 320x240) с частотой 25 к/с, формируемого из сжатого в камере потока с наложением на изображение статического текста, текущих даты и времени с точностью до секунды, процессор загружен, в среднем, на 30...35%. Битрейт лежит в пределах 600...1200 кб/с в зависимости от динамичности изменения картинки. После проверки работоспособности с другой камерой можно будет сделать выводы о том, сколько камер может "потянуть" Raspberry pi одновременно. Но уже сейчас можно рассчитывать на "железные" 2...3 камеры при разрешении QVGA 320x240."


Re: Трансляция видео

Цитата:
Спасибо за ответ! Кстати, совсем недавно вышла официальная камера для распбери. http://uk.farnell.com/jsp/search/productdetail.jsp?CMP=e-email-120713-camera&SKU=2302279&MER=baynote-2302279-pr. Планирую заказать, она не usb втыкается прямо в борт малины и характеристиками может похвастаться.

За 20 баксов + достатка? Laughing out loud Я явно не их клиент. А для чего Вы планируете ее использовать?

Re: Трансляция видео

Спасибо за ответ! Кстати, совсем недавно вышла официальная камера для распбери. http://uk.farnell.com/jsp/search/productdetail.jsp?CMP=e-email-120713-camera&SKU=2302279&MER=baynote-2302279-pr. Планирую заказать, она не usb втыкается прямо в борт малины и характеристиками может похвастаться.

Re: Трансляция видео

Цитата:
Спасибо за пост.С vlc у меня подобная ситуация, 3 секунды задержки и нет поддержки разрешения 640x480. А gstreamer ругается.
gst-launch-0.10 v4l2src device=/dev/video0 ! always-copy=false input-src=composite ! 'video/x-raw-yuv,width=320,height=240, framerate=20/1'! rtph4pay ! udpsink host=192.168.0.102 port=5100 sync=false -v
ПРЕДУПРЕЖДЕНИЕ: ошибочный конвейер: попытка соединения без элемента-источника( не понимаю, что он такое хочет)
Это грустно, так как задержка 3-секунды слишком большая. да и разрешение 320x240 тоже слабовато.
Дистрибутив Arch-arm. Может у вас появились новости, как сделать передачу видео с малинки эффективнее?

К сожалению упустил Ваш комментарий и отвечаю сейчас, с большой задержкой - надо тщательно подбирать камеру и сборку vlc или gstreamer - с камерой Logitech C270 у меня vlc на Raspberry Pi вообще работать отказался. Работал только gstreamer. Лично для себя я эту тему закрыл - сейчас он выполняет парочку второстепенных функций и я знаю что смогу подключить к нему, в случае необходимости, одну камеру.

Re: Трансляция видео

Спасибо за пост.С vlc у меня подобная ситуация, 3 секунды задержки и нет поддержки разрешения 640x480. А gstreamer ругается.
gst-launch-0.10 v4l2src device=/dev/video0 ! always-copy=false input-src=composite ! 'video/x-raw-yuv,width=320,height=240, framerate=20/1'! rtph4pay ! udpsink host=192.168.0.102 port=5100 sync=false -v
ПРЕДУПРЕЖДЕНИЕ: ошибочный конвейер: попытка соединения без элемента-источника( не понимаю, что он такое хочет)
Это грустно, так как задержка 3-секунды слишком большая. да и разрешение 320x240 тоже слабовато.
Дистрибутив Arch-arm. Может у вас появились новости, как сделать передачу видео с малинки эффективнее?

Отправить новый комментарий

Содержимое этого поля хранится скрыто и не будет показываться публично.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • You can use BBCode tags in the text.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.

Больше информации о возможностях форматирования

CAPTCHA
Этот вопрос задается для проверки того, не является ли обратная сторона программой-роботом (для предотвращения попыток автоматической регистрации).