RTP/UDP/TCP — различия между версиями

Материал из virt2real wiki
Перейти к: навигация, поиск
(Новая страница: «= Передача видео = Большинство примеров по передаче видео и звука использует GStreamer для пр…»)

Версия 22:12, 13 октября 2014

Содержание

Передача видео

Большинство примеров по передаче видео и звука использует GStreamer для приёма потока. Версии могут отличаться (0.10 или 1.xx), основное отличие в цепочках - в GStreamer 1.xx элемент ffdec_h264 был переименован в avdec_h264.

RTP (SD)

Передача на Виртурилке:

gst-launch v4l2src always-copy=false chain-ipipe=true ! \
   video/x-raw-yuv,format='(fourcc)'NV12, width=640, height=480, framerate='(fraction)'30/1 ! \
   dmaiaccel ! \
   dmaienc_h264 ddrbuf=true encodingpreset=2 ratecontrol=4 targetbitrate=600000 ! \
   rtph264pay !  queue ! \
   udpsink port=3000 host=<ip_адрес_клиента> sync=false

Приём (Linux):

gst-launch udpsrc port=3000 ! \ 
   "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, \ 
   sprop-parameter-sets=(string)\"Z2QAKK2EBUViuKxUdCAqKxXFYqOhAVFYrisVHQgKisVxWKjoQFRWK4rFR0ICorFcVio6ECSFITk8nyfk/k/J8nm5s00IEkKQnJ5Pk/J/J+T5PNzZprQFAeyA\,aO48sA\=\=\", \
   payload=(int)96, ssrc=(guint)2498431066, clock-base=(guint)297251943, seqnum-base=(guint)34949" ! \
   rtph264depay ! queue ! avdec_h264 ! postproc_tmpnoise ! ffmpegcolorspace ! \
   ximagesink sync=false show-preroll-frame=false

Приём (Windows): Перед запуском в Windows рекомендуем в консоли (запускаемой пуск-выполнить-cmd.exe) перейти в папку с исполняемым файлом gstreamer-a. Обычно это c:\gstreamer\1.0\x64_86\bin. Путь может отличаться в зависимости от установленной версии gstreamer. Данный пример действителен для gstreamer 1.0

gst-launch-1.0 udpsrc port=3000 ! \
"application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z2QAM62EBUViuKxUdCAqKxXFYqOhAVFYrisVHQgKisVxWKjoQFRWK4rFR0ICorFcVio6ECSFITk8nyfk/k/J8nm5s00IEkKQnJ5Pk/J/J+T5PNzZprQFAeyA\,aO48sA\=\=\", \
payload=(int)96, ssrc=(guint)1501768479, clock-base=(guint)2009522317, seqnum-base=(guint)40332" ! \
rtph264depay ! \
avdec_h264 ! \
d3dvideosink sync=false enable-navigation-events=false show-preroll-frame=false max-lateness=10

Если работаете с gstreamer 0.10 то необходимо два изменения: gst-launch-0.10 вместо gst-launch-1.0 и avdec_h264 вместо ffdec_h264. Вот строка в Windows для gstreamer 0.10:

gst-launch-0.10 udpsrc port=3000 ! \
"application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z2QAM62EBUViuKxUdCAqKxXFYqOhAVFYrisVHQgKisVxWKjoQFRWK4rFR0ICorFcVio6ECSFITk8nyfk/k/J8nm5s00IEkKQnJ5Pk/J/J+T5PNzZprQFAeyA\,aO48sA\=\=\", \
payload=(int)96, ssrc=(guint)1501768479, clock-base=(guint)2009522317, seqnum-base=(guint)40332" ! \
rtph264depay ! \
ffdec_h264 ! \
d3dvideosink sync=false enable-navigation-events=false show-preroll-frame=false max-lateness=10

RTP (HD)

Передача на Виртурилке:

gst-launch v4l2src always-copy=false chain-ipipe=true ! \
   video/x-raw-yuv,format='(fourcc)'NV12, width=1280, height=720, framerate='(fraction)'30/1 ! \
   dmaiaccel ! \
   dmaienc_h264 ddrbuf=true encodingpreset=2 ratecontrol=4 targetbitrate=2000000 ! \
   rtph264pay !  queue ! \
   udpsink port=3000 host=<ip_адрес_клиента> sync=false


Приём (Windows):

Для gstreamer 1.0:

gst-launch-1.0 udpsrc port=3000 ! \
"application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, \
sprop-parameter-sets=(string)\"Z2QAKK2EBUViuKxUdCAqKxXFYqOhAVFYrisVHQgKisVxWKjoQFRWK4rFR0ICorFcVio6ECSFITk8nyfk/k/J8nm5s00IEkKQnJ5Pk/J/J+T5PNzZprQCgC3I\,aO48sA\=\=\", \
payload=(int)96, ssrc=(guint)321130676, clock-base=(guint)96808957, seqnum-base=(guint)33742" ! \
queue ! \
rtph264depay ! \
avdec_h264 ! \
queue ! \
d3dvideosink sync=false

Для gstreamer 0.10:

gst-launch-0.10 udpsrc port=3000 ! \
"application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, \
sprop-parameter-sets=(string)\"Z2QAKK2EBUViuKxUdCAqKxXFYqOhAVFYrisVHQgKisVxWKjoQFRWK4rFR0ICorFcVio6ECSFITk8nyfk/k/J8nm5s00IEkKQnJ5Pk/J/J+T5PNzZprQCgC3I\,aO48sA\=\=\", \
payload=(int)96, ssrc=(guint)321130676, clock-base=(guint)96808957, seqnum-base=(guint)33742" ! \
queue ! \
rtph264depay ! \
ffdec_h264 ! \
queue ! \
d3dvideosink sync=false

MJPEG + TCP (SD)

Запустим MJPEG-сервер на порту 8888 на виртурилке:

gst-launch v4l2src always-copy=false chain-ipipe=true  ! \
   video/x-raw-yuv,format=\(fourcc\)NV12, width=640, height=480, framerate=\(fraction\)30/1 ! \
   dmaiaccel ! dmaienc_mjpeg qValue=40 copyOutput=true outputBufferSize=0 ! \
   tcpserversink port=8888  sync=false

MJPEG + UDP

Передача (на Виртурилке):

gst-launch v4l2src always-copy=FALSE chain-ipipe=true ! \ 
   video/x-raw-yuv,format=\(fourcc\)NV12, width=640, height=480, framerate=\(fraction\)30/1 ! \
   dmaiaccel ! queue ! dmaienc_mjpeg qValue=40 ! \ 
   udpsink port=3000 host=192.168.1.44 sync=false enable-last-buffer=false

Приём (Linux):

gst-launch udpsrc port=3000 caps="image/jpeg, width=(int)640, heigth=(int)480, framerate=30/1" ! \
   queue ! jpegdec ! ffmpegcolorspace ! ximagesink sync=false

Добавим таймер поверх видео и фильтрацию шумов на приёмной стороне:

gst-launch udpsrc port=3000 caps="image/jpeg, width=(int)640, heigth=(int)480, framerate=30/1" ! \
   queue ! jpegdec ! postproc_tmpnoise !  ffmpegcolorspace ! \
   clockoverlay shaded-background=true halignment=2 line-alignment=2 ! \
   timeoverlay shaded-background=true  ! \
   ximagesink sync=false

Передача звука

Передача видео и звука

RTP (HD H.264 + AAC)

На виртурилке:

#!/bin/sh
IP=192.168.10.10
VPORT=5000
APORT=5001
gst-launch -ve \
        v4l2src always-copy=false chain-ipipe=true ! \
        video/x-raw-yuv,format='(fourcc)'NV12, width=1280, height=720, \
                framerate='(fraction)'30/1 ! \
        dmaiaccel ! \
        dmaienc_h264 ddrbuf=true rcalgo=0 bytestream=true encodingpreset=2 \
                ratecontrol=1 intraframeinterval=46 idrinterval=46 targetbitrate=1000000 ! \
        rtph264pay ! \
        udpsink port=$VPORT host=$IP sync=false enable-last-buffer=false \
        alsasrc latency-time=10000 slave-method=0 ! \
        audio/x-raw-int, channels=1, rate=16000, \
                endianness=1234,signed=true,width=16,depth=16 ! \
        dmaienc_aac bitrate=32000 tns=false copyOutput=true outputBufferSize=90000 ! \
        queue ! \
        udpsink host=$IP port=$APORT