gstreamer rtp потоковая вебкамера - PullRequest
1 голос
/ 01 апреля 2011

я пытаюсь транслировать мою веб-камеру, используя OpenCV и gstreamer ... для этого сначала я тестирую с помощью командной строки:

gst-launch v4l2src ! ffmpegcolorspace ! theoraenc ! rtptheorapay ! udpsink host=localhost port=5000 sync=false -v

Затем я пытаюсь увидеть потоковую передачу с помощью этой командной строки:

gst-launch udpsrc port=5000 caps="video/x-raw-yuv, format=(fourcc)I420, framerate=(fraction)30/1, width=(int)640, height=(int)480, interlaced=(boolean)false" ! rtptheoradepay ! theoradec ! ximagesink

Но я получаю ошибку: не могу связать udpsrc0 с rtptheoradepay0 и не могу связать udpsrc0 с rtptheoradepay0

, затем я пытаюсь использовать vlc, чтобы увидеть, что я получаю с веб-камеры, используя rtp: // @ localhost: 5000, но ничего не происходит ...

что я делаю не так ???

Я использую Ubuntu 10.10 с gstreamer и плагинами, скомпилированными из репозитория git ...

Заранее спасибо !!

1 Ответ

1 голос
/ 01 апреля 2011

Для декодера Theora требуется дополнительный параметр конфигурации.Вот выдержка из спецификации:

1002 * Theora делает то же самое спорное дизайнерское решение, что Vorbis сделал включать всю модель вероятности для коэффициентов DCT и все квантование параметров тования в заголовках битового потока.Это часто несколько сотен полей.Поэтому невозможно декодировать любой кадр в потоке без предварительной выборки информации о кодеке и заголовков настройки кодека.

Вы можете увидеть эти параметры конфигурации как зацикленную строку в кодировке base64 в подробном описании gst-launchвывод:

/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)THEORA, sampling=(string)YCbCr-4:2:0, width=(string)640, height=(string)480, configuration=(string)\"AAAAAbkkHgqZ...gA\\=\\=\", delivery-method=(string)inline, payload=(int)96, ssrc=(guint)109069492, clock-base=(guint)1126428223, seqnum-base=(guint)23181

Вам необходимо скопировать эту строку и вставить ее в принимающий скрипт gst-launch:

$ gst-launch \
    udpsrc \
      port=5000 \
      caps="video/x-raw-yuv \
           ,format=I420 \
           ,framerate=30/1 \
           ,width=640,height=480 \
           ,interlaced=false \
           ,configuration=(string)\"AAAAAbkkHgqZ...gA\\=\\=\"" \
    ! rtptheoradepay \
    ...

Если вы не измените параметры кодирования видео (размер, битрейти т. д.) эта строка останется прежней.Таким образом, вы можете просто жестко закодировать его.

...