Contents[hide]
PurposeThis page provides example pipelines that can be copied to the command line to demonstrate various GStreamer operations. Some of the pipelines may need modification for things such as file names, ip addresses, etc. It is our hope that people using this page will add new interesting pipelines that they themselves are using. For example, on DM6467 if you are decoding a 1080 video and outputing to component please include your pipeline for others to use as a reference. Refer to this Gstreamer article for more information on downloading and building TI Gstreamer elements. The project is hosted at http://gstreamer.. If you are interested in understanding the design details then watch video presentation http://software-dl./sdo/sdo_apps_public_sw/GStreamer_On_TI/FLV1/GStreamer_On_TI.htm TestingCurrently these pipelines have not undergone any extensive testing. If you find an error in a pipeline please correct it. Media filesYou should be able to use any audio and video media file that conforms to the appropriate standard. Creating an AVI fileThe following ffmpeg command takes a .mov file (say from the Apple movie trailers site) and make an AVI file. Run the command on your host computer. ffmpeg -i tropic_thunder-tlr1a_720p.mov -r 60 -b 6000000 -vcodec mpeg2video -ab 48000000 -acodec libmp3lame -s 1280x544 tropic.avi Supported PlatformsFollowing are a list of supported platforms, with links that jump directly to pipeline examples for each platform. DM355This section covers pipelines for common use cases for the DM355 processor. Environment RequirementsBefore executing the pipeline you need to set couple of environment variables, load kernel modules and activate video planes as follows:
The above command assumes that gstreamer is installed in /opt/gstreamer directory.
Loopback: Videov4l2src (Capture): gst-launch -v v4l2src always-copy=FALSE ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite contiguousInputFrame=TRUE sync=false videotestsrc (generated video test-bars): gst-launch -v videotestsrc ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite accelFrameCopy=FALSE sync=false Loopback: AudioNo pipelines here yet. Please feel free to add your own. Loopback: Audio + VideoNo pipelines here yet. Please feel free to add your own. Decode Video FilesNTSC: gst-launch -v filesrc location=sample.m4v ! TIViddec2 codecName=mpeg4dec engineName=codecServer ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite sync=false PAL: gst-launch -v filesrc location=sample.m4v ! TIViddec2 codecName=mpeg4dec engineName=codecServer ! TIDmaiVideoSink videoStd=D1_PAL videoOutput=composite sync=false Decode Audio FilesThis platform does not have an accelerated audio decoder element. You can use the ARM based audio decoders "mad", "ffdec_mp3" or "faad" MP3 pipelines: gst-launch filesrc location=sample.mp3 ! mad ! alsasink gst-launch filesrc location=sample.mp3 ! mp3parse ! ffdec_mp3 ! alsasink AAC pipeline: gst-launch filesrc location=sample.aac ! faad ! alsasink Decode .AVI FilesThe following pipeline assumes you have an AVI file with MPEG-4 Video and MP1L2 or MP3 Audio. Note that not all MPEG-4 video streams can be played using the DM355 MPEG-4 decoder -- make sure the MPEG-4 stream was encoded with the DM355 MPEG-4 encoder or another compatible encoder. gst-launch -v filesrc location=sample.avi ! avidemux name=demux demux.audio_00 ! queue max-size-buffers=8000 max-size-time=0 max-size-bytes=0 ! mad ! alsasink demux.video_00 ! queue ! TIViddec2 ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite Encode Video Filesvideotestsrc (generated video test-bars): gst-launch -v videotestsrc num-buffers=2000 ! TIVidenc1 codecName=mpeg4enc engineName=codecServer ! filesink location=output.m4v v4l2src (Capture): gst-launch -v v4l2src always-copy=FALSE num-buffers=2000 ! TIVidenc1 codecName=mpeg4enc engineName=codecServer contiguousInputFrame=TRUE ! filesink location=output.m4v Encode Audio FilesThis platform does not have an accelerated audio encoder element. You can use the ARM based audio encoders "lame" or "faac" No pipelines here yet. Please feel free to add your own. Image EncodeA simple pipeline that converts a UYVY image into JPEG format. gst-launch -v filesrc location=sample.yuv ! TIImgenc1 resolution=720x480 iColorSpace=UYVY oColorSpace=YUV420P qValue=75 ! filesink location=output.jpg Image DecodeA simple pipeline that converts a JPEG image into UYVY format. gst-launch -v filesrc location=sample.jpg ! TIImgdec1 resolution=720x480 ! filesink location=sample.yuv ResizeA simple pipeline capturing from v4l2src and resizing to CIF. gst-launch v4l2src always-copy=FALSE ! TIVidResize contiguousInputFrame=TRUE ! 'video/x-raw-yuv,width=352,height=288' ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite sync=false Network StreamingThis section gives example where EVM acts as streaming server, which captures, encodes and transmit via udp. Host PC can be used as client to decode. MPEG-4 Encode/Stream/Decode: gst-launch -v v4l2src always-copy=FALSE ! TIVidenc1 codecName=mpeg4enc engineName=encode contiguousInputFrame=TRUE ! rtpmp4vpay pt=96 ! udpsink host=<HOST IP ADDRESS> port=5000 When the pipeline starts to run, you'll see something that looks like this: /GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1, config=(string)000001010000012000845d4c28b421e0a21f, payload=(int)96, ssrc=(guint)3412089386, clock-base=(guint)945410414, seqnum-base=(guint)27711 Make a note of caps="application/x-rtp, media=(string)video ................" string and pass this string in client below A simple RTP client to decode MPEG-4 and display on HOST machine gst-launch -v udpsrc port=5000 caps="<PASS_CAPS_FROM_SERVER>" ! rtpmp4vdepay ! ffdec_mpeg4 ! xvimagesink For sending and receiving MPEG-4 with DM355 EVM you can use these 2 pipelines : RTP server side : gst-launch -v videotestsrc ! TIVidenc1 codecName=mpeg4enc engineName=encode ! rtpmp4vpay send-config=true ! udpsink host=<HOST IP ADDRESS> port=5000 Don't forget to set the "send-config" property to true
RTP client side : gst-launch -v udpsrc port=5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1, config=(string)000001010000012000845d4c285020f0a21f, payload=(int)96, ssrc=(guint)3319524202, clock-base=(guint)4012564513, seqnum-base=(guint)25833" ! rtpmp4vdepay ! TIViddec2 codecName=mpeg4dec engineName=decode ! TIDmaiVideoSink videoStd=D1_PAL videoOutput=composite sync=false Note that client should be started before server DM357This section covers pipelines for common use cases for the DM357 processor. Environment RequirementsBefore executing the pipeline you need to set couple of environment variables, load kernel modules and activate video planes as follows:
The above command assumes that gstreamer is installed in /opt/gstreamer directory.
nice -n 15 gst-launch .... (rest of gst-launch command) Loopback: Videov4l2src (Capture): gst-launch -v v4l2src always-copy=FALSE ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite contiguousInputFrame=TRUE sync=false videotestsrc (generated video test-bars): gst-launch -v videotestsrc ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite accelFrameCopy=FALSE sync=false Loopback: AudioNo pipelines here yet. Please feel free to add your own. Loopback: Audio + VideoNo pipelines here yet. Please feel free to add your own. Decode Video FilesH.264/NTSC: gst-launch -v filesrc location=sample.264 ! TIViddec codecName=h264dec engineName=hmjcp ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite sync=false MPEG-4/NTSC: gst-launch -v filesrc location=sample.m4v ! TIViddec codecName=mpeg4dec engineName=hmjcp ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite sync=false Decode Audio FilesThis platform does not have an accelerated audio decoder element. You can use the ARM based audio decoders "mad" or "faac" No pipelines here yet. Please feel free to add your own. Decode .MP4 FilesNo pipelines here yet. Please feel free to add your own. Decode .AVI FilesThe following pipeline assumes you have an AVI file with MPEG-2 or MPEG-4 Video and MP1L2 or MP3 Audio. gst-launch -v filesrc location=sample.avi ! avidemux name=demux demux.audio_00 ! queue max-size-buffers=8000 max-size-time=0 max-size-bytes=0 ! mad ! alsasink demux.video_00 ! queue ! TIViddec ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite Encode Video FilesH.264/v4l2src (Capture): gst-launch -v v4l2src always-copy=FALSE num-buffers=2000 ! TIVidenc codecName=h264enc engineName=hmjcp contiguousInputFrame=TRUE ! filesink location=sample.264 MPEG-4/v4l2src (Capture): gst-launch -v v4l2src always-copy=FALSE num-buffers=2000 ! TIVidenc codecName=mpeg4enc engineName=hmjcp contiguousInputFrame=TRUE ! filesink location=sample.m4v H.264/videotestsrc (generated video test-bars): gst-launch -v videotestsrc num-buffers=2000 ! TIVidenc codecName=h264enc engineName=hmjcp ! filesink location=sample.264 MPEG-4/videotestsrc (generated video test-bars): gst-launch -v videotestsrc num-buffers=2000 ! TIVidenc codecName=mpeg4enc engineName=hmjcp ! filesink location=sample.m4v Encode Video in ContainerEncode H.264 in quicktime container (Capture): gst-launch -v v4l2src always-copy=FALSE num-buffers=2000 ! TIVidenc codecName=h264enc engineName=hmjcp contiguousInputFrame=TRUE byteStream=FALSE ! qtmux ! filesink location=sample.mp4 gst-launch -v videotestsrc num-buffers=2000 ! TIVidenc codecName=h264enc engineName=hmjcp byteStream=FALSE ! qtmux ! filesink location=sample.mp4
Image EncodeA simple pipeline that converts a YUV422P image into JPEG format. gst-launch filesrc location=sample.yuv ! TIImgenc resolution=720x480 iColorSpace=UYVY oColorSpace=YUV422P qValue=75 ! filesink location=sample.jpg Image DecodeA simple pipeline that converts a JPEG image into UYVY format. gst-launch filesrc location=sample.jpg ! TIImgdec resolution=720x480 ! filesink location=sample.yuv ResizeA simple pipeline capturing from v4l2src and resizing to CIF. gst-launch v4l2src always-copy=FALSE ! TIVidResize contiguousInputFrame=TRUE ! 'video/x-raw-yuv,width=352,height=288' ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite accelFrameCopy=FALSE sync=false Network StreamingThis section gives example where EVM acts as streaming server, which captures, encodes and transmit via udp. Host PC can be used as client to decode. H.264 Encode/Stream/Decode: gst-launch -v v4l2src always-copy=FALSE ! TIVidenc codecName=h264enc engineName=hmjcp contiguousInputFrame=TRUE ! rtph264pay pt=96 ! udpsink host=<HOST_PC_IP> port=5000 When the pipeline starts to run, you'll see something that looks like this: /GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0.GstPad:src: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, profile-level-id=(string)42801e, sprop-parameter-sets=(string)\"Z0KAHtoC0PRA\\,aM48gA\\=\\=\", payload=(int)96, ssrc=(guint)895989858, clock-base=(guint)3971488929, seqnum-base=(guint)34821 Make a note of caps="application/x-rtp, media=(string)video ................" string and pass this string in client below A simple RTP client to be run on Host PC (Linux). gst-launch -v udpsrc port=5000 caps="<CAPS_FROM_SERVER>" ! rtph264depay ! ffdec_h264 ! xvimagesink DM644xThis section covers pipelines for common use cases for the DM644x processor. Environment RequirementsBefore executing the pipeline you need to set couple of environment variables, load kernel modules and activate video planes as follows:
The above command assumes that gstreamer is installed in /opt/gstreamer directory.
Loopback: Videov4l2src (Capture): gst-launch -v v4l2src always-copy=FALSE ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite contiguousInputFrame=TRUE sync=false videotestsrc (generated video test-bars): gst-launch -v videotestsrc ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite accelFrameCopy=FALSE sync=false Loopback: AudioNo pipelines here yet. Please feel free to add your own. Loopback: Audio + VideoNo pipelines here yet. Please feel free to add your own. Decode Video FilesH.264/NTSC: gst-launch -v filesrc location=sample.264 ! TIViddec2 codecName=h264dec engineName=decode ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite sync=false MPEG-2/NTSC: gst-launch -v filesrc location=sample.m2v ! TIViddec2 codecName=mpeg2dec engineName=decode ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite sync=false MPEG-4/NTSC: gst-launch -v filesrc location=sample.m4v ! TIViddec2 codecName=mpeg4dec engineName=decode ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite sync=false Decode Audio FilesAAC: gst-launch -v filesrc location=sample.aac ! TIAuddec1 codecName=aachedec engineName=decode ! alsasink sync=false Decode .MP4 FilesThe following pipeline assumes you have an .MP4 file with H.264 Video and AAC Audio. gst-launch -v filesrc location=sample.mp4 ! qtdemux name=demux demux.audio_00 ! queue max-size-buffers=8000 max-size-time=0 max-size-bytes=0 ! TIAuddec1 ! alsasink demux.video_00 ! queue ! TIViddec2 ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite Decode .AVI FilesThe following pipeline assumes you have an .AVI file with MPEG-2 or MPEG-4 Video and MP1L2 or MP3 Audio. gst-launch -v filesrc location=sample.avi ! avidemux name=demux demux.audio_00 ! queue max-size-buffers=1200 max-size-time=0 max-size-bytes=0 ! mad ! alsasink demux.video_00 ! queue ! TIViddec2 ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite Decode .TS FilesThe following pipeline assumes you have an transport stream file with H.264 Video and MP1L2 or MP3 Audio. gst-launch filesrc location=sample.ts ! typefind ! mpegtsdemux name=demux demux. ! queue max-size-buffers=1200 max-size-time=0 max-size-bytes=0 ! typefind ! mad ! alsasink demux. ! typefind ! TIViddec2 ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=COMPOSITE Encode Video FilesH.264/v4l2src (Capture): gst-launch -v v4l2src always-copy=FALSE num-buffers=2000 ! TIVidenc1 codecName=h264enc engineName=encode contiguousInputFrame=TRUE ! filesink location=sample.264 MPEG-4/v4l2src (Capture): gst-launch -v v4l2src always-copy=FALSE num-buffers=2000 ! TIVidenc1 codecName=mpeg4enc engineName=encode contiguousInputFrame=TRUE ! filesink location=sample.m4v H.264/videotestsrc (generated video test-bars): gst-launch -v videotestsrc num-buffers=2000 ! TIVidenc1 codecName=h264enc engineName=encode ! filesink location=sample.264 MPEG-4/videotestsrc (generated video test-bars): gst-launch -v videotestsrc num-buffers=2000 ! TIVidenc1 codecName=mpeg4enc engineName=encode ! filesink location=sample.m4v Encode Video in ContainerEncode H.264 in quicktime container (Capture): gst-launch -v v4l2src always-copy=FALSE num-buffers=2000 ! TIVidenc1 codecName=h264enc engineName=encode contiguousInputFrame=TRUE byteStream=FALSE ! qtmux ! filesink location=sample.mp4 gst-launch -v videotestsrc num-buffers=2000 ! TIVidenc1 codecName=h264enc engineName=encode byteStream=FALSE ! qtmux ! filesink location=sample.mp4
ResizeA simple pipeline capturing from v4l2src and resizing to CIF. gst-launch v4l2src always-copy=FALSE ! TIVidResize contiguousInputFrame=TRUE ! 'video/x-raw-yuv,width=352,height=288' ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite sync=false accelFrameCopy=FALSE Network StreamingThis section gives example where EVM acts as streaming server, which captures, encodes and transmit via udp. Host PC can be used as client to decode. H.264 Encode/Stream/Decode: gst-launch -v v4l2src always-copy=FALSE ! TIVidenc1 codecName=h264enc engineName=encode contiguousInputFrame=TRUE ! rtph264pay pt=96 ! udpsink host=<HOST_PC_IP> port=5000 When the pipeline starts to run, you'll see something that looks like this: /GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0.GstPad:src: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, profile-level-id=(string)42801e, sprop-parameter-sets=(string)\"Z0KAHtoC0PRA\\,aM48gA\\=\\=\", payload=(int)96, ssrc=(guint)895989858, clock-base=(guint)3971488929, seqnum-base=(guint)34821 Make a note of caps="application/x-rtp, media=(string)video ................" string and pass this string in client below A simple RTP client to be run on Host PC (Linux). gst-launch -v udpsrc port=5000 caps="<PASS_CAPS_FROM_SERVER>" ! rtph264depay ! ffdec_h264 ! xvimagesink MPEG-4 Encode/Stream/Decode: gst-launch -v v4l2src always-copy=FALSE ! TIVidenc1 codecName=mpeg4enc engineName=encode contiguousInputFrame=TRUE ! rtpmp4vpay pt=96 ! udpsink host=128.247.105.80 port=5000 When the pipeline starts to run, you'll see something that looks like this: /GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)5, config=(string)000001b005000001b509000001000000012000847a9828b421e0a31f, payload=(int)96, ssrc=(guint)302303174, clock-base=(guint)347576712, seqnum-base=(guint)48616 Make a note of caps="application/x-rtp, media=(string)video ................" string and pass this string in client below A simple RTP client to decodes MPEG-4 and display on HOST machine gst-launch -v udpsrc port=5000 caps="<PASS_CAPS_FROM_SERVER>" ! rtpmp4vdepay ! ffdec_mpeg4 ! xvimagesink MPEG-4 Receive/Decode/Display: This section gives example where EVM acts as RTP client, which receives encoded stream via udp then decodes and display output. Host PC can be used as server to transmit encoded stream. A simple RTP server which encodes and transmits MPEG-4 on DM6446 EVM. gst-launch-0.10 videotestsrc ! 'video/x-raw-yuv,width=720,height=480' ! ffenc_mpeg4 ! rtpmp4vpay ! udpsink host=<EVM_IP_ADDR> port=5000 -v Make a note of caps="application/x-rtp, media=(string)video ................" string and pass this string in client below A simple RTP client to receive and decode the MPEG-4 encoded stream. gst-launch -v udpsrc port=5000 caps="<CAPS_FROM_SERVER>" ! rtpmp4vdepay ! TIViddec2 ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite sync=false DM365This section covers pipelines for common use cases for the DM365 processor. Environment RequirementsBefore executing the pipeline you need to set couple of environment variables, load kernel modules and activate video planes as follows:
The above command assumes that gstreamer is installed in /opt/gstreamer directory.
Loopback: VideoGenerated_D1, composte out (videotestsrc): gst-launch -v videotestsrc ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite accelFrameCopy=FALSE sync=false Generated_720p60, component out (videotestsrc): gst-launch -v videotestsrc !video/x-raw-yuv,width=1280,height=720 ! TIDmaiVideoSink videoStd=720P_60 videoOutput=component accelFrameCopy=FALSE sync=false Capture_D1 (v4l2src): gst-launch -v v4l2src always-copy=FALSE input-src=composite ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite contiguousInputFrame=TRUE sync=false Capture_720P (v4l2src): gst-launch -v v4l2src always-copy=FALSE ! TIDmaiVideoSink videoStd=720P_60 videoOutput=component contiguousInputFrame=TRUE sync=false Loopback: AudioGenerated audio tone (audiotestsrc): gst-launch audiotestsrc num-buffers=1000 ! alsasink Captured audio (alsasrc): gst-launch -v alsasrc ! alsasink sync=false Loopback: Audio + VideoNo pipelines here yet. Please feel free to add your own. Decode Video FilesMPEG-4 -> NTSC_D1: gst-launch -v filesrc location=sample_ntsc_D1.mpeg4 ! TIViddec2 engineName=codecServer codecName=mpeg4dec ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=COMPOSITE sync=FALSE MPEG-4 -> PAL_D1: gst-launch -v filesrc location=sample_pal_D1.mpeg4 ! TIViddec2 engineName=codecServer codecName=mpeg4dec ! TIDmaiVideoSink videoStd=D1_PAL videoOutput=COMPOSITE sync=FALSE MPEG-4 -> NTSC_720P: gst-launch -v filesrc location=sample_720p.mpeg4 ! TIViddec2 codecName=mpeg4dec engineName=codecServer ! queue max-size-buffers=2 max-size-time=0 max-size-bytes=0 !TIDmaiVideoSink videoStd=720P_60 videoOutput=COMPONENT sync=FALSE hideOSD=TRUE
gst-launch -v filesrc location=sample_D1.264 ! TIViddec2 engineName=codecServer codecName=h264dec ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=COMPOSITE sync=FALSE H.264 -> NTSC_720P: gst-launch -v filesrc location=sample_720P.264 ! TIViddec2 codecName=h264dec engineName=codecServer ! queue max-size-buffers=2 max-size-time=0 max-size-bytes=0 ! TIDmaiVideoSink videoStd=720P_60 videoOutput=component sync=false hideOSD=TRUE
gst-launch filesrc location=sample_D1.m2v ! TIViddec2 engineName=codecServer codecName=mpeg2dec ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=COMPOSITE sync=FALSE MPEG-2 -> NTSC_720P: gst-launch filesrc location=sample_720p.m2v ! TIViddec2 engineName=codecServer codecName=mpeg2dec ! queue max-size-buffers=2 max-size-time=0 max-size-bytes=0 ! TIDmaiVideoSink videoStd=720P_60 videoOutput=component sync=false hideOSD=TRUE Decode Audio FilesAAC: gst-launch -v filesrc location=sample.aac ! TIAuddec1 codecName=aacdec engineName=codecServer ! alsasink sync=false Decode Container FilesAVI (MPEG-4 / MP3): gst-launch filesrc location=sample.avi ! avidemux name=demux demux.audio_00 ! queue max-size-buffers=1200 max-size-time=0 max-size-bytes=0 ! mad ! alsasink demux.video_00 ! TIViddec2 engineName=codecServer codecName=mpeg4dec ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=COMPOSITE sync=FALSE Encode Video FilesGenerated_D1 (videotestsrc) -> MPEG-4: gst-launch videotestsrc num-buffers=1000 ! video/x-raw-yuv, format=(fourcc)NV12 ! TIVidenc1 codecName=mpeg4enc engineName=codecServer ! filesink location=output_gen_D1.m4v YUV_D1 -> MPEG-4: gst-launch filesrc location=sample_nv12.yuv ! video/x-raw-yuv, format=(fourcc)NV12, width=320, height=240, framerate=(fraction)30/1 ! TIVidenc1 codecName=mpeg4enc engineName=codecServer ! filesink location=output_yuv_D1.m4v Captured_D1 (v4l2src) -> MPEG-4: gst-launch -v v4l2src always-copy=FALSE num-buffers=800 input-src=composite ! video/x-raw-yuv,format=(fourcc)NV12,width=720,height=480 ! TIVidenc1 codecName=mpeg4enc engineName=codecServer ! filesink location=output_cap_D1.m4v Captured_720P (v4l2src) -> MPEG-4: gst-launch -v v4l2src always-copy=FALSE num-buffers=800 input-src=COMPONENT ! video/x-raw-yuv,format=(fourcc)NV12,width=1280,height=720 ! TIVidenc1 codecName=mpeg4enc engineName=codecServer contiguousInputFrame=TRUE ! filesink location=output_cap_720P.m4v
gst-launch videotestsrc num-buffers=1000 ! video/x-raw-yuv, format=(fourcc)NV12 ! TIVidenc1 codecName=h264enc engineName=codecServer ! filesink location=output_gen_D1.264 YUV_D1 -> H.264: gst-launch filesrc location=sample_nv12.yuv ! video/x-raw-yuv, format=(fourcc)NV12, width=320, height=240, framerate=(fraction)30/1 ! TIVidenc1 codecName=h264enc engineName=codecServer ! filesink location=output_yuv_D1.264 Captured_D1 (v4l2src) -> H.264: gst-launch -v v4l2src always-copy=FALSE num-buffers=800 input-src=composite ! video/x-raw-yuv,format=(fourcc)NV12,width=720,height=480 ! TIVidenc1 codecName=h264enc engineName=codecServer ! filesink location=output_cap_D1.264 Captured_720P (v4l2src) -> H.264: gst-launch -v v4l2src always-copy=FALSE num-buffers=800 input-src=COMPONENT ! video/x-raw-yuv,format=(fourcc)NV12,width=1280,height=720 ! TIVidenc1 codecName=h264enc engineName=codecServer contiguousInputFrame=TRUE ! filesink location=output_cap_720P.264
gst-launch videotestsrc num-buffers=1000 ! video/x-raw-yuv, format=(fourcc)NV12 ! TIVidenc1 codecName=mpeg2enc engineName=codecServer ! filesink location=output_gen_D1.m2v YUV_D1 -> MPEG-2: gst-launch filesrc location=sample_nv12.yuv ! video/x-raw-yuv, format=(fourcc)NV12, width=320, height=240, framerate=(fraction)30/1 ! TIVidenc1 codecName=mpeg2enc engineName=codecServer ! filesink location=output_yuv_D1.m2v Captured_D1 (v4l2src) -> MPEG-2: gst-launch -v v4l2src always-copy=FALSE num-buffers=800 input-src=composite ! video/x-raw-yuv,format=(fourcc)NV12,width=720,height=480 ! TIVidenc1 codecName=mpeg2enc engineName=codecServer ! filesink location=output_cap_D1.m2v Captured_720P (v4l2src) -> MPEG-2: gst-launch -v v4l2src always-copy=FALSE num-buffers=800 input-src=COMPONENT ! video/x-raw-yuv,format=(fourcc)NV12,width=1280,height=720 ! TIVidenc1 codecName=mpeg2enc engineName=codecServer contiguousInputFrame=TRUE ! filesink location=output_cap_720P.m2v Encode Audio FilesCaptured (alsasrc) -> AAC: gst-launch -v alsasrc num-buffers=1000 ! TIAudenc1 codecName=aaclcenc engineName=codecServer ! filesink location=output.aac Captured (alsasrc) -> AAC + PlayBack: gst-launch -v alsasrc num-buffers=1000 ! audio/x-raw-int, endianness=1234, signed=true, width=16, depth=16, rate=44100, channels=2 ! tee name=t ! queue ! TIAudenc1 bitrate=64000 engineName=codecServer codecName=aaclcenc ! filesink location=output.aac t. ! queue ! alsasink sync=false PCM File -> AAC + PlayBack: gst-launch filesrc location=sample.pcm ! audio/x-raw-int, endianness=1234, signed=true, width=16, depth=16, rate=44100, channels=2 ! tee name=t ! queue ! TIAudenc1 bitrate=64000 engineName=codecServer codecName=aaclcenc ! filesink location=output.aac t. ! queue ! alsasink sync=false Encode Video in ContainerGenerated_D1 (videotestsrc) -> H.264 -> Quicktime container: gst-launch -v videotestsrc num-buffers=2000 ! 'video/x-raw-yuv,format=(fourcc)NV12' ! TIVidenc1 codecName=h264enc engineName=codecServer byteStream=FALSE ! qtmux ! filesink location=output_gen_.mp4 Captured_D1 (v4l2src) -> H.264 -> Quicktime container: gst-launch -v v4l2src always-copy=FALSE num-buffers=2000 input-src=composite ! video/x-raw-yuv,format=(fourcc)NV12,width=720,height=480 ! TIVidenc1 codecName=h264enc engineName=codecServer byteStream=FALSE ! qtmux ! filesink location=output_cap_.mp4 Image EncodeUYVY -> JPEG: gst-launch filesrc location=sample_720x480.yuv ! TIImgenc1 resolution=720x480 iColorSpace=UYVY oColorSpace=YUV420P qValue=75 engineName=codecServer ! filesink location=output.jpg Image DecodeJPEG -> UYVY: gst-launch filesrc location=sample_720x480.jpg ! TIImgdec1 resolution=720x480 engineName=codecServer ! filesink location=output.yuv ResizeGenerated_CIF (videotestsrc) -> D1: gst-launch videotestsrc ! video/x-raw-yuv, width=352, height=288, framerate=(fraction)30/1 ! TIVidResize ! video/x-raw-yuv,width=640,height=480, framerate=(fraction)30/1 ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=COMPOSITE sync=false Captured_D1 (v4l2src) -> CIF: gst-launch v4l2src always-copy=FALSE input-src=composite ! TIVidResize contiguousInputFrame=TRUE ! 'video/x-raw-yuv,width=352,height=288' ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite sync=false Note: To use the resize element as shown above, the IPIPE module must be configured in single-shot modeby setting "dm365_imp.oper_mode=1" in the kernel bootargs. Network StreamingThis section gives example where EVM acts as streaming server, which captures, encodes and transmit via udp. Host PC can be used as client to decode. MPEG-4 Encode/Stream/Decode: gst-launch -v v4l2src always-copy=FALSE ! TIVidenc1 codecName=mpeg4enc engineName=encode contiguousInputFrame=TRUE ! rtpmp4vpay pt=96 ! udpsink host=<HOST_PC_IP> port=5000 When the pipeline starts to run, you'll see something that looks like this: /GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1, config=(string)000001010000012000845d4c28b42240a21f, payload=(int)96, ssrc=(guint)543171998, clock-base=(guint)1153531416, seqnum-base=(guint)45441 Make a note of caps="application/x-rtp, media=(string)video ................" string and pass this string in client below A simple RTP client to decodes MPEG-4 and display on HOST machine gst-launch-0.10 -v udpsrc port=5000 caps="<CAP_FROM_SERVER>" ! rtpmp4vdepay ! ffdec_mpeg4 ! xvimagesink
This section gives example where EVM acts as RTP client, which receives encoded stream via udp then decodes and display output. Host PC can be used as server to transmit encoded stream. A simple RTP client to recieve and decode the H.264 encoded stream. gst-launch -v udpsrc port=5000 ! 'application/x-rtp, media=video, payload=96, clock-rate=90000, encoding-name=H264' ! rtph264depay ! TIViddec2 ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite sync=false A simple RTP server which encodes and transmits H.264 to the DM365 EVM (Note: this is a command for a host Linux PC). gst-launch-0.10 -vvv videotestsrc ! x264enc byte-stream=true bitrate=300 ! rtph264pay ! udpsink port=5000 host=<EVM_IP_ADDR> sync=false Note: first run the client then server DM6467This section covers pipelines for common use cases for the DM6467 processor. Environment RequirementsBefore executing the pipeline you need to set couple of environment variables, load kernel modules and activate video planes as follows:
The above command assumes that gstreamer is installed in /opt/gstreamer directory.
Loopback: Videov4l2src (Capture): gst-launch -v v4l2src always-copy=FALSE ! TIDmaiVideoSink videoStd=720P_60 videoOutput=component contiguousInputFrame=TRUE sync=false videotestsrc (generated video test-bars): Loopback: Audioalsasrc (Capture): gst-launch alsasrc ! alsasink audiotestsrc (generated audio tone): gst-launch audiotestsrc num-buffers=1000 ! alsasink Loopback: Audio + VideoNo pipelines here yet. Please feel free to add your own. Decode Video FilesH.264/1080i30: gst-launch filesrc use-mmap=true blocksize=40960 location=sample.264 ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=2097152 ! TIViddec2 genTimeStamps=FALSE engineName=decode codecName=h264dec ! queue max-size-buffers=2 max-size-time=0 max-size-bytes=0 ! TIDmaiVideoSink videoStd=1080I_30 MPEG-2/1080i30: gst-launch filesrc use-mmap=true blocksize=40960 location=sample.m2v ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=2097152 ! TIViddec2 genTimeStamps=FALSE engineName=decode codecName=mpeg2dec ! queue max-size-buffers=2 max-size-time=0 max-size-bytes=0 ! TIDmaiVideoSink videoStd=1080I_30 Decode Audio FilesAAC: gst-launch -v filesrc location=sample.aac ! TIAuddec1 codecName=aachedec engineName=decode ! alsasink sync=false Decode .MP4 FilesThe following pipeline assumes you have an .MP4 file with H.264 Video and AAC Audio. gst-launch -v filesrc location=sample.mp4 ! qtdemux name=demux demux.audio_00 ! queue max-size-buffers=8000 max-size-time=0 max-size-bytes=0 ! TIAuddec1 ! alsasink demux.video_00 ! queue ! TIViddec2 ! TIDmaiVideoSink videoStd=1080P_30 Decode .AVI FilesThe following pipeline assumes you have an .AVI file with MPEG-2 Video and MP1L2 or MP3 Audio. gst-launch -v filesrc location=sample.avi ! avidemux name=demux demux.audio_00 ! queue max-size-buffers=8000 max-size-time=0 max-size-bytes=0 ! mad ! alsasink demux.video_00 ! queue ! TIViddec2 ! TIDmaiVideoSink videoStd=1080P_30 Decode .TS FilesThe following pipeline assumes you have an transport stream file with H.264 Video and MP1L2 or MP3 Audio. gst-launch -v filesrc location=sample.ts ! typefind ! mpegtsdemux name=demux demux. ! audio/mpeg ! queue max-size-buffers=1200 max-size-time=0 max-size-bytes=0 ! typefind ! mad ! alsasink demux. ! video/x-h264 ! typefind ! TIViddec2 ! TIDmaiVideoSink videoStd=1080P_30 Encode Video FilesH.264/v4l2src (Capture): gst-launch -v v4l2src always-copy=FALSE num-buffers=2000 ! TIVidenc1 codecName=h264enc engineName=encode contiguousInputFrame=TRUE ! filesink location=sample.264 H.264/videotestsrc (generated video test-bars): gst-launch -v videotestsrc num-buffers=2000 ! 'video/x-raw-yuv,format=(fourcc)NV12' ! TIVidenc1 codecName=h264enc engineName=encode ! filesink location=sample.264 Encode Video in ContainerEncode H.264 in quicktime container (Capture): gst-launch -v v4l2src always-copy=FALSE num-buffers=2000 ! TIVidenc1 codecName=h264enc engineName=encode contiguousInputFrame=TRUE byteStream=FALSE ! qtmux ! filesink location=sample.mp4 gst-launch -v videotestsrc num-buffers=2000 ! 'video/x-raw-yuv,format=(fourcc)NV12' ! TIVidenc1 codecName=h264enc engineName=encode byteStream=FALSE ! qtmux ! filesink location=sample.mp4 Encode Audio FilesAAC/alsasrc (Capture): gst-launch -v alsasrc ! TIAudenc1 codecName=aacheenc engineName=encode ! filesink location=sample.aac AAC/alsasrc (Capture+Playback): This pipeline encodes 2000 buffers of audio data before exiting. gst-launch -v alsasrc num-buffers=2000 ! audio/x-raw-int, endianness=1234, signed=true, width=16, depth=16, rate=44100, channels=2 ! tee name=t ! queue ! TIAudenc1 bitrate=64000 engineName=encode codecName=aacheenc ! filesink location=sample.aac t. ! queue ! alsasink sync=false AAC/filesrc (PCM input file): This pipeline encodes 2000 buffers of audio data before exiting. You will need to create a PCM file. You can do so by decoding an audio file and sending the output to the filesink. gst-launch filesrc location=sample.pcm ! audio/x-raw-int, endianness=1234, signed=true, width=16, depth=16, rate=44100, channels=2 ! tee name=t ! queue ! TIAudenc1 bitrate=64000 engineName=encode codecName=aacheenc ! filesink location=sample.aac t. ! queue ! alsasink sync=false ResizeA simple pipeline capturing from v4l2src and resizing to CIF. gst-launch v4l2src always-copy=FALSE ! TIVidResize contiguousInputFrame=TRUE ! 'video/x-raw-yuv,width=352,height=288,format=(fourcc)Y8C8' ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=composite sync=false Network StreamingThis section gives example where EVM acts as streaming server, which captures, encodes and transmit via udp. Host PC can be used as client to decode. H.264 Encode/Stream/Decode: gst-launch -v v4l2src always-copy=FALSE ! TIVidenc1 codecName=h264enc engineName=encode contiguousInputFrame=TRUE ! rtph264pay pt=96 ! udpsink host=<HOST_PC_IP> port=5000 When the pipeline starts to run, you'll see something that looks like this: /GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, profile-level-id=(string)42801f, sprop-parameter-sets=(string)\"Z0KAH/QFoeiA\\,aN48gA\\=\\=\", payload=(int)96, ssrc=(guint)521259813, clock-base=(guint)1231006457, seqnum-base=(guint)2761 Make a note of caps="application/x-rtp, media=(string)video ................" string and pass this string in client below A simple RTP client to be run on Host PC (Linux). gst-launch-0.10 -v udpsrc port=5000 caps="<CAP_FROM_SERVER>" ! rtph264depay ! ffdec_h264 ! xvimagesink DM6467TThis section covers pipelines for common use cases for the DM6467T processor. Environment RequirementsBefore executing the pipeline you need to set couple of environment variables, load kernel modules and activate video planes as follows:
The above command assumes that gstreamer is installed in /opt/gstreamer directory.
Loopback: VideoGenerated (videotestsrc): Capture_720P (v4l2src): gst-launch -v v4l2src always-copy=FALSE ! TIDmaiVideoSink videoStd=720P_60 videoOutput=component contiguousInputFrame=TRUE sync=false Loopback: AudioGenerated audio tone (audiotestsrc): gst-launch audiotestsrc num-buffers=1000 ! alsasink Captured audio (alsasrc): gst-launch -v alsasrc ! alsasink sync=FALSE Loopback: Audio + VideoNo pipelines here yet. Please feel free to add your own. Decode Video FilesH.264 -> NTSC_D1: gst-launch -v filesrc location=sample_D1.264 ! TIViddec2 engineName=codecServer codecName=h264dec ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=COMPONENT sync=FALSE H.264 -> NTSC_720P: gst-launch -v filesrc location=sample_720P.264 ! TIViddec2 codecName=h264dec engineName=codecServer ! queue max-size-buffers=2 max-size-time=0 max-size-bytes=0 ! TIDmaiVideoSink videoStd=720P_60 videoOutput=component sync=false hideOSD=TRUE H.264 -> NTSC_1080I30: gst-launch -v filesrc use-mmap=true blocksize=40960 location=sample_1080i_30.264 ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=2097152 ! TIViddec2 genTimeStamps=FALSE engineName=codecServer codecName=h264dec ! queue max-size-buffers=2 max-size-time=0 max-size-bytes=0 ! TIDmaiVideoSink videoStd=1080I_30 H.264 -> NTSC_1080P60: gst-launch -v filesrc use-mmap=true blocksize=40960 location=sample_1080p_60.264 ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=2097152 ! video/x-h264, framerate=60/1, width=1920, height=1080 ! TIViddec2 genTimeStamps=FALSE codecName=h2641080p60vdec ! queue max-size-buffers=2 max-size-time=0 max-size-bytes=0 ! TIDmaiVideoSink videoStd=1080P_60 sync=false
gst-launch filesrc location=sample_D1.m2v ! TIViddec2 engineName=codecServer codecName=mpeg2dec ! TIDmaiVideoSink videoStd=D1_NTSC videoOutput=COMPONENT sync=FALSE MPEG-2 -> NTSC_720P: gst-launch filesrc location=sample_720p.m2v ! TIViddec2 engineName=codecServer codecName=mpeg2dec ! queue max-size-buffers=2 max-size-time=0 max-size-bytes=0 ! TIDmaiVideoSink videoStd=720P_60 videoOutput=component sync=false hideOSD=TRUE MPEG-2 -> NTSC_1080I30: gst-launch filesrc use-mmap=true blocksize=40960 location=sample_1080i_30.m2v ! queue max-size-buffers=0 max-size-time=0 max-size-bytes=2097152 ! TIViddec2 genTimeStamps=FALSE engineName=codecServer codecName=mpeg2dec ! queue max-size-buffers=2 max-size-time=0 max-size-bytes=0 ! TIDmaiVideoSink videoStd=1080I_30 Decode Audio FilesAAC: gst-launch -v filesrc location=sample.aac ! TIAuddec1 codecName=aachedec engineName=codecServer ! alsasink sync=false Decode Container FilesAVI (MPEG-2 / MP3) -> NTSC_1080I30: gst-launch -v filesrc location=sample_1080i.avi ! avidemux name=demux demux.audio_00 ! queue max-size-buffers=8000 max-size-time=0 max-size-bytes=0 ! mad ! alsasink demux.video_00 ! queue ! TIViddec2 ! TIDmaiVideoSink videoStd=1080I_30 MP4 (H.264 / AAC) -> NTSC_1080I30: gst-launch -v filesrc location=sample_1080i.mp4 ! qtdemux name=demux demux.audio_00 ! queue max-size-buffers=8000 max-size-time=0 max-size-bytes=0 ! TIAuddec1 ! alsasink demux.video_00 ! queue ! TIViddec2 ! TIDmaiVideoSink videoStd=1080I_30 TS (H.264 / MP3) -> NTSC_1080I30: gst-launch -v filesrc location=sample_1080i.ts ! typefind ! mpegtsdemux name=demux demux. ! audio/mpeg ! queue max-size-buffers=1200 max-size-time=0 max-size-bytes=0 ! typefind ! mad ! alsasink demux. ! video/x-h264 ! typefind ! TIViddec2 TIDmaiVideoSink videoStd=1080I_30 Encode Video FilesGenerated_D1 (videotestsrc) -> H.264: gst-launch -v videotestsrc num-buffers=1000 ! video/x-raw-yuv,format=(fourcc)NV12 ! TIVidenc1 codecName=h264enc engineName=codecServer ! filesink location=output_gen_D1.264 Captured_720P (v4l2src) -> H.264: gst-launch -v v4l2src always-copy=FALSE num-buffers=1000 ! TIVidenc1 codecName=h264enc engineName=codecServer contiguousInputFrame=TRUE ! filesink location=output_cap_720p.264 Encode Video in ContainerGenerated_D1 (videotestsrc) -> H.264 -> Quicktime container: gst-launch -v videotestsrc num-buffers=2000 ! 'video/x-raw-yuv,format=(fourcc)NV12' ! TIVidenc1 codecName=h264enc engineName=codecServer byteStream=FALSE ! qtmux ! filesink location=output_gen_.mp4 Captured_720P (v4l2src) -> H.264 -> Quicktime container: gst-launch -v v4l2src always-copy=FALSE num-buffers=2000 ! TIVidenc1 codecName=h264enc engineName=codecServer ! qtmux ! filesink location=output_cap_.mp4 Encode Audio FilesThere's no AAC encoder included in DVSDK 3.10 due to licensing restrictions. ResizeCaptured_D1 (v4l2src) -> CIF: gst-launch v4l2src always-copy=FALSE ! TIVidResize contiguousInputFrame=TRUE ! video/x-raw-yuv,width=352,height=288,format=(fourcc)Y8C8 ! TIDmaiVideoSink Network StreamingThis section gives example where EVM acts as streaming server, which captures, encodes and transmit via udp. Host PC can be used as client to decode. H.264 Encode/Stream/Decode: gst-launch -v v4l2src always-copy=FALSE ! TIVidenc1 codecName=h264enc engineName=encode contiguousInputFrame=TRUE ! rtph264pay pt=96 ! udpsink host=<HOST_PC_IP> port=5000 When the pipeline starts to run, you'll see something that looks like this: /GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, profile-level-id=(string)42801f, sprop-parameter-sets=(string)\"Z0KAH/QFoeiA\\,aN48gA\\=\\=\", payload=(int)96, ssrc=(guint)521259813, clock-base=(guint)1231006457, seqnum-base=(guint)2761 Make a note of caps="application/x-rtp, media=(string)video ................" string and pass this string in client below A simple RTP client to be run on Host PC (Linux). gst-launch-0.10 -v udpsrc port=5000 caps="<CAP_FROM_SERVER>" ! rtph264depay ! ffdec_h264 ! xvimagesink OMAP35xThis section covers pipelines for common use cases for the OMAP3530 processor. Environment RequirementsBefore executing the pipeline you need to set couple of environment variables, load kernel modules and activate video planes as follows:
The above command assumes that gstreamer is installed in /opt/gstreamer directory.
Loopback: Videogst-launch -v videotestsrc ! TIDmaiVideoSink videoStd=VGA videoOutput=LCD accelFrameCopy=FALSE sync=false Loopback: Audiogst-launch audiotestsrc freq=1000 num-buffers=100 ! alsasink If you want to route audio in to audio out (your very own P.A. system), try: gst-launch alsasrc num-buffers=1000 ! alsasink If you get a Could not open audio device for recording. error, likely your ALSA configuration is incorrect. I fixed it with mv /etc/asound.conf /etc/asound.conf.orig to move the ALSA configuration file out of the way. Loopback: Audio+VideoNo pipelines here yet. Please feel free to add your own. Decode Video filesH.264/VGA: gst-launch -v filesrc location=sample.264 ! TIViddec2 codecName=h264dec engineName=codecServer ! TIDmaiVideoSink videoStd=VGA videoOutput=LCD sync=false MPEG-4/VGA: gst-launch -v filesrc location=sample.m4v ! TIViddec2 codecName=mpeg4dec engineName=codecServer ! TIDmaiVideoSink videoStd=VGA videoOutput=LCD sync=false MPEG-2/VGA: gst-launch -v filesrc location=sample.m2v ! TIViddec2 codecName=mpeg2dec engineName=codecServer ! TIDmaiVideoSink videoStd=VGA videoOutput=LCD sync=false Decode Audio FilesAAC: gst-launch -v filesrc location=sample.aac ! TIAuddec1 codecName=aachedec engineName=codecServer ! alsasink sync=false Decode .MP4 FilesThe following pipeline assumes you have a VGA .MP4 file with H.264 Video and AAC Audio. gst-launch -v filesrc location=sample.mp4 ! qtdemux name=demux demux.audio_00 ! queue max-size-buffers=8000 max-size-time=0 max-size-bytes=0 ! TIAuddec1 ! alsasink demux.video_00 ! queue ! TIViddec2 ! TIDmaiVideoSink videoStd=VGA videoOutput=LCD Decode .AVI FilesThe following pipeline assumes you have VGA .AVI file with MPEG-2 or MPEG-4 Video and MP1L2 or MP3 Audio. gst-launch -v filesrc location=sample.avi ! avidemux name=demux demux.audio_00 ! queue max-size-buffers=1200 max-size-time=0 max-size-bytes=0 ! mad ! alsasink demux.video_00 ! queue ! TIViddec2 ! queue max-size-buffers=2 max-size-time=0 max-size-bytes=0 ! TIDmaiVideoSink videoStd=VGA videoOutput=LCD Decode .TS FilesThe following pipeline assumes you have VGA .TS file with H.264 Video and MP1L2 or MP3 Audio. gst-launch filesrc location=sample.ts ! typefind ! mpegtsdemux name=demux demux. ! queue max-size-buffers=1200 max-size-time=0 max-size-bytes=0 ! typefind ! mad ! alsasink demux. ! typefind ! TIViddec2 ! queue max-size-buffers=2 max-size-time=0 max-size-bytes=0 ! TIDmaiVideoSink videoStd=VGA videoOutput=LCD Encode Video FilesH.264/QVGA: gst-launch -v videotestsrc num-buffers=2000 ! TIVidenc1 codecName=h264enc engineName=codecServer ! filesink location=sample.264 MPEG-4/QVGA: gst-launch -v videotestsrc num-buffers=2000 ! TIVidenc1 codecName=mpeg4enc engineName=codecServer ! filesink location=sample.m4v Encode Video in ContainerEncode H.264 in quicktime container (Capture): gst-launch -v videotestsrc num-buffers=2000 ! TIVidenc1 codecName=h264enc engineName=codecServer byteStream=FALSE ! qtmux ! filesink location=sample.mp4
Image EncodeA simple pipeline to encode YUV420P image gst-launch filesrc location=sample.yuv ! TIImgenc1 resolution=720x480 iColorSpace=UYVY oColorSpace=YUV420P qValue=75 ! filesink location=sample.jpeg Image DecodeA simple pipeline that converts a JPEG image into UYVY format. gst-launch filesrc location=sample.jpeg ! TIImgdec1 codecName=jpegdec engineName=codecServer ! filesink location=sample.uyvy ResizeA simple pipeline receiving CIF from videotestsrc and resizing to VGA. gst-launch videotestsrc ! 'video/x-raw-yuv,width=352,height=288' ! TIVidResize ! 'video/x-raw-yuv,width=640,height=480' ! TIDmaiVideoSink videoStd=VGA videoOutput=LCD sync=false Network StreamingAudio RTP StreamingAlthough these examples are using a target device and a host PC, you could use two target devices as well. Case 1: sending audio from target (BeagleBoard in my case) to Ubuntu host: On target: gst-launch audiotestsrc freq=1000 ! mulawenc ! rtppcmupay ! udpsink host=<HOST_PC_IP> port=5555 On host: gst-launch udpsrc port=5555 caps="application/x-rtp" ! queue ! rtppcmudepay ! mulawdec ! audioconvert ! alsasink The above example experienced dropped audio, please update pipeline when you get it working properly.
On host: gst-launch audiotestsrc freq=1000 ! mulawenc ! rtppcmupay ! udpsink host=<TARGET_PC_IP> port=5555 On target gst-launch udpsrc port=5555 caps="application/x-rtp" ! queue ! rtppcmudepay ! mulawdec ! audioconvert ! alsasink
H.264 RTP StreamingThis section gives example where EVM acts as streaming server, which captures, encodes and transmit via udp. Host PC can be used as client to decode. H.264 Encode/Stream/Decode A simple RTP server to encode and transmit H.264. gst-launch -v videotestsrc ! TIVidenc1 codecName=h264enc engineName=codecServer ! rtph264pay pt=96 ! udpsink host=<HOST_PC_IP> port=5000 When the pipeline starts to run, you'll see something that looks like this: /GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, profile-level-id=(string)42801e, sprop-parameter-sets=(string)\"Z0KAHukCg+QgAAB9AAAdTACA\\,aM48gA\\=\\=\", payload=(int)96, ssrc=(guint)3417130276, clock-base=(guint)2297521617, seqnum-base=(guint)48503 Make a note of caps="application/x-rtp, media=(string)video ................" string and pass this string in client below A simple RTP client to decodes H.264 and display on HOST machine gst-launch -v udpsrc port=5000 caps="<CAPS_FROM_SERVER>" ! rtph264depay ! ffdec_h264 ! xvimagesink
This section gives example where EVM acts as RTP client, which receives encoded stream via udp then decodes and display output. Host PC can be used as server to transmit encoded stream. A simple RTP server which encodes and transmits MPEG-4 on OMAP3530 EVM. gst-launch-0.10 videotestsrc ! 'video/x-raw-yuv,width=640,height=480' ! ffenc_mpeg4 ! rtpmp4vpay ! udpsink host=<EVM_IP_ADDR> port=5000 -v Make a note of caps="application/x-rtp, media=(string)video ................" string and pass this string in client below A simple RTP client to receive and decode the MPEG-4 encoded stream. gst-launch -v udpsrc port=5000 caps="<CAPS_FROM_SERVER>" ! rtpmp4vdepay ! TIViddec2 ! TIDmaiVideoSink videoStd=VGA videoOutput=LCD sync=false AllThis section covers pipelines that should work for all processors. These pipelines should work on any other platform too (such as your desktop Linux machine). They are included because we have been asked for these examples previously. DebuggingVerbose outputIf you want to see what capabilities are being used or are expected, add -v. gst-launch -v alsasrc ! alsasink Element debug outputTo enable debug output for a specific element: gst-launch --gst-debug=audiotestsrc:4 audiotestsrc ! alsasink Adjust the element name and debug level until you get the data you are looking for. To enable debug output for a more than one element: gst-launch --gst-debug=audio*:3 audiotestsrc ! audioconvert ! alsasink or for all elements gst-launch --gst-debug=*:3 alsasrc ! alsasink You can see the list of element names that support debug output using gst-launch --gst-debug-help Audio pipelinesControlling the sample rate and bit depthFind the default audio capabilities: gst-launch -v alsasrc ! alsasink The output will be similar to caps = audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)32, depth=(int)32, rate=(int)44100, channels=(int)2 Using that pattern (minus the data type indication, which is not needed with gst-launch): gst-launch -v alsasrc ! audio/x-raw-int, endianness=1234, signed=true, width=32, depth=32, rate=44100, channels=2 ! alsasink Adjust the capabilities as needed. Generic network audio streaming exampleThese pipelines do not depend on the TI DMAI GSteamer plug-in. Sender (host): TARGET_IP=10.111.0.194 gst-launch audiotestsrc freq=1000 ! mulawenc ! rtppcmupay ! queue ! udpsink host=$TARGET_IP port=5555 Receiver (target): gst-launch udpsrc port=5555 caps="application/x-rtp" ! queue ! rtppcmudepay ! mulawdec ! alsasink |
|