Gstreamer One Liners
aus Metalab Wiki, dem offenen Zentrum für meta-disziplinäre Magier und technisch-kreative Enthusiasten.
Version vom 30. Juni 2011, 16:13 Uhr von Amir (Diskussion | Beiträge) (→Capture & send synchronized video streams)
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
Thomas Steinbrenner
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