Gstreamer One Liners: Unterschied zwischen den Versionen

aus Metalab, dem offenen Zentrum für meta-disziplinäre Magier und technisch-kreative Enthusiasten.
Wechseln zu: Navigation, Suche
K (Receive & dump synchronized video streams)
 
(19 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
 
kind of.
 
kind of.
  
== Stereo Goggles ==
+
== Stereo video casting ==
  
 
=== Capture & send synchronized video streams ===
 
=== Capture & send synchronized video streams ===
 
<pre>
 
<pre>
gst-launch-0.10 -v gstrtpbin name=rtpbin \
+
gst-launch-0.10 -v gstrtpbin name=rtpbin\
# Capture video0 \
+
\ # Capture video0\
v4l2src device=/dev/video0 ! \
+
v4l2src device=/dev/video0 !\
'image/jpeg, width=(int)640, height=(int)480, framerate=(fraction)30/1' ! \
+
'image/jpeg, width=(int)640, height=(int)480, framerate=(fraction)30/1' !\
# Session 0: Create \
+
\ # Session 0: Create\
rtpjpegpay ! rtpbin.send_rtp_sink_0 \  
+
rtpjpegpay ! rtpbin.send_rtp_sink_0\
rtpbin.send_rtp_src_0 ! multiudpsink clients="127.0.0.1:9996" \
+
rtpbin.send_rtp_src_0 ! multiudpsink clients="127.0.0.1:9996"\
# Session 0: Send RTCP packets \
+
\ # Session 0: Send RTCP packets\
rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:9997" sync=false async=false \
+
rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:9997" sync=false async=false\
# Session 0: Receive RTCP packets \
+
\ # Session 0: Receive RTCP packets\
udpsrc port=10000 ! rtpbin.recv_rtcp_sink_0 \
+
udpsrc port=10000 ! rtpbin.recv_rtcp_sink_0\
# Capture video1 \
+
\ # Capture video1\
v4l2src device=/dev/video1 ! \
+
v4l2src device=/dev/video1 !\
'image/jpeg, width=(int)640, height=(int)480, framerate=(fraction)30/1' ! \
+
'image/jpeg, width=(int)640, height=(int)480, framerate=(fraction)30/1' !\
# Session 1: Create \
+
\ # Session 1: Create\
rtpjpegpay ! rtpbin.send_rtp_sink_1 \
+
rtpjpegpay ! rtpbin.send_rtp_sink_1\
rtpbin.send_rtp_src_1 ! multiudpsink clients="127.0.0.1:9998" \
+
rtpbin.send_rtp_src_1 ! multiudpsink clients="127.0.0.1:9998"\
# Session 1: Receive RTCP packets \
+
\ # Session 1: Receive RTCP packets\
rtpbin.send_rtcp_src_1 ! multiudpsink clients="127.0.0.1:9999" sync=false async=false \
+
rtpbin.send_rtcp_src_1 ! multiudpsink clients="127.0.0.1:9999" sync=false async=false\
# Session 1: Send RTCP packets \
+
\ # Session 1: Send RTCP packets\
 
udpsrc port=10001 ! rtpbin.recv_rtcp_sink_1
 
udpsrc port=10001 ! rtpbin.recv_rtcp_sink_1
 
</pre>
 
</pre>
Zeile 30: Zeile 30:
 
=== Receive & dump synchronized video streams ===
 
=== Receive & dump synchronized video streams ===
 
<pre>
 
<pre>
gst-launch-0.10 -v gstrtpbin name=rtpbin \
+
gst-launch-0.10 -v gstrtpbin name=rtpbin\
# Session 0: join \
+
\ # Session 0: join \
 
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=9996 !\
 
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=9996 !\
rtpbin.recv_rtp_sink_0 \
+
rtpbin.recv_rtp_sink_0 \
rtpbin. ! rtpjpegdepay ! \  
+
rtpbin. ! rtpjpegdepay !\
# Session 0: Dump video \
+
\ # Session 0: Dump video\
filesink location=session0.mjpeg \
+
filesink location=session0.mjpeg\
# Session 0: Receive RTCP packets \
+
\ # Session 0: Receive RTCP packets\
udpsrc port=9997 ! rtpbin.recv_rtcp_sink_0 \
+
udpsrc port=9997 ! rtpbin.recv_rtcp_sink_0\
# Session 0: Send RTCP packets \
+
\ # Session 0: Send RTCP packets\
rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:10000" sync=false async=false \
+
rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:10000" sync=false async=false\
# Session 1: join \
+
\ # Session 1: join\
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=9998 ! \
+
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=9998 !\
rtpbin.recv_rtp_sink_1 \
+
rtpbin.recv_rtp_sink_1 \
rtpbin. ! rtpjpegdepay ! \
+
rtpbin. ! rtpjpegdepay !\
# Session 1: Dump video \
+
\ # Session 1: Dump video\
filesink location=session1.mjpeg \
+
filesink location=session1.mjpeg\
# Session 1: Receive RTCP packets \
+
\ # Session 1: Receive RTCP packets\
udpsrc port=9999 ! rtpbin.recv_rtcp_sink_1 \
+
udpsrc port=9999 ! rtpbin.recv_rtcp_sink_1\
# Session 1: Send RTCP packets \
+
\ # Session 1: Send RTCP packets\
 
rtpbin.send_rtcp_src_1 ! multiudpsink clients="127.0.0.1:10001" sync=false async=false
 
rtpbin.send_rtcp_src_1 ! multiudpsink clients="127.0.0.1:10001" sync=false async=false
 
</pre>
 
</pre>
Zeile 56: Zeile 56:
 
<pre>
 
<pre>
  
gst-launch-0.10 -v gstrtpbin name=rtpbin \
+
gst-launch-0.10 -v gstrtpbin name=rtpbin\
# Session 0: Join \
+
\ # Session 0: Join\
 
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=9996 !\
 
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=9996 !\
rtpbin.recv_rtp_sink_0 \
+
rtpbin.recv_rtp_sink_0 \
rtpbin. ! rtpjpegdepay !  
+
rtpbin. ! rtpjpegdepay !\
# Session 1: Decode video & adjust framerate \
+
\ # Session 1: Decode video & adjust framerate\
jpegdec ! videorate ! video/x-raw-yuv,framerate=15/1 ! \
+
jpegdec ! videorate ! video/x-raw-yuv,framerate=15/1 !\
# Session 0: Play video \
+
\ # Session 0: Play video\
xvimagesink \
+
xvimagesink\
# Session 0: Receive RTCP packets \
+
\ # Session 0: Receive RTCP packets\
udpsrc port=9997 ! rtpbin.recv_rtcp_sink_0 \
+
udpsrc port=9997 ! rtpbin.recv_rtcp_sink_0\
# Session 0: Send RTCP packets \
+
\ # Session 0: Send RTCP packets\
 
rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:10000" sync=false async=false \
 
rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:10000" sync=false async=false \
  
gst-launch-0.10 -v gstrtpbin name=rtpbin \
+
gst-launch-0.10 -v gstrtpbin name=rtpbin\
# Session 1: Join \
+
\ # Session 1: Join\
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=9998 ! \
+
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=9998 !\
rtpbin.recv_rtp_sink_1 \
+
rtpbin.recv_rtp_sink_1\
rtpbin. ! rtpjpegdepay ! \
+
rtpbin. ! rtpjpegdepay !\
# Session 1: Decode video & adjust framerate \
+
\ # Session 1: Decode video & adjust framerate\
jpegdec ! videorate ! video/x-raw-yuv,framerate=15/1 ! \
+
jpegdec ! videorate ! video/x-raw-yuv,framerate=15/1 !\
# Session 1: Play video \
+
\ # Session 1: Play video\
xvimagesink
+
xvimagesink\
# Session 1: Receive RTCP packets \
+
\ # Session 1: Receive RTCP packets\
udpsrc port=9999 ! rtpbin.recv_rtcp_sink_1 \
+
udpsrc port=9999 ! rtpbin.recv_rtcp_sink_1\
# Session 1: Send RTCP packets \
+
\ # Session 1: Send RTCP packets\
 
rtpbin.send_rtcp_src_1 ! multiudpsink clients="127.0.0.1:10001" sync=false async=false
 
rtpbin.send_rtcp_src_1 ! multiudpsink clients="127.0.0.1:10001" sync=false async=false
 
</pre>
 
</pre>
Zeile 87: Zeile 87:
 
=== Play dumped videos ===
 
=== Play dumped videos ===
 
<pre>
 
<pre>
gst-launch-0.10 -v \
+
gst-launch-0.10 -v\
# Open session0.mjpeg
+
\ # Open session0.mjpeg\
filesrc location=session0.mjpeg ! \
+
filesrc location=session0.mjpeg !\
# Decode video & adjust framerate
+
\ # Decode video & adjust framerate\
jpegdec ! videorate ! video/x-raw-yuv,framerate=15/1 ! \
+
jpegdec ! videorate ! video/x-raw-yuv,framerate=15/1 !\
# Play video
+
\ # Play video\
xvimagesink \
+
xvimagesink\
# Open session1.mjpeg
+
\ # Open session1.mjpeg\
filesrc location=session1.mjpeg ! \
+
filesrc location=session1.mjpeg !\
# Decode video & adjust framerate
+
\ # Decode video & adjust framerate\
jpegdec ! videorate ! video/x-raw-yuv,framerate=15/1 ! \
+
jpegdec ! videorate ! video/x-raw-yuv,framerate=15/1 !\
# Play video
+
\ # Play video\
 
xvimagesink
 
xvimagesink
 
</pre>
 
</pre>
  
 +
== Greenbox ==
 +
 +
=== Realtime alpha blending with colorkey ===
 +
 +
<pre>
 +
gst-launch-0.10 -v\
 +
\ # V4l2: Open\
 +
v4l2src device=/dev/video0 ! 'video/x-raw-yuv, format=(fourcc)YUY2, width=(int)640, height=(int)480, framerate=(fraction)15/2' !\
 +
\ # v4l2: Apply alpha\
 +
ffmpegcolorspace ! alpha method=custom target-r=0 target-g=255 target-b=0 angle=40 !\
 +
\ # v4l2: mix\
 +
videomixer name=mix !\
 +
\ # Mixer: display\
 +
ffmpegcolorspace ! xvimagesink\
 +
\ # Background: open\
 +
filesrc location=bg.avi ! decodebin !\
 +
\ # Background: mix\
 +
ffmpegcolorspace ! mix.
 +
</pre>
 +
 +
Creates pretty nice results even with crappy equipment. i used green paper a webcam and usual table lamp. [http://metalab.at/wiki/images/4/45/Greenbox.avi video]
 +
 +
== Control multiple channels ==
 +
Decode the src and tee it. deinterleave both stream copies and edit (equalizer & volume) every channel independently. write to 2 different alsa devices.
 +
 +
<pre>
 +
gst-launch-0.10 -v filesrc name=src ! decodebin ! tee name=t1\
 +
t1. !  queue ! deinterleave name=deint1\
 +
interleave name=int1 ! alsasink device=hw:1\
 +
deint1.src1 ! queue ! equalizer-3bands name=eq11 ! volume name=v11 ! int1.sink1\
 +
deint1.src0 ! queue ! equalizer-3bands name=eq10 ! volume name=v10 ! int1.sink2\
 +
t1. ! queue ! deinterleave name=deint0\
 +
interleave name=int0 ! alsasink device=hw:0\
 +
deint0.src1 ! queue !  equalizer-3bands name=eq01 ! volume name=v01 ! int0.sink1\
 +
deint0.src0 ! queue !  equalizer-3bands name=eq00 ! volume name=v00 ! int0.sink2
 +
 +
</pre>
 
[[Kategorie:CLI]]
 
[[Kategorie:CLI]]
 +
[[Kategorie:Howto]]

Aktuelle Version vom 23. Januar 2013, 22:46 Uhr

kind of.

Stereo video casting

Capture & send synchronized video streams

gst-launch-0.10 -v gstrtpbin name=rtpbin\
\ # Capture video0\
v4l2src device=/dev/video0 !\
'image/jpeg, width=(int)640, height=(int)480, framerate=(fraction)30/1' !\
\ # Session 0: Create\
rtpjpegpay ! rtpbin.send_rtp_sink_0\
rtpbin.send_rtp_src_0 ! multiudpsink clients="127.0.0.1:9996"\
\ # Session 0: Send RTCP packets\
rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:9997" sync=false async=false\
\ # Session 0: Receive RTCP packets\
udpsrc port=10000 ! rtpbin.recv_rtcp_sink_0\
\ # Capture video1\
v4l2src device=/dev/video1 !\
'image/jpeg, width=(int)640, height=(int)480, framerate=(fraction)30/1' !\
\ # Session 1: Create\
rtpjpegpay ! rtpbin.send_rtp_sink_1\
rtpbin.send_rtp_src_1 ! multiudpsink clients="127.0.0.1:9998"\
\ # Session 1: Receive RTCP packets\
rtpbin.send_rtcp_src_1 ! multiudpsink clients="127.0.0.1:9999" sync=false async=false\
\ # Session 1: Send RTCP packets\
udpsrc port=10001 ! rtpbin.recv_rtcp_sink_1

Receive & dump synchronized video streams

gst-launch-0.10 -v gstrtpbin name=rtpbin\
\ # Session 0: join \
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=9996 !\
rtpbin.recv_rtp_sink_0 \
rtpbin. ! rtpjpegdepay !\
\ # Session 0: Dump video\
filesink location=session0.mjpeg\
\ # Session 0: Receive RTCP packets\
udpsrc port=9997 ! rtpbin.recv_rtcp_sink_0\
\ # Session 0: Send RTCP packets\
rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:10000" sync=false async=false\
\ # Session 1: join\
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=9998 !\
rtpbin.recv_rtp_sink_1 \
rtpbin. ! rtpjpegdepay !\
\ # Session 1: Dump video\
filesink location=session1.mjpeg\
\ # Session 1: Receive RTCP packets\
udpsrc port=9999 ! rtpbin.recv_rtcp_sink_1\
\ # Session 1: Send RTCP packets\
rtpbin.send_rtcp_src_1 ! multiudpsink clients="127.0.0.1:10001" sync=false async=false

Receive & play synchronized video streams


gst-launch-0.10 -v gstrtpbin name=rtpbin\
\ # Session 0: Join\
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=9996 !\
rtpbin.recv_rtp_sink_0 \
rtpbin. ! rtpjpegdepay !\
\ # Session 1: Decode video & adjust framerate\
jpegdec ! videorate ! video/x-raw-yuv,framerate=15/1 !\
\ # Session 0: Play video\
xvimagesink\
\ # Session 0: Receive RTCP packets\
udpsrc port=9997 ! rtpbin.recv_rtcp_sink_0\
\ # Session 0: Send RTCP packets\
rtpbin.send_rtcp_src_0 ! multiudpsink clients="127.0.0.1:10000" sync=false async=false \

gst-launch-0.10 -v gstrtpbin name=rtpbin\
\ # Session 1: Join\
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=9998 !\
rtpbin.recv_rtp_sink_1\
rtpbin. ! rtpjpegdepay !\
\ # Session 1: Decode video & adjust framerate\
jpegdec ! videorate ! video/x-raw-yuv,framerate=15/1 !\
\ # Session 1: Play video\
xvimagesink\
\ # Session 1: Receive RTCP packets\
udpsrc port=9999 ! rtpbin.recv_rtcp_sink_1\
\ # Session 1: Send RTCP packets\
rtpbin.send_rtcp_src_1 ! multiudpsink clients="127.0.0.1:10001" sync=false async=false

Play dumped videos

gst-launch-0.10 -v\
\ # Open session0.mjpeg\
filesrc location=session0.mjpeg !\
\ # Decode video & adjust framerate\
jpegdec ! videorate ! video/x-raw-yuv,framerate=15/1 !\
\ # Play video\
xvimagesink\
\ # Open session1.mjpeg\
filesrc location=session1.mjpeg !\
\ # Decode video & adjust framerate\
jpegdec ! videorate ! video/x-raw-yuv,framerate=15/1 !\
\ # Play video\
xvimagesink

Greenbox

Realtime alpha blending with colorkey

gst-launch-0.10 -v\
\ # V4l2: Open\
v4l2src device=/dev/video0 ! 'video/x-raw-yuv, format=(fourcc)YUY2, width=(int)640, height=(int)480, framerate=(fraction)15/2' !\
\ # v4l2: Apply alpha\
ffmpegcolorspace ! alpha method=custom target-r=0 target-g=255 target-b=0 angle=40 !\
\ # v4l2: mix\
videomixer name=mix !\
\ # Mixer: display\
ffmpegcolorspace ! xvimagesink\
\ # Background: open\
filesrc location=bg.avi ! decodebin !\
\ # Background: mix\
ffmpegcolorspace ! mix.

Creates pretty nice results even with crappy equipment. i used green paper a webcam and usual table lamp. video

Control multiple channels

Decode the src and tee it. deinterleave both stream copies and edit (equalizer & volume) every channel independently. write to 2 different alsa devices.

gst-launch-0.10 -v filesrc name=src ! decodebin ! tee name=t1\
t1. !  queue ! deinterleave name=deint1\
interleave name=int1 ! alsasink device=hw:1\
deint1.src1 ! queue ! equalizer-3bands name=eq11 ! volume name=v11 ! int1.sink1\
deint1.src0 ! queue ! equalizer-3bands name=eq10 ! volume name=v10 ! int1.sink2\
t1. ! queue ! deinterleave name=deint0\
interleave name=int0 ! alsasink device=hw:0\
deint0.src1 ! queue !  equalizer-3bands name=eq01 ! volume name=v01 ! int0.sink1\
deint0.src0 ! queue !  equalizer-3bands name=eq00 ! volume name=v00 ! int0.sink2