5 | | Playback of combined video and audio is a bit more complicated as now you need to utilize parsers, named elements to split the audio and video paths, and queues to avoid single-threaded blocking. |
6 | | |
7 | | The following pipeline examples utilize plugins from the the Freescale gst-fsl-plugin package on GStreamer 0.10. |
8 | | |
9 | | gst-fsl-plugin elements used: |
10 | | * Parsers / Demuxers: |
11 | | * '''aiurdemux''' - parse and identify source stream formats |
12 | | |
13 | | Example using Big Buck Bunney H.264 (MOV H264 video, AAC suuround sound): |
14 | | {{{ |
15 | | gst-launch filesrc location=/media/sda1/big_buck_bunny_1080p_h264.mov typefind=true ! aiurdemux name=d ! \ |
16 | | queue2 ! beepdec ! alsasink d. ! \ |
17 | | queue2 ! vpudec ! mfw_v4lsink device=/dev/video16 |
18 | | }}} |
19 | | |
20 | | |
21 | | == GStreamer '''playbin2''' and '''decodebin2''' elements == |
22 | | GStreamer has some '''bin''' elements that try to 'autoplug' other elements together by inspecting the pipeline. |
23 | | |
24 | | The '''decodebin2''' element will try to figure out the proper decoder pipeline for the sink specified: |
25 | | {{{ |
26 | | gst-launch filesrc location=/media/sda1/big_buck_bunny_720p_surround.avi ! \ |
27 | | decodebin2 ! mfw_v4lsink device=/dev/video16 |
28 | | }}} |
29 | | |
30 | | There is also '''playbin2''' which just needs to be given a source and a sink |
31 | | {{{ |
32 | | gst-launch playbin2 uri=file:///home/root/hawaii.mp4 \ |
33 | | video-sink="mfw_v4lsink device=/dev/video16" |
34 | | }}} |
35 | | |
36 | | Note that these 'bin' elements may not always do what you want or expect (they may not use hardware decode for example). |
37 | | |
38 | | |
39 | | == Freescale gplay == |
40 | | Or if simplicity is required, the Freescale GStreamer based '''gplay''' app will try to determine the file type and play it back as best as it can. |
41 | | {{{ |
42 | | gplay /media/sda1/big_buck_bunny.mov |
43 | | }}} |
| 5 | Playback of a file that has both audio and video requires a slightly more complex pipeline than the standard [wiki:Yocto/gstreamer/audio audio] and [wiki:Yocto/gstreamer/video video] pipelines. |
| 6 | |
| 7 | Generally, a mixed media pipeline will consist of a demuxer (to split audio and video), individualized pipelines per video stream and audio stream, and {{{queue}}} elements to provide asynchronous playback of each stream type (which basically relates to using multiple threads of execution so that one element doesn't block the pipeline waiting for more data). |
| 8 | |
| 9 | The examples on this page will refer to GStreamer-1.0. To see GStreamer-0.10 (deprecated) examples, please see this [http://trac.gateworks.com/wiki/Yocto/gstreamer/multimedia?version=1 older revision page]. |
| 10 | |
| 11 | |
| 12 | [=#named-elements] |
| 13 | == Named Elements, queues, and Multiple pipelines with gst-launch == |
| 14 | When mixing audio and video elements with {{{gst-launch}}} one must make use of multiple pipelines using {{{named elements}}}. When developing GStreamer based applications you create 'Bin' elements that put multiple elements together in a bin. |
| 15 | |
| 16 | The {{{name}}} property can be specified on any element in a pipeline and by default if not specified it will be set to the previous name (if any). Multiple pipelines can be provided to {{{gst-launch}}} and connected together by their names by either sourcing a pipeline with a name followed by a '.' or sinking a pipeline to a name followed by a '.'. |
| 17 | |
| 18 | This is best explained with some examples: |
| 19 | * Encoding a stream with audio and video content into an AVI file: |
| 20 | {{{#!bash lineno=1 |
| 21 | gst-launch-1.0 \ |
| 22 | v4l2src \ |
| 23 | ! $VIDEO_CAPABILITIES \ |
| 24 | ! mux. \ |
| 25 | alsasrc \ |
| 26 | ! $AUDIO_CAPABILITIES \ |
| 27 | ! mux. \ |
| 28 | avimux name=mux \ |
| 29 | ! filesink location=test.avi |
| 30 | }}} |
| 31 | - The {{{v4l2src}}} pipeline ends with {{{mux.}}} which means its output is sent to the pipeline who's name is {{{mux}}} |
| 32 | - The {{{alsasrc}}} pipeline ends with {{{mux.}}} which means its output is sent to the pipeline who's name is {{{mux}}} |
| 33 | - The {{{avimux}}} pipeline specifies {{{name=mux}}} therefore it takes as a source all pipelines that ended with {{{mux.}}} |
| 34 | * Decoding a stream with audio and video content from an AVI file: |
| 35 | {{{#!bash lineno=1 |
| 36 | gst-launch-1.0 \ |
| 37 | filesource location=test.avi \ |
| 38 | ! avidemux name=demux \ |
| 39 | demux. ! queue ! ac3parse ! a52dec ! audioconvert ! alsasink \ |
| 40 | demux. ! queue ! mpeg4videoparse ! imxvpudec ! imxipuvideosink |
| 41 | }}} |
| 42 | - The {{{filesource}}} pipeline ends with {{{name=demux}}} which means the output of this pipeline will be sent to all pipelines with a {{{demux.}}} source (who's types have been successfully negotiated) |
| 43 | - The audio pipeline consisting of the ac3parse element will source buffers that are supported by its sink capabilities (ie audio/x-ac3, audio/x-eac3, audio/ac3) |
| 44 | - The video pipeline consisting of the mpeg4videoparse element will source buffers that are supported by its sink capabilities (ie video/mpeg, video-x-divx) |
| 45 | - Queue elements are used to keep one pipeline or element from blocking another. For example, if the mpeg4videoparse element needs more data from the avidemux element before it can decode a frame and send it down its pipeline it would normally stall the pipeline unless a queue element was in place to allow buffering |
| 46 | |
| 47 | |
| 48 | [=#mux] |
| 49 | == Muxing Mixed Content == |
| 50 | Often a multi-media stream will consist of mixed audio and video streams that are multiplexed (aka 'muxed') together into a single bitstream. The GStreamer elements that perform the combining or muxiplexing on the stream creation side are called 'Muxers'. |
| 51 | |
| 52 | You can use {{{gst-inspect}}} to see a list of most of these using grep: |
| 53 | {{{ |
| 54 | gst-inspect-1.0 | grep -i muxer | grep -vi de |
| 55 | }}} |
| 56 | |
| 57 | Some common examples: |
| 58 | - mpegtsmux: MPEG Transport Stream Muxer |
| 59 | - mpegpsmux: MPEG Program Stream Muxer |
| 60 | - matroskamux: Matroska muxer |
| 61 | - avimux: Avi muxer |
| 62 | - qtmux: !QuickTime Muxer |
| 63 | - oggmux: Ogg muxer |
| 64 | |
| 65 | To mux mixed content together include one of these elements following the audio and video pipelines. |
| 66 | |
| 67 | Examples: |
| 68 | * Encoding a stream with audio and video content into an AVI file: |
| 69 | {{{#!bash lineno=1 |
| 70 | gst-launch-1.0 \ |
| 71 | videotestsrc \ |
| 72 | ! $VIDEO_CAPABILITIES \ |
| 73 | ! mux. \ |
| 74 | audiotestsrc \ |
| 75 | ! $AUDIO_CAPABILITIES \ |
| 76 | ! mux. \ |
| 77 | avimux name=mux \ |
| 78 | ! filesink location=test.avi |
| 79 | }}} |
| 80 | - the {{{videotestsrc}}} pipeline ends with {{{mux.}}} which means its output is sent to the pipeline who's name is {{{mux}}} and who's format has been successfully negotiated. |
| 81 | - the {{{audiotestsrc}}} pipeline ends with {{{mux.}}} which means its output is sent to the pipeline who's name is {{{mux}}} and who's format has been successfully negotiated. |
| 82 | - the {{{avimux}}} pipeline specifies {{{name=mux}}} therefore it takes as a source all pipelines that ended with {{{mux.}}} and it understands how to multiplex the two types of data together into its output which is written to the file test.avi |
| 83 | |
| 84 | |
| 85 | === Example: Capture Video and Audio Through HDMI Port === |
| 86 | |
| 87 | * Note the -e switch is needed to properly terminate for playing back in a video player like VLC |
| 88 | {{{#!bash lineno=1 |
| 89 | gst-launch-1.0 -e imxv4l2videosrc device=/dev/video0 queue-size=6 do-timestamp=true \ |
| 90 | ! queue flush-on-eos=true silent=true leaky=0 max-size-buffers=0 max-size-time=0 max-size-bytes=0 \ |
| 91 | ! imxipuvideotransform \ |
| 92 | ! imxvpuenc_h264 bitrate=10000 \ |
| 93 | ! h264parse disable_passthrough=true \ |
| 94 | ! queue flush-on-eos=true silent=true leaky=0 max-size-buffers=0 max-size-time=0 max-size-bytes=0 \ |
| 95 | ! mux. alsasrc device="sysdefault:CARD=tda1997xaudio" \ |
| 96 | ! audioconvert \ |
| 97 | ! imxmp3audioenc bitrate=128 \ |
| 98 | ! mux. mp4mux name=mux \ |
| 99 | ! filesink location=audiovideo.mp4 sync=true |
| 100 | }}} |
| 101 | |
| 102 | === Example: Capture MPEG4 video, MP3 Audio muxed together in a AVI File === |
| 103 | To capture, encode, and output audio and video using MPEG4 video compression, MP3 audio compression, and an AVI file format you could use: |
| 104 | {{{#!bash lineno=1 |
| 105 | gst-launch-1.0 \ |
| 106 | imxv4l2videosrc device=/dev/video0 \ |
| 107 | ! imxvpuenc_mpeg4 bitrate=10000 \ |
| 108 | ! mux. \ |
| 109 | alsasrc device="sysdefault:CARD=sgtl5000audio" \ |
| 110 | ! audioconvert ! imxmp3audioenc bitrate=128 \ |
| 111 | ! mux. \ |
| 112 | avimux name=mux \ |
| 113 | ! filesink location=test.avi |
| 114 | }}} |
| 115 | - The {{{imxv4l2videosrc}}} pipeline ends with {{{mux.}}} which means its output (video/mpeg) is sent to the pipeline who's name is {{{mux}}} |
| 116 | - The {{{alsasrc}}} pipeline ends with {{{mux.}}} which means its output (audio/mpeg) is sent to the pipeline who's name is {{{mux}}} |
| 117 | - The {{{avimux}}} pipeline specifies {{{name=mux}}} therefore it takes as a source all pipelines that ended with {{{mux.}}} and it understands how to multiplex the two types of data together into its output which is written to the file test.avi. |
| 118 | |
| 119 | |
| 120 | |
| 121 | [=#demux] |
| 122 | == De-muxing mixed content == |
| 123 | Often a multi-media stream will consist of mixed audio and video streams that are multiplexed (aka 'muxed') together into a single bitstream. The GStreamer elements that perform the de-multiplexing on the stream consumption side are called 'De-Muxers'. |
| 124 | |
| 125 | You can use {{{gst-inspect}}} to see a list of most of these using grep: |
| 126 | {{{ |
| 127 | gst-inspect-1.0 | grep -i 'de\?muxer' |
| 128 | }}} |
| 129 | |
| 130 | Some common examples: |
| 131 | - tsparse: MPEG transport stream parser |
| 132 | - tsdemux: MPEG transport stream demuxer |
| 133 | - matroskademux: Matroska demuxer |
| 134 | - avidemux: Avi demuxer |
| 135 | - qtdemux: !QuickTime demuxer |
| 136 | - oggdemux: Ogg demuxer |
| 137 | |
| 138 | To de-mux mixed content include one of these elements following the audio and video pipelines. Note that unlike muxing typically you also need to use a {{{parser}}} element to parse the bitstream and break it into discrete buffers that the downstream decoder can understand. |
| 139 | |
| 140 | Some common parsers: |
| 141 | - ogmaudioparse: OGM audio stream parser |
| 142 | - ogmvideoparse: OGM video stream parser |
| 143 | - aacparse: AAC audio stream parser |
| 144 | - amrparse: AMR audio stream parser |
| 145 | - ac3parse: AC3 audio stream parser |
| 146 | - flacparse: FLAC audio parser |
| 147 | - mpegaudioparse: MPEG1 Audio Parser |
| 148 | - h263parse: H.263 parser |
| 149 | - h264parse: H.264 parser |
| 150 | - mpegvideoparse: MPEG video elementary stream parser |
| 151 | - mpeg4videoparse: MPEG 4 video elementary stream parser |
| 152 | - pngparse: PNG parser |
| 153 | - vc1parse: VC1 parser |
| 154 | |
| 155 | Examples: |
| 156 | * decoding a stream with audio and video content from an AVI file: |
| 157 | {{{#!bash lineno=1 |
| 158 | gst-launch-1.0 \ |
| 159 | filesource location=test.avi \ |
| 160 | ! avidemux name=demux \ |
| 161 | demux. ! queue ! ac3parse ! a52dec ! audioconvert ! alsasink \ |
| 162 | demux. ! queue ! mpeg4videoparse ! imxvpudec ! imxipuvideosink |
| 163 | }}} |
| 164 | - the {{{filesource}}} pipeline ends with {{{name=demux}}} which means the output of this pipeline will be sent to all pipelines with a {{{demux.}}} source (who's types have been successfully negotiated) |
| 165 | - the audio pipeline consisting of the ac3parse element will source buffers that are supported by its sink capabilities (ie audio/x-ac3, audio/x-eac3, audio/ac3) |
| 166 | - the video pipeline consisting of the mpeg4videoparse element will source buffers that are supported by its sink capabilities (ie video/mpeg, video-x-divx) |
| 167 | - queue elements are used to keep one pipeline or element from blocking another. For example, if the mpeg4videoparse element needs more data from the avidemux element before it can decode a frame and send it down its pipeline it would normally stall the pipeline unless a queue element was in place to allow buffering |
| 168 | |
| 169 | |
| 170 | [=#ex1] |
| 171 | === Example: Playback Matroska file with WEBM video and Vorbis Audio === |
| 172 | An example file consisting of a Matroska file container that includes WEBM encoded video and Vorbis encoded audio can be found at the [https://mango.blender.org/download/ Tears of Steel] download site. Tears of Steel is a relatively popular video (Creative Commons License) that has several encodings. |
| 173 | |
| 174 | Video file downloadable [http://media.xiph.org/mango/tears_of_steel_1080p.webm here] |
| 175 | |
| 176 | For this file we can use the {{{filessrc}}} source element, the {{{matroskademux}} demuxer, the {{{ivorbisdec}}} Vorbos audio decoder, and the {{{imxg2dvideosink}}} sink element: |
| 177 | {{{#!bash |
| 178 | gst-launch-1.0 \ |
| 179 | filesrc location=/media/open-media/tears_of_steel_1080p.webm do-timestamp=true typefind=true ! \ |
| 180 | matroskademux name=d \ |
| 181 | d. ! queue ! ivorbisdec ! queue ! alsasink device=hw:1,0 \ |
| 182 | d. ! queue ! imxvpudec ! queue ! imxg2dvideosink framebuffer=/dev/fb0 |
| 183 | }}} |
| 184 | |
| 185 | |
| 186 | [=#ex2] |
| 187 | === Example: Playback Quicktime file with H.264/AVC video and AAC Audio === |
| 188 | An example file consisting of a Quicktime file container that includes H.264/AVC encoded video and AAC encoded audio can be found at the [https://durian.blender.org/download/ Sintel] download site. Sintel is a relatively popular video (Creative Commons License) that has several encodings. |
| 189 | |
| 190 | Video file downloadable [https://download.blender.org/durian/trailer/sintel_trailer-1080p.mp4 here] |
| 191 | |
| 192 | For this file we can use the {{{filesrc}}} source element, the {{{h264parse}}} parser element along with the {{{imxvpudec}}} decoder element, and the {{{avdec_aac}}} audio decoder element. |
| 193 | {{{#!bash |
| 194 | gst-launch-1.0 filesrc location=/home/root/sintel_trailer-1080p.mp4 ! \ |
| 195 | qtdemux name=d \ |
| 196 | d. ! queue ! h264parse ! imxvpudec ! imxg2dvideosink \ |
| 197 | d. ! queue ! avdec_aac ! audioconvert ! alsasink |
| 198 | }}} |
| 199 | |
| 200 | |
| 201 | === Example: Playback MPEG-TS file === |
| 202 | |
| 203 | Video only: |
| 204 | {{{ |
| 205 | gst-launch-1.0 \ |
| 206 | filesrc location=/tmp2/T2C00201_1080p60_Crop.ts ! \ |
| 207 | tsdemux ! mpegvideoparse ! imxvpudec ! imxipuvideosink sync=false async=false |
| 208 | }}} |
| 209 | |
| 210 | Video + Audio |
| 211 | {{{ |
| 212 | gst-launch-1.0 \ |
| 213 | filesrc location=/tmp2/T2C00201_1080p60_Crop.ts \ |
| 214 | ! tsdemux name=demux \ |
| 215 | demux. ! queue ! mpegaudioparse ! queue ! mad ! audioconvert ! queue ! alsasink \ |
| 216 | demux. ! queue ! mpegvideoparse ! queue ! imxvpudec ! queue ! imxg2dvideosink sync=false async=false |
| 217 | |
| 218 | }}} |
| 219 | |
| 220 | |
| 221 | [=#bin] |
| 222 | == Bin elements == |
| 223 | A '''Bin''' element refers to a group of elements strung together and referenced as one. However, there are stand-alone elements that provide some automatic negotiation of sub-elements which use this concept. |
| 224 | |
| 225 | [=#playbin] |
| 226 | === GStreamer {{{playbin}}} === |
| 227 | GStreamer {{{playbin}}} element attempts to create a pipeline that will play both the audio and video portions of a file. For example: |
| 228 | {{{ |
| 229 | #!bash |
| 230 | gst-launch-1.0 playbin uri=file:///media/open-media/big_buck_bunny_1080p_mp4v_ac3_5.1.avi |
| 231 | }}} |
| 232 | |
| 233 | The above pipeline will attempt to output to the first video device and first audio devices found. However, you can further specify this by: |
| 234 | {{{ |
| 235 | #!bash |
| 236 | gst-launch-1.0 playbin uri=file:///media/open-media/big_buck_bunny_1080p_mp4v_ac3_5.1.avi audio-sink="alsasink device=hw:1,0" |
| 237 | }}} |
| 238 | |
| 239 | Please type {{{gst-inspect-1.0 playbin}}} to see more options. |
| 240 | |
| 241 | [=#decodebin] |
| 242 | === GStreamer {{{decodebin}}} === |
| 243 | The GStreamer plugin {{{decodebin}}} is very useful if you're unsure of which decoder to use on a stream. For example, we can replace the example under [#ex1 the first example] with the following: |
| 244 | {{{ |
| 245 | #!bash |
| 246 | gst-launch-1.0 \ |
| 247 | filesrc location=/media/open-media/tears_of_steel_1080p.webm do-timestamp=true typefind=true ! \ |
| 248 | matroskademux name=d \ |
| 249 | d. ! queue ! ivorbisdec ! queue ! alsasink device=hw:1,0 \ |
| 250 | d. ! queue ! decodebin ! queue ! imxg2dvideosink framebuffer=/dev/fb0 |
| 251 | }}} |
| 252 | |
| 253 | Note that {{{decodebin}}} doesn't always choose the correct decoder, so be wary of this. It is similar to {{{playbin}}} in that it aids in creating a dynamic pipeline. |
| 254 | |
| 255 | |
| 256 | [=#gst-play] |
| 257 | === GStreamer {{{gst-play-1.0}}} === |
| 258 | The stand-alone application {{{gst-play}}} is is a program that utilizes the {{{playbin}}} element and thus can be used for playback of many file types. The above example {{{gst-launch-1.0 playbin uri=file:///media/open-media/big_buck_bunny_1080p_mp4v_ac3_5.1.avi}}} can be replaced with: |
| 259 | {{{ |
| 260 | #!bash |
| 261 | gst-play-1.0 /media/open-media/big_buck_bunny_1080p_mp4v_ac3_5.1.avi |
| 262 | }}} |
| 263 | |
| 264 | |
| 265 | [=#determining-pipelines] |
| 266 | == How to determine what pipeline is needed to decode and play == |
| 267 | Sometimes the above Bin elements are not flexible enough and you need to determine exactly what pipeline you can use to decode and play a stream. |
| 268 | |
| 269 | The {{{gst-launch}}} application provides a couple of useful debugging tools that can help with this: |
| 270 | * using {{{GST_DEBUG_DUMP_DOT_DIR}}} and Graphviz |
| 271 | * using {{{gst-launch -v}}} |
| 272 | |
| 273 | [=#filter-graph] |
| 274 | === GST_DEBUG_DUMP_DOT_DIR === |
| 275 | You can set the GST_DEBUG_DUMP_DOT_DIR env variable to a directory which will cause {{{gst-launch}}} to output a {{{.dot}}} file for each phase of the pipeline then use a tool such as {{{Graphviz}}} to visualize the {{{.dot}}} file. |
| 276 | |
| 277 | Example: |
| 278 | * use playbin to playback a file: |
| 279 | {{{ |
| 280 | root@ventana:~# GST_DEBUG_DUMP_DOT_DIR=/tmp/dot gst-launch-1.0 playbin uri=file:///mnt/big_buck_bunny_1080p_ac3-5.1_mp4.avi |
| 281 | }}} |
| 282 | - hit Cntl-C after decoding starts to exit early |
| 283 | * see the dot files created: |
| 284 | {{{ |
| 285 | root@ventana:~# ls /tmp/dot |
| 286 | 0.00.00.108710334-gst-launch.NULL_READY.dot |
| 287 | 0.00.00.490807334-gst-launch.READY_PAUSED.dot |
| 288 | 0.00.00.506736000-gst-launch.PAUSED_PLAYING.dot |
| 289 | 0.00.03.135202001-gst-launch.PLAYING_PAUSED.dot |
| 290 | 0.00.03.254000001-gst-launch.PAUSED_READY.dot |
| 291 | }}} |
| 292 | * transfer to a PC and use something like {{{xdot}}} to view: |
| 293 | {{{ |
| 294 | xdot 0.00.03.135202001-gst-launch.PLAYING_PAUSED.dot |
| 295 | }}} |
| 296 | - zoom in along the graph and you can see that: |
| 297 | - {{{GstFileSrc}}} is the source, |
| 298 | - {{{GstAviDemux}}} is used to demux to audio/x-ac3, |
| 299 | - {{{GstAc3Parse}}} is used to parse the audio into audio frames, |
| 300 | - {{{GstMpeg4VParse}}} is used to parse the video into video frames, |
| 301 | - {{{GstImxVpuDec}}} is used to decode the video from video/mpeg to video/x-raw, |
| 302 | - {{{ GstA52Dec}}} is used to decode the audio from audio/x-ac3 to audio/x-raw, |
| 303 | - etc |
| 304 | - Note that some hunting with {{{gst-inspect}}} must be done to determine what elements coorespond to the above class names |
| 305 | |
| 306 | Reference: |
| 307 | - http://docs.gstreamer.com/display/GstSDK/Basic+tutorial+11%3A+Debugging+tools |
| 308 | |
| 309 | === gst-launch -v === |
| 310 | The verbose debugging from {{{gst-launch -v}}} can show you the negotiation that takes place as a pipeline moves through its stages. |
| 311 | |
| 312 | Example: |
| 313 | {{{ |
| 314 | gst-launch-1.0 -v playbin uri=file:///mnt/big_buck_bunny_1080p_ac3-5.1_mp4.avi |
| 315 | }}} |
| 316 | |
| 317 | examining the verbose output can show you the following: |
| 318 | * container: AVI: avidemux |
| 319 | * video: MPEG-4 4481kbps min, 6668kbps max: mpeg4videoparse ! imxvpudec |
| 320 | * audio: AC3 48khz 5channels: ac3parse ! a52dec |
| 321 | |
| 322 | Therefore you can use these pipelines to decode and play: |
| 323 | * video only (output to imxipuvideosink fb0) |
| 324 | {{{ |
| 325 | gst-launch-1.0 -v filesrc location=/mnt/big_buck_bunny_1080p_ac3-5.1_mp4.avi ! avidemux ! mpeg4videoparse ! imxvpudec ! imxipuvideosink |
| 326 | }}} |
| 327 | * audio only (output to hdmi audio sink) |
| 328 | {{{ |
| 329 | gst-launch-1.0 -v filesrc location=/mnt/big_buck_bunny_1080p_ac3-5.1_mp4.avi ! avidemux ! ac3parse ! a52dec ! audioconvert ! alsasink device="sysdefault:CARD=imxhdmisoc" |
| 330 | }}} |
| 331 | * both audio and video |
| 332 | {{{ |
| 333 | gst-launch-1.0 -v filesrc location=/mnt/big_buck_bunny_1080p_ac3-5.1_mp4.avi ! avidemux name=d \ |
| 334 | d. ! queue ! mpeg4videoparse ! imxvpudec ! imxipuvideosink \ |
| 335 | d. ! queue ! ac3parse ! a52dec ! audioconvert ! alsasink device="sysdefault:CARD=imxhdmisoc" |
| 336 | }}} |