" Ранее я обещал отчитаться об установке на 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 изредка проскакивают отдельные кадры, но битые. Грешу на 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}'
При передаче 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 сек. Установка при запуске ключа caching "игнорируется из соображений безопасности" Использование других, более меньших, поддерживаемых данной камерой разрешений, тоже ничего не дает. Другие форматы вещания (rtsp, http) пока не пробовал. Т.к. vlc более универсален, кроссплатформенный, в нем очень просто накладывать надписи на изображение и формировать пакеты каналов, то дальше планирую сосредоточиться на нем, не смотря на 3 сек задержку вещания. Последний нюанс можно устранить перекомпилированием vlc "под себя" в конце концов
При вещании rtp потока в формате MPEG2 (QVGA 320x240) с частотой 25 к/с, формируемого из сжатого в камере потока с наложением на изображение статического текста, текущих даты и времени с точностью до секунды, процессор загружен, в среднем, на 30...35%. Битрейт лежит в пределах 600...1200 кб/с в зависимости от динамичности изменения картинки. После проверки работоспособности с другой камерой можно будет сделать выводы о том, сколько камер может "потянуть" Raspberry pi одновременно. Но уже сейчас можно рассчитывать на "железные" 2...3 камеры при разрешении QVGA 320x240."
Re: Трансляция видео
За 20 баксов + достатка? Я явно не их клиент. А для чего Вы планируете ее использовать?
Re: Трансляция видео
Спасибо за ответ! Кстати, совсем недавно вышла официальная камера для распбери. http://uk.farnell.com/jsp/search/productdetail.jsp?CMP=e-email-120713-camera&SKU=2302279&MER=baynote-2302279-pr. Планирую заказать, она не usb втыкается прямо в борт малины и характеристиками может похвастаться.
Re: Трансляция видео
К сожалению упустил Ваш комментарий и отвечаю сейчас, с большой задержкой - надо тщательно подбирать камеру и сборку 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. Может у вас появились новости, как сделать передачу видео с малинки эффективнее?
Отправить новый комментарий