Gstreamer pipelines for DM816x and DM814x: Difference between revisions

From RidgeRun Developer Wiki
No edit summary
Line 1: Line 1:
= Introduction =
= Introduction =


On this page you are going to find a set of pipelines used on the DM8168 (EVM and Z3 boards) and DM8148 (EVM). It's important to mention that some of these pipelines are documented twice in the first section of this page, the first one is to be run on the Z3 board and the second one to be used on the DM8168-EVM board, the main difference between them is the absence of the omx_tvp element which performs the initialization of the TVP7002 hardware in order to capture video from the component input on the EVM board. This element is not needed on the Z3 board, since Z3 has created an initialization script called init_7611_edid.sh which performs the hardware initialization for both, the TVP7002 and the ADV7611 to capture from HDMI inputs. Moreover, the second section of this page contains pipelines to be used on DM8148 with the RidgeRun SDK, on this section you will find pipelines to display video on the HDMI port as well as on the LCD that is built in with the DM8148-EVM  
On this page you are going to find a set of pipelines used on the DM8168 (EVM and Z3 boards) and DM8148 (EVM). It's important to mention that some of these pipelines are documented twice in the first section of this page, the first one is to be run on the Z3 board and the second one to be used on the DM8168-EVM board, the main difference between them is the absence of the omx_tvp element which performs the initialization of the TVP7002 hardware in order to capture video from the component input on the EVM board. This element is not needed on the Z3 board, since Z3 has created an initialization script called init_7611_edid.sh which performs the hardware initialization for both, the TVP7002 and the ADV7611 to capture from HDMI inputs. Moreover, the second section of this page contains pipelines to be used on DM8148 with the RidgeRun SDK, on this section you will find pipelines to display video on the HDMI port as well as on the LCD that is built in with the DM8148-EVM  
Line 9: Line 9:
Some of these pipelines have to be run on the target board and other in your computer, they are distinguished by the color used to document them, blue pipelines are for the Z3 board, yellow for EVM board and green pipelines have to be run in your PC  
Some of these pipelines have to be run on the target board and other in your computer, they are distinguished by the color used to document them, blue pipelines are for the Z3 board, yellow for EVM board and green pipelines have to be run in your PC  


= '''DM81xx''' =
= '''DM81xx''' =


'''Display videotest pattern'''
'''Display videotest pattern'''  
<pre style="background:#d6e4f1">
<pre style="background:#d6e4f1">gst-launch -v videotestsrc&nbsp;! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 &nbsp;! gstperf&nbsp;! omx_videosink sync=false
gst-launch -v videotestsrc ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf ! omx_videosink sync=false
</pre>  
</pre>
'''Scale the QVGA video test pattern to VGA'''  
'''Scale the QVGA video test pattern to VGA'''
<pre style="background:#d6e4f1">gst-launch -v videotestsrc&nbsp;! 'video/x-raw-yuv,width=320,height=240'&nbsp;! omx_scaler&nbsp;! \
<pre style="background:#d6e4f1">
'video/x-raw-yuv,width=640,height=480'&nbsp;! omx_ctrl display-mode=OMX_DC_MODE_1080P_60&nbsp;! \
gst-launch -v videotestsrc ! 'video/x-raw-yuv,width=320,height=240' ! omx_scaler ! \
gstperf&nbsp;! omx_videosink sync=false -v
'video/x-raw-yuv,width=640,height=480' ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! \
</pre>  
gstperf ! omx_videosink sync=false -v
'''Encode videotest pattern in H.264 (without container)'''
</pre>
<pre style="background:#d6e4f1">gst-launch -v videotestsrc num-buffers=1000&nbsp;! omx_h264enc&nbsp;! gstperf&nbsp;! filesink location=sample.264
</pre>
== Video Streaming ==


'''Encode videotest pattern in H.264 (without container)'''
These instructions show how to do video streaming over the network, a video will be played on the board and viewed on the host. These pipelines use the default port (4951) to send the packets, if you want to change the port number, you have to add the port capability to the udpsink.(e.g udpsink port=$PORT host=$CLIENT_IP)
<pre style="background:#d6e4f1">
gst-launch -v videotestsrc num-buffers=1000 ! omx_h264enc ! gstperf ! filesink location=sample.264
</pre>


== Video Streaming==
=== RTP ===
 
'''Stream H.264 video test pattern over RTP'''


These instructions show how to do video streaming over the network, a video will be played on the board and viewed on the host. These pipelines use the default port (4951) to send the packets, if you want to change the port number, you have to add the port capability to the udpsink.(e.g udpsink port=$PORT host=$CLIENT_IP)
===RTP===
'''Stream H.264 video test pattern over RTP'''
*''Server: DM81xx''
*''Server: DM81xx''
<pre style="background:#d6e4f1">
<pre style="background:#d6e4f1">CLIENT_IP=10.251.101.58
CLIENT_IP=10.251.101.58


gst-launch videotestsrc ! omx_h264enc ! queue ! h264parse !  gstperf ! rtph264pay ! udpsink host=$CLIENT_IP -v
gst-launch videotestsrc&nbsp;! omx_h264enc&nbsp;! queue&nbsp;! h264parse&nbsp;!  gstperf&nbsp;! rtph264pay&nbsp;! udpsink host=$CLIENT_IP -v
</pre>
</pre>  
 
This pipeline is going to print the capabilities of each element's pad thanks to the -v option. The pipeline should print something similar to this output:  
This pipeline is going to print the capabilities of each element's pad thanks to the -v option. The pipeline should print something similar to this output:
<pre>.
<pre>
.
.
.
.
.
Line 60: Line 55:
.
.
.                                                                       
.                                                                       
</pre>
</pre>  
You need the udpsink:sink capabilities for the client pipeline.


You need the udpsink:sink capabilities for the client pipeline.
*''Client: Ubuntu PC''


*''Client: Ubuntu PC''
Copy the udpsink caps given by the server pipeline, erase the spaces and the (uint) cast.  
Copy the udpsink caps given by the server pipeline, erase the spaces and the (uint) cast.
<pre style="background:#ffffd0">CAPS=application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264,\
<pre style="background:#ffffd0">
CAPS=application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264,\
sprop-parameter-sets=(string)"J0KAKouVAoPy\,KN4BriA\=",payload=(int)96,ssrc=951364645,\
sprop-parameter-sets=(string)"J0KAKouVAoPy\,KN4BriA\=",payload=(int)96,ssrc=951364645,\
clock-base=2084568768,seqnum-base=10992
clock-base=2084568768,seqnum-base=10992
Line 73: Line 67:
PORT=4951
PORT=4951


gst-launch udpsrc port=$PORT ! $CAPS ! rtph264depay ! queue ! ffdec_h264 ! xvimagesink sync=false -v
gst-launch udpsrc port=$PORT&nbsp;! $CAPS&nbsp;! rtph264depay&nbsp;! queue&nbsp;! ffdec_h264&nbsp;! xvimagesink sync=false -v
</pre>
</pre>  
'''Stream H.264 encoded video file over RTP'''<br>
'''Stream H.264 encoded video file over RTP'''<br> These pipelines use a video file and send it over the network. Here you can use any file encoded in H.264.  
These pipelines use a video file and send it over the network. Here you can use any file encoded in H.264.  
 
* ''Server: DM81xx''
*''Server: DM81xx''
<pre style="background:#d6e4f1">
<pre style="background:#d6e4f1">CLIENT_IP=10.251.101.58
CLIENT_IP=10.251.101.58


FILE=sintel_trailer-1080p.mp4
FILE=sintel_trailer-1080p.mp4


gst-launch filesrc location=$FILE ! qtdemux ! queue ! h264parse !  gstperf ! rtph264pay ! udpsink host=$CLIENT_IP -v
gst-launch filesrc location=$FILE &nbsp;! qtdemux &nbsp;! queue&nbsp;! h264parse&nbsp;!  gstperf&nbsp;! rtph264pay&nbsp;! udpsink host=$CLIENT_IP -v
</pre>
</pre>  
As before, you need the udpsink:sink capabilities for the client pipeline.


As before, you need the udpsink:sink capabilities for the client pipeline.
*''Client: Ubuntu PC''


* ''Client: Ubuntu PC''
Copy the udpsink caps given by the server pipeline, erase the spaces and the (uint) cast.  
Copy the udpsink caps given by the server pipeline, erase the spaces and the (uint) cast.
<pre style="background:#ffffd0">CAPS=application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264,\
<pre style="background:#ffffd0">
CAPS=application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264,\
sprop-parameter-sets=(string)\"Z2QAMqw05gHgCJ+WEAAAAwAQAAADAwDxgxmg\\,aOl4TLIs\",payload=(int)96,\
sprop-parameter-sets=(string)\"Z2QAMqw05gHgCJ+WEAAAAwAQAAADAwDxgxmg\\,aOl4TLIs\",payload=(int)96,\
ssrc=2152503956,clock-base=4043051310,seqnum-base=10306
ssrc=2152503956,clock-base=4043051310,seqnum-base=10306
Line 97: Line 89:
PORT=4951
PORT=4951


gst-launch udpsrc port=$PORT ! $CAPS ! rtph264depay ! queue ! ffdec_h264 ! xvimagesink sync=false -v
gst-launch udpsrc port=$PORT&nbsp;! $CAPS&nbsp;! rtph264depay&nbsp;! queue&nbsp;! ffdec_h264&nbsp;! xvimagesink sync=false -v
</pre>
</pre>  
= '''DM8168'''  =


= '''DM8168''' =
== Live Preview 1080p@60 ==
 
== Live Preview 1080p@60 ==


'''Z3 board''':  
'''Z3 board''':  
Line 116: Line 107:
<pre style="background:#FFFFC0">gst-launch omx_camera&nbsp;! "video/x-raw-yuv, format=(fourcc)YUY2, width=1920, height=1080, framerate=60/1, buffer-count-requested=4"&nbsp;! omx_tvp&nbsp;! omx_ctrl display-mode=OMX_DC_MODE_1080P_60&nbsp;! omx_videosink sync=false
<pre style="background:#FFFFC0">gst-launch omx_camera&nbsp;! "video/x-raw-yuv, format=(fourcc)YUY2, width=1920, height=1080, framerate=60/1, buffer-count-requested=4"&nbsp;! omx_tvp&nbsp;! omx_ctrl display-mode=OMX_DC_MODE_1080P_60&nbsp;! omx_videosink sync=false
</pre>  
</pre>  
== Video Encoding H264 1080@30fps ==
== Video Encoding H264 1080@30fps ==


'''Z3 board''':  
'''Z3 board''':  
<pre style="background:#d6e4f1">gst-launch -e omx_camera output-buffers=10 skip-frames=1&nbsp;!  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10&nbsp;! gstperf print-arm-load=true print-fps=true&nbsp;! \
<pre style="background:#d6e4f1">gst-launch -e omx_camera output-buffers=10 skip-frames=1 !  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10 ! gstperf print-arm-load=true print-fps=true ! \  
omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 profile=1&nbsp;! queue&nbsp;! h264parse output-format=0&nbsp;! mp4mux dts-method=0&nbsp;! filesink location=test.mp4
omx_h264enc force-idr-period=23 i-period=23 bitrate=10000000 profile=1 ! queue ! rr_h264parser singleNalu=true ! mp4mux dts-method=0 ! filesink location=test30fps.mp4
 
</pre>  
</pre>  
'''EVM board''':  
'''EVM board''':  
<pre style="background:#FFFFC0">gst-launch -e omx_camera output-buffers=10 skip-frames=1&nbsp;!  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10 &nbsp;! omx_tvp&nbsp;! gstperf print-arm-load=true print-fps=true&nbsp;! \
<pre style="background:#FFFFC0">gst-launch -e omx_camera output-buffers=10 skip-frames=1&nbsp;!  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10 &nbsp;! omx_tvp&nbsp;! gstperf print-arm-load=true print-fps=true&nbsp;! \
omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 profile=1&nbsp;! queue&nbsp;! h264parse output-format=0&nbsp;! mp4mux dts-method=0&nbsp;! filesink location=test.mp4
omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 profile=1&nbsp;! queue&nbsp;! h264parse output-format=0&nbsp;! mp4mux dts-method=0&nbsp;! filesink location=test.mp4
</pre>
</pre>  
== Video Encoding H264 1080@60fps  ==


== Video Encoding H264 1080@60fps ==
'''Z3 board''':
<pre style="background:#d6e4f1">gst-launch -e omx_camera output-buffers=10 !  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)60/1, buffer-count-requested=10  ! gstperf print-arm-load=true print-fps=true ! \
omx_h264enc force-idr-period=46 i-period=46 bitrate=10000000 profile=1 ! queue ! rr_h264parser singleNalu=true ! mp4mux dts-method=0 ! filesink location=test60fps.mp4


'''Z3 board''':
<pre style="background:#d6e4f1">gst-launch -e omx_camera output-buffers=10&nbsp;!  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)60/1, buffer-count-requested=10 &nbsp;! gstperf print-arm-load=true print-fps=true&nbsp;! \
omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 profile=1&nbsp;! queue&nbsp;! h264parse output-format=0&nbsp;! mp4mux dts-method=0&nbsp;! filesink location= test.mp4
</pre>  
</pre>  
'''EVM board''':  
'''EVM board''':  
<pre style="background:#FFFFC0">gst-launch -e omx_camera output-buffers=10&nbsp;!  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)60/1, buffer-count-requested=10 &nbsp;! omx_tvp&nbsp;! gstperf print-arm-load=true print-fps=true&nbsp;! \
<pre style="background:#FFFFC0">gst-launch -e omx_camera output-buffers=10&nbsp;!  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)60/1, buffer-count-requested=10 &nbsp;! omx_tvp&nbsp;! gstperf print-arm-load=true print-fps=true&nbsp;! \
omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 profile=1&nbsp;! queue&nbsp;! h264parse output-format=0&nbsp;! mp4mux dts-method=0&nbsp;! filesink location= test.mp4
omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 profile=1&nbsp;! queue&nbsp;! h264parse output-format=0&nbsp;! mp4mux dts-method=0&nbsp;! filesink location= test.mp4
</pre>
</pre>  
 
== Encoding: Video (H264) + Audio (AAC) 1080@30fps ==
== Encoding: Video (H264) + Audio (AAC) 1080@30fps ==


'''EVM board''':  
'''EVM board''':  
Line 146: Line 137:
mux.audio_00 qtmux name=mux&nbsp;! filesink location=audioVideo.mp4
mux.audio_00 qtmux name=mux&nbsp;! filesink location=audioVideo.mp4
</pre>  
</pre>  
== Encoding: Video (H264) + Audio (AAC) 1080@60fps ==
== Encoding: Video (H264) + Audio (AAC) 1080@60fps ==


'''EVM board''':  
'''EVM board''':  
Line 154: Line 145:
output-format=4&nbsp;! queue&nbsp;! aacparse&nbsp;! mux.audio_00 qtmux name=mux&nbsp;! filesink location=audioVideo.mp4
output-format=4&nbsp;! queue&nbsp;! aacparse&nbsp;! mux.audio_00 qtmux name=mux&nbsp;! filesink location=audioVideo.mp4
</pre>  
</pre>  
== Decoding: Video (H264) + Audio (AAC) 1080@30fps ==
== Decoding: Video (H264) + Audio (AAC) 1080@30fps ==


'''EVM board''':  
'''EVM board''':  
Line 161: Line 152:
gst-launch filesrc location= audioVideo.mp4&nbsp;! qtdemux name=mux mux.video_00&nbsp;! queue &nbsp;! h264parse output-format=1&nbsp;! omx_h264dec&nbsp;! omx_scaler&nbsp;! omx_ctrl display-mode=OMX_DC_MODE_1080P_30&nbsp;! gstperf print-fps=true print-arm-load=true &nbsp;! \
gst-launch filesrc location= audioVideo.mp4&nbsp;! qtdemux name=mux mux.video_00&nbsp;! queue &nbsp;! h264parse output-format=1&nbsp;! omx_h264dec&nbsp;! omx_scaler&nbsp;! omx_ctrl display-mode=OMX_DC_MODE_1080P_30&nbsp;! gstperf print-fps=true print-arm-load=true &nbsp;! \
omx_videosink enable-last-buffer=false mux.audio_00&nbsp;! queue&nbsp;! omx_aacdec&nbsp;! alsasink
omx_videosink enable-last-buffer=false mux.audio_00&nbsp;! queue&nbsp;! omx_aacdec&nbsp;! alsasink
</pre>
</pre>  
 
== Decoding: Video (H264) + Audio (AAC) 1080@60fps ==
== Decoding: Video (H264) + Audio (AAC) 1080@60fps ==


'''EVM board''':  
'''EVM board''':  
Line 170: Line 160:
gst-launch filesrc location= audioVideo.mp4&nbsp;! qtdemux name=mux mux.video_00&nbsp;! queue &nbsp;! h264parse output-format=1&nbsp;! omx_h264dec&nbsp;! omx_scaler&nbsp;! omx_ctrl display-mode=OMX_DC_MODE_1080P_60&nbsp;! gstperf print-fps=true print-arm-load=true &nbsp;! \
gst-launch filesrc location= audioVideo.mp4&nbsp;! qtdemux name=mux mux.video_00&nbsp;! queue &nbsp;! h264parse output-format=1&nbsp;! omx_h264dec&nbsp;! omx_scaler&nbsp;! omx_ctrl display-mode=OMX_DC_MODE_1080P_60&nbsp;! gstperf print-fps=true print-arm-load=true &nbsp;! \
omx_videosink enable-last-buffer=false mux.audio_00&nbsp;! queue&nbsp;! omx_aacdec&nbsp;! alsasink
omx_videosink enable-last-buffer=false mux.audio_00&nbsp;! queue&nbsp;! omx_aacdec&nbsp;! alsasink
</pre>
</pre>  
 
== RTSP - Video H264 1080@30fps ==
== RTSP - Video H264 1080@30fps ==


'''Z3 board''':  
'''Z3 board''':  
Line 189: Line 178:
! omx_videosink sync=false enable-last-buffer=false
! omx_videosink sync=false enable-last-buffer=false
</pre>  
</pre>  
== RTSP - Video H264 1080@60fps ==
== RTSP - Video H264 1080@60fps ==


'''Z3 board''':  
'''Z3 board''':  
Line 208: Line 197:
<br>  
<br>  


== RTSP - Video (H264) + Audio (AAC) 1080@30fps ==
== RTSP - Video (H264) + Audio (AAC) 1080@30fps ==


'''Z3 board''':  
'''Z3 board''':  
Line 223: Line 212:
<pre style="background:#a4c211">Please use VLC
<pre style="background:#a4c211">Please use VLC
</pre>  
</pre>  
== RTSP - Video (H264) + Audio (AAC) 1080@60fps ==
== RTSP - Video (H264) + Audio (AAC) 1080@60fps ==


'''Z3 board''':  
'''Z3 board''':  
Line 236: Line 225:
'''Host side'''  
'''Host side'''  
<pre style="background:#a4c211">Please use VLC
<pre style="background:#a4c211">Please use VLC
</pre>
</pre>
<br>  


== Dual capture: Video recording (H264) 1080@30fps | taking snapshots JPEG - EVM &amp; Z3 board  ==


== Dual capture: Video recording (H264) 1080@30fps | taking snapshots JPEG  - EVM & Z3 board ==
'''Recording'''  
'''Recording'''
<pre style="background:#d6e4f1">gst-launch -e v4l2src device=/dev/video0 num-buffers=1500 always-copy=false queue-size=8 &nbsp;! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1'&nbsp;!  \
<pre style="background:#d6e4f1">
omxbufferalloc numBuffers=12&nbsp;! omx_h264enc output-buffers=16 input-buffers=10 force-idr-period=30 i-period=30 bitrate=16000000 &nbsp;! queue&nbsp;! rr_h264parser&nbsp;! mp4mux dts-method=0&nbsp;! filesink location= video.mp4   
gst-launch -e v4l2src device=/dev/video0 num-buffers=1500 always-copy=false queue-size=8 ! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' !  \
</pre>  
omxbufferalloc numBuffers=12 ! omx_h264enc output-buffers=16 input-buffers=10 force-idr-period=30 i-period=30 bitrate=16000000 ! queue ! rr_h264parser ! mp4mux dts-method=0 ! filesink location= video.mp4   
'''Snapshots'''
</pre>
<pre style="background:#d6e4f1">gst-launch -e v4l2src device=/dev/video5 num-buffers=1 always-copy=false queue-size=8 &nbsp;! 'video/x-raw-yuv,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1'&nbsp;! \
rrbufferalloc numBuffers=10&nbsp;! queue &nbsp;! ffmpegcolorspace&nbsp;! jpegenc&nbsp;! jifmux&nbsp;! filesink location=snapshot.jpeg
</pre>
== Dual H264 encoding 1080p@30fps - single Capture  ==


'''Snapshots'''
'''Z3 board''':
 
<pre style="background:#d6e4f1">gst-launch -e omx_camera num-buffers=2000 output-buffers=10 skip-frames=1&nbsp;! video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10&nbsp;! tee \
<pre style="background:#d6e4f1">
name=t&nbsp;! queue&nbsp;! gstperf&nbsp;! omx_h264enc output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000&nbsp;! rr_h264parser singleNalu=true &nbsp;! qtmux dts-method=0 &nbsp;! filesink \
gst-launch -e v4l2src device=/dev/video5 num-buffers=1 always-copy=false queue-size=! 'video/x-raw-yuv,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' ! \
location=videoA.mp4 t.&nbsp;! queue&nbsp;! gstperf&nbsp;! omx_h264enc output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000&nbsp;! rr_h264parser singleNalu=true &nbsp;! \
rrbufferalloc numBuffers=10 ! queue ! ffmpegcolorspace ! jpegenc ! jifmux ! filesink location=snapshot.jpeg
qtmux dts-method=0 &nbsp;! filesink location=videoB.mp4
</pre>
</pre>  
== Dual Capture - Dual H264 encoding 1080p@30fps/60fps  ==


== Dual H264 encoding 1080p@30fps - single Capture ==
'''Z3 board''':  
'''Z3 board''':  
<pre style="background:#d6e4f1">
<pre style="background:#d6e4f1">gst-launch -e omx_camera num-buffers=2000 output-buffers=10 skip-frames=1&nbsp;! video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10 \
gst-launch -e omx_camera num-buffers=2000 output-buffers=10 skip-frames=1 ! video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10 ! tee \
! gstperf&nbsp;! omx_h264enc output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000&nbsp;! rr_h264parser singleNalu=true &nbsp;! qtmux dts-method=0 &nbsp;! filesink location=videoA.mp4 v4l2src \
name=t ! queue ! gstperf ! omx_h264enc output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000 ! rr_h264parser singleNalu=true ! qtmux dts-method=0 ! filesink \
device=/dev/video5 always-copy=false queue-size=8 &nbsp;! 'video/x-raw-yuv,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1'&nbsp;! omxbufferalloc numBuffers=8&nbsp;! gstperf&nbsp;! omx_h264enc \
location=videoA.mp4 t. ! queue ! gstperf ! omx_h264enc output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000 ! rr_h264parser singleNalu=true ! \
output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000&nbsp;! rr_h264parser singleNalu=true &nbsp;! qtmux dts-method=0 &nbsp;! filesink location=videoB.mp4
qtmux dts-method=0 ! filesink location=videoB.mp4
</pre>  
</pre>
== Dual Capture - Dual H264 encoding 1080p@30fps/60fps - Dual RTP streaming  ==


== Dual Capture - Dual H264 encoding 1080p@30fps/60fps ==
Here you will find an example but likely when doing streaming of your own pipeline you will need to follow the steps [ here ] to get your correct Caps, after that run a similar pipeline to this one:


'''Z3 board''':
'''Z3 board''':  
<pre style="background:#d6e4f1">
<pre style="background:#d6e4f1">PORTA=3001
gst-launch -e omx_camera num-buffers=2000 output-buffers=10 skip-frames=1 ! video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10 \
! gstperf ! omx_h264enc output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000 ! rr_h264parser singleNalu=true  ! qtmux dts-method=0  ! filesink location=videoA.mp4 v4l2src \
device=/dev/video5 always-copy=false queue-size=8  ! 'video/x-raw-yuv,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' !  omxbufferalloc numBuffers=8 ! gstperf ! omx_h264enc \
output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000 ! rr_h264parser singleNalu=true  ! qtmux dts-method=0  ! filesink location=videoB.mp4
</pre>
 
== Dual Capture - Dual H264 encoding 1080p@30fps/60fps - Dual RTP streaming ==
 
Here you will find an example but likely when doing streaming of your own pipeline you will need to follow the steps [ here ] to get your correct Caps, after that run a similar pipeline to this one:
 
'''Z3 board''':
<pre style="background:#d6e4f1">
PORTA=3001
PORTB=3002
PORTB=3002
IP=<IP addess of your host machine>
IP=&lt;IP addess of your host machine&gt;


gst-launch -e omx_camera output-buffers=10 skip-frames=1 ! video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10 ! gstperf ! \
gst-launch -e omx_camera output-buffers=10 skip-frames=1&nbsp;! video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10&nbsp;! gstperf&nbsp;! \
omx_h264enc output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000 ! rtph264pay ! udpsink host=10.251.101.18 port=3001 v4l2src device=/dev/video5 always-copy=false\
omx_h264enc output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000&nbsp;! rtph264pay&nbsp;! udpsink host=10.251.101.18 port=3001 v4l2src device=/dev/video5 always-copy=false\
  queue-size=8 ! 'video/x-raw-yuv,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' !  omxbufferalloc numBuffers=8 ! gstperf ! omx_h264enc output-buffers=6 input-buffers=4 \
  queue-size=8 &nbsp;! 'video/x-raw-yuv,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1'&nbsp;!  omxbufferalloc numBuffers=8&nbsp;! gstperf&nbsp;! omx_h264enc output-buffers=6 input-buffers=4 \
force-idr-period=16 i-period=16 bitrate=16000000 ! rtph264pay ! udpsink host=$IP port=3002 -v
force-idr-period=16 i-period=16 bitrate=16000000&nbsp;! rtph264pay&nbsp;! udpsink host=$IP port=3002 -v
</pre>
</pre>  
 
'''Host side''':  
'''Host side''':
<pre style="background:#a4c211">gst-launch-0.10 udpsrc port=$PORTB&nbsp;! 'application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)"J0KAKouVAPAET8qAAA\=\=\,KN4BriAA", \
<pre style="background:#a4c211">
payload=(int)96, ssrc=(uint)1438616454, clock-base=(uint)1676303462, seqnum-base=(uint)64771'&nbsp;! rtph264depay&nbsp;! queue&nbsp;! ffdec_h264&nbsp;! fpsdisplaysink sync=false udpsrc port=$PORTA&nbsp;! 'application/x-rtp, \
gst-launch-0.10 udpsrc port=$PORTB ! 'application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)"J0KAKouVAPAET8qAAA\=\=\,KN4BriAA", \
payload=(int)96, ssrc=(uint)1438616454, clock-base=(uint)1676303462, seqnum-base=(uint)64771' ! rtph264depay ! queue ! ffdec_h264 ! fpsdisplaysink sync=false udpsrc port=$PORTA ! 'application/x-rtp, \
media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)"J0KAKouVAPAET8qAAA\=\=\,KN4BriAA", payload=(int)96, ssrc=(uint)3331867104, clock-base=(uint)3123811109, \
media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)"J0KAKouVAPAET8qAAA\=\=\,KN4BriAA", payload=(int)96, ssrc=(uint)3331867104, clock-base=(uint)3123811109, \
seqnum-base=(uint)15982' ! rtph264depay ! queue ! ffdec_h264 ! fpsdisplaysink sync=false
seqnum-base=(uint)15982'&nbsp;! rtph264depay&nbsp;! queue&nbsp;! ffdec_h264&nbsp;! fpsdisplaysink sync=false
</pre>
</pre>  
== VL2SRC video playback / encode pipelines (Tested on Z3 board)<br>  ==


== VL2SRC video playback / encode pipelines (Tested on Z3 board)<br> ==
'''V4L2src capture + V4L2 sink display:'''<br>
<pre>gst-launch v4l2src always-copy=false queue-size=12&nbsp;! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1'&nbsp;! omxbufferalloc numBuffers=12&nbsp;! omx_scaler&nbsp;! gstperf&nbsp;! v4l2sink sync=false
</pre>
'''V4L2src capture + V4L2 sink display (1% average ARM&nbsp;consumption by removing omx_scaler element):'''
<pre>gst-launch v4l2src always-copy=false queue-size=12&nbsp;! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1'&nbsp;! omxbufferalloc numBuffers=12&nbsp;! gstperf&nbsp;! v4l2sink sync=false


'''V4L2src capture + V4L2 sink display:'''<br>
</pre>  
<pre>gst-launch v4l2src always-copy=false queue-size=12 ! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' ! omxbufferalloc numBuffers=12 ! omx_scaler ! gstperf ! v4l2sink sync=false
'''V4L2src capture + OMX sink display:'''<br>  
</pre>
<pre>gst-launch v4l2src always-copy=false queue-size=12&nbsp;! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1'&nbsp;! omxbufferalloc numBuffers=12&nbsp;! omx_scaler&nbsp;! omx_ctrl display-mode=OMX_DC_MODE_1080P_60&nbsp;! gstperf&nbsp;! omx_videosink sync=false
'''V4L2src capture + V4L2 sink display (1% average ARM&nbsp;consumption by removing omx_scaler element):'''
</pre>  
<pre>gst-launch v4l2src always-copy=false queue-size=12 ! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' ! omxbufferalloc numBuffers=12 ! gstperf ! v4l2sink sync=false
'''OMX camera capture + OMX sink display:'''<br>  
 
<pre>gst-launch omx_camera &nbsp;! "video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=60/1, buffer-count-requested=4"&nbsp;! omx_scaler &nbsp;!  omx_ctrl display-mode=OMX_DC_MODE_1080P_60&nbsp;! gstperf print-fps=true print-arm-load=true &nbsp;! omx_videosink sync=false
</pre>
</pre>  
'''V4L2src capture + OMX sink display:'''<br>
'''V4L2src capture + H264 encoding:'''<br>  
<pre>gst-launch v4l2src always-copy=false queue-size=12 ! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' ! omxbufferalloc numBuffers=12 ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf ! omx_videosink sync=false
<pre>gst-launch -e v4l2src always-copy=false queue-size=12&nbsp;! video/x-raw-yuv-strided, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)60/1, buffer-count-requested=12&nbsp;! omxbufferalloc numBuffers=12&nbsp;! gstperf print-arm-load=true print-fps=true \
</pre>
! queue&nbsp;! omx_h264enc i-period=5 force-idr-period=120&nbsp;! h264parse output-format=0&nbsp;! mp4mux dts-method=0&nbsp;! filesink location= test.mp4
'''OMX camera capture + OMX sink display:'''<br>
</pre>  
<pre>gst-launch omx_camera ! "video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=60/1, buffer-count-requested=4" ! omx_scaler !  omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf print-fps=true print-arm-load=true ! omx_videosink sync=false
= '''DM8148''' =
</pre>
'''V4L2src capture + H264 encoding:'''<br>
<pre>gst-launch -e v4l2src always-copy=false queue-size=12 ! video/x-raw-yuv-strided, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)60/1, buffer-count-requested=12 ! omxbufferalloc numBuffers=12 ! gstperf print-arm-load=true print-fps=true \
! queue ! omx_h264enc i-period=5 force-idr-period=120 ! h264parse output-format=0 ! mp4mux dts-method=0 ! filesink location= test.mp4
</pre>
 
= '''DM8148''' =


== Live Preview 1080p@60 ==
== Live Preview 1080p@60 ==


'''LCD''':  
'''LCD''':  
Line 332: Line 309:
print-arm-load=true &nbsp;! omx_videosink sync=false
print-arm-load=true &nbsp;! omx_videosink sync=false
</pre>  
</pre>  
== Live Preview 1080p@30 ==
== Live Preview 1080p@30 ==


'''LCD''':  
'''LCD''':  
Line 346: Line 323:
print-fps=true print-arm-load=true &nbsp;! omx_videosink sync=false
print-fps=true print-arm-load=true &nbsp;! omx_videosink sync=false
</pre>  
</pre>  
== Encoding: Video (H264) + Audio (AAC) 1080@30fps ==
== Encoding: Video (H264) + Audio (AAC) 1080@30fps ==


'''EVM board''':  
'''EVM board''':  
Line 354: Line 331:
width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2"&nbsp;!  omx_aacenc output-format=4&nbsp;! queue&nbsp;! aacparse&nbsp;! mux.audio_00 qtmux name=mux&nbsp;! filesink location=audioVideo.mp4
width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2"&nbsp;!  omx_aacenc output-format=4&nbsp;! queue&nbsp;! aacparse&nbsp;! mux.audio_00 qtmux name=mux&nbsp;! filesink location=audioVideo.mp4
</pre>  
</pre>  
== Encoding: Video (H264) + Audio (AAC) 1080@60fps ==
== Encoding: Video (H264) + Audio (AAC) 1080@60fps ==


'''EVM board''':  
'''EVM board''':  
Line 362: Line 339:
depth=(int)16, rate=(int)44100, channels=(int)2"&nbsp;!  omx_aacenc output-format=4&nbsp;! queue&nbsp;! aacparse&nbsp;! mux.audio_00 qtmux name=mux&nbsp;! filesink location=audioVideo.mp4
depth=(int)16, rate=(int)44100, channels=(int)2"&nbsp;!  omx_aacenc output-format=4&nbsp;! queue&nbsp;! aacparse&nbsp;! mux.audio_00 qtmux name=mux&nbsp;! filesink location=audioVideo.mp4
</pre>  
</pre>  
== Decoding: Video (H264) + Audio (AAC) 1080@30fps ==
== Decoding: Video (H264) + Audio (AAC) 1080@30fps ==


'''LCD''':  
'''LCD''':  
Line 380: Line 357:
mux.audio_00&nbsp;! queue&nbsp;! omx_aacdec&nbsp;! alsasink
mux.audio_00&nbsp;! queue&nbsp;! omx_aacdec&nbsp;! alsasink
</pre>  
</pre>  
== Decoding: Video (H264) + Audio (AAC) 1080@60fps ==
== Decoding: Video (H264) + Audio (AAC) 1080@60fps ==


'''LCD''':  
'''LCD''':  
Line 398: Line 375:
omx_videosink enable-last-buffer=false mux.audio_00&nbsp;! queue&nbsp;! omx_aacdec&nbsp;! alsasink
omx_videosink enable-last-buffer=false mux.audio_00&nbsp;! queue&nbsp;! omx_aacdec&nbsp;! alsasink
</pre>  
</pre>  
== RTSP - Video H264 1080@30fps ==
== RTSP - Video H264 1080@30fps ==


'''EVM board''':  
'''EVM board''':  

Revision as of 20:28, 23 April 2013

Introduction

On this page you are going to find a set of pipelines used on the DM8168 (EVM and Z3 boards) and DM8148 (EVM). It's important to mention that some of these pipelines are documented twice in the first section of this page, the first one is to be run on the Z3 board and the second one to be used on the DM8168-EVM board, the main difference between them is the absence of the omx_tvp element which performs the initialization of the TVP7002 hardware in order to capture video from the component input on the EVM board. This element is not needed on the Z3 board, since Z3 has created an initialization script called init_7611_edid.sh which performs the hardware initialization for both, the TVP7002 and the ADV7611 to capture from HDMI inputs. Moreover, the second section of this page contains pipelines to be used on DM8148 with the RidgeRun SDK, on this section you will find pipelines to display video on the HDMI port as well as on the LCD that is built in with the DM8148-EVM

Please be sure to run the init_7611_edid.sh script before to run pipelines to capture video (if you are using the Z3 board), also you will need to disable the graphics plane before to run pipelines to display video:

./init_7611_edid.sh
echo 0 > /sys/devices/platform/vpss/graphics0/enabled

Some of these pipelines have to be run on the target board and other in your computer, they are distinguished by the color used to document them, blue pipelines are for the Z3 board, yellow for EVM board and green pipelines have to be run in your PC

DM81xx

Display videotest pattern

gst-launch -v videotestsrc ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60  ! gstperf ! omx_videosink sync=false

Scale the QVGA video test pattern to VGA

gst-launch -v videotestsrc ! 'video/x-raw-yuv,width=320,height=240' ! omx_scaler ! \
'video/x-raw-yuv,width=640,height=480' ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! \
gstperf ! omx_videosink sync=false -v

Encode videotest pattern in H.264 (without container)

gst-launch -v videotestsrc num-buffers=1000 ! omx_h264enc ! gstperf ! filesink location=sample.264

Video Streaming

These instructions show how to do video streaming over the network, a video will be played on the board and viewed on the host. These pipelines use the default port (4951) to send the packets, if you want to change the port number, you have to add the port capability to the udpsink.(e.g udpsink port=$PORT host=$CLIENT_IP)

RTP

Stream H.264 video test pattern over RTP

  • Server: DM81xx
CLIENT_IP=10.251.101.58

gst-launch videotestsrc ! omx_h264enc ! queue ! h264parse !  gstperf ! rtph264pay ! udpsink host=$CLIENT_IP -v

This pipeline is going to print the capabilities of each element's pad thanks to the -v option. The pipeline should print something similar to this output:

.
.
.
/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, 
encoding-name=(string)H264, sprop-parameter-sets=(string)J0KAKouVAoPy, payload=(int)96, ssrc=(uint)951364645, 
clock-base=(uint)2084568768, seqnum-base=(uint)10992                                              
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
/GstPipeline:pipeline0/GstRtpH264Pay:rtph264pay0.GstPad:src: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000,
encoding-name=(string)H264, sprop-parameter-sets=(string)\"J0KAKouVAoPy\\,KN4BriA\\=\", payload=(int)96, ssrc=(uint)951364645, 
clock-base=(uint)2084568768, seqnum-base=(uint)10992                        
New clock: GstSystemClock
/GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, 
encoding-name=(string)H264, sprop-parameter-sets=(string)\"J0KAKouVAoPy\\,KN4BriA\\=\", payload=(int)96, ssrc=(uint)951364645, 
clock-base=(uint)2084568768, seqnum-base=(uint)10992                             
frames: 68      current: 67.90   average: 67.90 arm-load: 0   
.
.
.                                                                       

You need the udpsink:sink capabilities for the client pipeline.

  • Client: Ubuntu PC

Copy the udpsink caps given by the server pipeline, erase the spaces and the (uint) cast.

CAPS=application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264,\
sprop-parameter-sets=(string)"J0KAKouVAoPy\,KN4BriA\=",payload=(int)96,ssrc=951364645,\
clock-base=2084568768,seqnum-base=10992

PORT=4951

gst-launch udpsrc port=$PORT ! $CAPS ! rtph264depay ! queue ! ffdec_h264 ! xvimagesink sync=false -v

Stream H.264 encoded video file over RTP
These pipelines use a video file and send it over the network. Here you can use any file encoded in H.264.

  • Server: DM81xx
CLIENT_IP=10.251.101.58

FILE=sintel_trailer-1080p.mp4

gst-launch filesrc location=$FILE  ! qtdemux  ! queue ! h264parse !  gstperf ! rtph264pay ! udpsink host=$CLIENT_IP -v

As before, you need the udpsink:sink capabilities for the client pipeline.

  • Client: Ubuntu PC

Copy the udpsink caps given by the server pipeline, erase the spaces and the (uint) cast.

CAPS=application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264,\
sprop-parameter-sets=(string)\"Z2QAMqw05gHgCJ+WEAAAAwAQAAADAwDxgxmg\\,aOl4TLIs\",payload=(int)96,\
ssrc=2152503956,clock-base=4043051310,seqnum-base=10306

PORT=4951

gst-launch udpsrc port=$PORT ! $CAPS ! rtph264depay ! queue ! ffdec_h264 ! xvimagesink sync=false -v

DM8168

Live Preview 1080p@60

Z3 board:

gst-launch omx_camera  ! "video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=60/1, buffer-count-requested=4" ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false

without omx_scaler we found a lower framerate:

gst-launch omx_camera ! "video/x-raw-yuv, format=(fourcc)YUY2, width=1920, height=1080, framerate=60/1, buffer-count-requested=4" ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false

EVM board:

gst-launch omx_camera  ! "video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=60/1, buffer-count-requested=4" ! omx_scaler ! omx_tvp ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false

without omx_scaler we found a lower framerate:

gst-launch omx_camera ! "video/x-raw-yuv, format=(fourcc)YUY2, width=1920, height=1080, framerate=60/1, buffer-count-requested=4" ! omx_tvp ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! omx_videosink sync=false

Video Encoding H264 1080@30fps

Z3 board:

gst-launch -e omx_camera output-buffers=10 skip-frames=1 !  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10 ! gstperf print-arm-load=true print-fps=true ! \ 
omx_h264enc force-idr-period=23 i-period=23 bitrate=10000000 profile=1 ! queue ! rr_h264parser singleNalu=true ! mp4mux dts-method=0 ! filesink location=test30fps.mp4

EVM board:

gst-launch -e omx_camera output-buffers=10 skip-frames=1 !  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10  ! omx_tvp ! gstperf print-arm-load=true print-fps=true ! \
omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 profile=1 ! queue ! h264parse output-format=0 ! mp4mux dts-method=0 ! filesink location=test.mp4

Video Encoding H264 1080@60fps

Z3 board:

gst-launch -e omx_camera output-buffers=10 !  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)60/1, buffer-count-requested=10  ! gstperf print-arm-load=true print-fps=true ! \
omx_h264enc force-idr-period=46 i-period=46 bitrate=10000000 profile=1 ! queue ! rr_h264parser singleNalu=true ! mp4mux dts-method=0 ! filesink location=test60fps.mp4

EVM board:

gst-launch -e omx_camera output-buffers=10 !  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)60/1, buffer-count-requested=10  ! omx_tvp ! gstperf print-arm-load=true print-fps=true ! \
omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 profile=1 ! queue ! h264parse output-format=0 ! mp4mux dts-method=0 ! filesink location= test.mp4

Encoding: Video (H264) + Audio (AAC) 1080@30fps

EVM board:

gst-launch -e omx_camera skip-frames=1 output-buffers=10 !  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10  ! omx_tvp \
 ! gstperf print-arm-load=true print-fps=true ! omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 profile=1 ! queue  ! h264parse output-format=0 ! mux.video_00 alsasrc  latency-time=20000 \
buffer-time=800000 ! "audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2" !  omx_aacenc output-format=4 ! queue ! aacparse ! \
mux.audio_00 qtmux name=mux ! filesink location=audioVideo.mp4

Encoding: Video (H264) + Audio (AAC) 1080@60fps

EVM board:

gst-launch -e omx_camera output-buffers=10 !  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)60/1, buffer-count-requested=10  ! omx_tvp ! \ 
gstperf print-arm-load=true print-fps=true ! omx_h264enc force-idr-period=10 i-period=10 bitrate=10000000 profile=2 ! queue  ! h264parse output-format=0 ! mux.video_00 alsasrc \
latency-time=20000 buffer-time=800000  ! "audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)48000, channels=(int)2" ! omx_aacenc \
output-format=4 ! queue ! aacparse ! mux.audio_00 qtmux name=mux ! filesink location=audioVideo.mp4

Decoding: Video (H264) + Audio (AAC) 1080@30fps

EVM board:

amixer sset PCM 127
amixer sset 'Line DAC' 118
gst-launch filesrc location= audioVideo.mp4 ! qtdemux name=mux mux.video_00 ! queue  ! h264parse output-format=1 ! omx_h264dec ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_30 ! gstperf print-fps=true print-arm-load=true  ! \
omx_videosink enable-last-buffer=false mux.audio_00 ! queue ! omx_aacdec ! alsasink

Decoding: Video (H264) + Audio (AAC) 1080@60fps

EVM board:

amixer sset PCM 127
amixer sset 'Line DAC' 118
gst-launch filesrc location= audioVideo.mp4 ! qtdemux name=mux mux.video_00 ! queue  ! h264parse output-format=1 ! omx_h264dec ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf print-fps=true print-arm-load=true  ! \
omx_videosink enable-last-buffer=false mux.audio_00 ! queue ! omx_aacdec ! alsasink

RTSP - Video H264 1080@30fps

Z3 board:

rr_rtsp_server " ( omx_camera skip-frames=1 output-buffers=10  ! video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=(fraction)30/1, buffer-count-requested=10 ! omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 profile=1 ! \
gstperf print-arm-load=true print-fps=true ! queue ! video/x-h264, width=(int)1920, height=(int)1080, stream-format=(string)byte-stream, alignment=(string)nal ! rtph264pay name=pay0 )"

EVM board:

rr_rtsp_server " ( omx_camera skip-frames=1 output-buffers=10  ! video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=(fraction)30/1, buffer-count-requested=10 ! omx_tvp ! omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 \
profile=1 ! gstperf print-arm-load=true print-fps=true ! queue ! video/x-h264, width=(int)1920, height=(int)1080, stream-format=(string)byte-stream, alignment=(string)nal ! rtph264pay name=pay0 )"

Host side

gst-launch-0.10 rtspsrc location=rtsp://<IPADDRESS>:/test ! rtph264depay ! queue ! ffdec_h264 ! xvimagesink -v

Using the Z3 board to receive the streaming:

gst-launch rtspsrc location=rtsp://<SERVERIPADDRESS>:/test ! rtph264depay ! queue ! h264parse access-unit=true ! queue ! omx_h264dec ! omx_scaler ! queue ! omx_ctrl display-mode=OMX_DC_MODE_1080P_30 ! gstperf print-fps=true print-arm-load=true \
! omx_videosink sync=false enable-last-buffer=false

RTSP - Video H264 1080@60fps

Z3 board:

rr_rtsp_server " ( omx_camera output-buffers=10  ! video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=(fraction)60/1, buffer-count-requested=10 ! omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 profile=1 ! \
gstperf print-arm-load=true print-fps=true ! queue ! video/x-h264, width=(int)1920, height=(int)1080, stream-format=(string)byte-stream, alignment=(string)nal ! rtph264pay name=pay0 )"

EVM board:

rr_rtsp_server " ( omx_camera output-buffers=10  ! video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=(fraction)60/1, buffer-count-requested=10 ! omx_tvp ! omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 \
profile=1 ! gstperf print-arm-load=true print-fps=true ! queue ! video/x-h264, width=(int)1920, height=(int)1080, stream-format=(string)byte-stream, alignment=(string)nal ! rtph264pay name=pay0 )"

Host side

gst-launch-0.10 rtspsrc location=rtsp://<IPADDRESS>:/test ! rtph264depay ! queue ! ffdec_h264 ! xvimagesink -v

Using the Z3 board to receive the streaming:

gst-launch rtspsrc location=rtsp://<SERVERIPADDRESS>:/test ! rtph264depay ! queue ! h264parse access-unit=true ! queue ! omx_h264dec ! omx_scaler ! queue ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf print-fps=true print-arm-load=true \
! omx_videosink sync=false enable-last-buffer=false


RTSP - Video (H264) + Audio (AAC) 1080@30fps

Z3 board:

rr_rtsp_server " ( omx_camera skip-frames=1 output-buffers=10  ! video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=(fraction)30/1, buffer-count-requested=10 ! omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 \
profile=1 ! gstperf print-arm-load=true print-fps=true ! queue ! video/x-h264, width=(int)1920, height=(int)1080, stream-format=(string)byte-stream, alignment=(string)nal ! rtph264pay name=pay0 pt=96 alsasrc latency-time=20000 buffer-time=800000 \
! audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)48000, channels=(int)2 ! omx_aacenc output-format=4 ! queue ! aacparse ! rtpmp4apay name=pay1 pt=97 ) "

EVM board:

rr_rtsp_server " ( omx_camera skip-frames=1 output-buffers=10  ! video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=(fraction)30/1, buffer-count-requested=10 ! omx_tvp ! omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 \
profile=1 ! gstperf print-arm-load=true print-fps=true ! queue ! video/x-h264, width=(int)1920, height=(int)1080, stream-format=(string)byte-stream, alignment=(string)nal ! rtph264pay name=pay0 pt=96 alsasrc latency-time=20000 buffer-time=800000 \
! audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)48000, channels=(int)2 ! omx_aacenc output-format=4 ! queue ! aacparse ! rtpmp4apay name=pay1 pt=97 ) "

Host side

Please use VLC

RTSP - Video (H264) + Audio (AAC) 1080@60fps

Z3 board:

rr_rtsp_server " ( omx_camera output-buffers=10  ! video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=(fraction)60/1, buffer-count-requested=10 ! omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 profile=1 \
! gstperf print-arm-load=true print-fps=true ! queue ! video/x-h264, width=(int)1920, height=(int)1080, stream-format=(string)byte-stream, alignment=(string)nal ! rtph264pay name=pay0 pt=96 alsasrc latency-time=20000 buffer-time=800000 \
! audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)48000, channels=(int)2 ! omx_aacenc output-format=4 ! queue ! aacparse ! rtpmp4apay name=pay1 pt=97 ) "

EVM board:

rr_rtsp_server " ( omx_camera output-buffers=10  ! video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=(fraction)60/1, buffer-count-requested=10 ! omx_tvp ! omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 \
profile=1 ! gstperf print-arm-load=true print-fps=true ! queue ! video/x-h264, width=(int)1920, height=(int)1080, stream-format=(string)byte-stream, alignment=(string)nal ! rtph264pay name=pay0 pt=96 alsasrc latency-time=20000 buffer-time=800000 \
! audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, depth=(int)16, rate=(int)48000, channels=(int)2 ! omx_aacenc output-format=4 ! queue ! aacparse ! rtpmp4apay name=pay1 pt=97 ) "

Host side

Please use VLC


Dual capture: Video recording (H264) 1080@30fps | taking snapshots JPEG - EVM & Z3 board

Recording

gst-launch -e v4l2src device=/dev/video0 num-buffers=1500 always-copy=false queue-size=8  ! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' !  \
omxbufferalloc numBuffers=12 ! omx_h264enc output-buffers=16 input-buffers=10 force-idr-period=30 i-period=30 bitrate=16000000  ! queue ! rr_h264parser ! mp4mux dts-method=0 ! filesink location= video.mp4  

Snapshots

gst-launch -e v4l2src device=/dev/video5 num-buffers=1 always-copy=false queue-size=8  ! 'video/x-raw-yuv,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' ! \
rrbufferalloc numBuffers=10 ! queue  ! ffmpegcolorspace ! jpegenc ! jifmux ! filesink location=snapshot.jpeg

Dual H264 encoding 1080p@30fps - single Capture

Z3 board:

gst-launch -e omx_camera num-buffers=2000 output-buffers=10 skip-frames=1 ! video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10 ! tee \
name=t ! queue ! gstperf ! omx_h264enc output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000 ! rr_h264parser singleNalu=true  ! qtmux dts-method=0  ! filesink \
location=videoA.mp4 t. ! queue ! gstperf ! omx_h264enc output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000 ! rr_h264parser singleNalu=true  ! \
qtmux dts-method=0  ! filesink location=videoB.mp4

Dual Capture - Dual H264 encoding 1080p@30fps/60fps

Z3 board:

gst-launch -e omx_camera num-buffers=2000 output-buffers=10 skip-frames=1 ! video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10 \
 ! gstperf ! omx_h264enc output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000 ! rr_h264parser singleNalu=true  ! qtmux dts-method=0  ! filesink location=videoA.mp4 v4l2src \ 
device=/dev/video5 always-copy=false queue-size=8  ! 'video/x-raw-yuv,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' !  omxbufferalloc numBuffers=8 ! gstperf ! omx_h264enc \
output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000 ! rr_h264parser singleNalu=true  ! qtmux dts-method=0  ! filesink location=videoB.mp4

Dual Capture - Dual H264 encoding 1080p@30fps/60fps - Dual RTP streaming

Here you will find an example but likely when doing streaming of your own pipeline you will need to follow the steps [ here ] to get your correct Caps, after that run a similar pipeline to this one:

Z3 board:

PORTA=3001
PORTB=3002
IP=<IP addess of your host machine>

gst-launch -e omx_camera output-buffers=10 skip-frames=1 ! video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10 ! gstperf ! \
omx_h264enc output-buffers=6 input-buffers=4 force-idr-period=16 i-period=16 bitrate=16000000 ! rtph264pay ! udpsink host=10.251.101.18 port=3001 v4l2src device=/dev/video5 always-copy=false\
 queue-size=8  ! 'video/x-raw-yuv,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' !  omxbufferalloc numBuffers=8 ! gstperf ! omx_h264enc output-buffers=6 input-buffers=4 \
force-idr-period=16 i-period=16 bitrate=16000000 ! rtph264pay ! udpsink host=$IP port=3002 -v

Host side:

gst-launch-0.10 udpsrc port=$PORTB ! 'application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)"J0KAKouVAPAET8qAAA\=\=\,KN4BriAA", \
payload=(int)96, ssrc=(uint)1438616454, clock-base=(uint)1676303462, seqnum-base=(uint)64771' ! rtph264depay ! queue ! ffdec_h264 ! fpsdisplaysink sync=false udpsrc port=$PORTA ! 'application/x-rtp, \
media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)"J0KAKouVAPAET8qAAA\=\=\,KN4BriAA", payload=(int)96, ssrc=(uint)3331867104, clock-base=(uint)3123811109, \
seqnum-base=(uint)15982' ! rtph264depay ! queue ! ffdec_h264 ! fpsdisplaysink sync=false

VL2SRC video playback / encode pipelines (Tested on Z3 board)

V4L2src capture + V4L2 sink display:

gst-launch v4l2src always-copy=false queue-size=12 ! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' ! omxbufferalloc numBuffers=12 ! omx_scaler ! gstperf ! v4l2sink sync=false

V4L2src capture + V4L2 sink display (1% average ARM consumption by removing omx_scaler element):

gst-launch v4l2src always-copy=false queue-size=12 ! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' ! omxbufferalloc numBuffers=12 ! gstperf ! v4l2sink sync=false

V4L2src capture + OMX sink display:

gst-launch v4l2src always-copy=false queue-size=12 ! 'video/x-raw-yuv-strided,format=(fourcc)NV12,width=1920,height=1080,framerate=(fraction)60/1' ! omxbufferalloc numBuffers=12 ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf ! omx_videosink sync=false

OMX camera capture + OMX sink display:

gst-launch omx_camera  ! "video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=60/1, buffer-count-requested=4" ! omx_scaler  !  omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf print-fps=true print-arm-load=true  ! omx_videosink sync=false

V4L2src capture + H264 encoding:

gst-launch -e v4l2src always-copy=false queue-size=12 ! video/x-raw-yuv-strided, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)60/1, buffer-count-requested=12 ! omxbufferalloc numBuffers=12 ! gstperf print-arm-load=true print-fps=true \
! queue ! omx_h264enc i-period=5 force-idr-period=120 ! h264parse output-format=0 ! mp4mux dts-method=0 ! filesink location= test.mp4

DM8148

Live Preview 1080p@60

LCD:

./etc/init.d/change_display lcd
echo 0 > /sys/devices/platform/vpss/graphics0/enabled
gst-launch omx_camera  ! "video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=60/1, buffer-count-requested=4" ! omx_mdeiscaler name=d d.src_00 !  'video/x-raw-yuv, width=(int)800, height=(int)480' ! omx_tvp ! \
 omx_ctrl display-mode=OMX_DC_MODE_1080P_60 display-device=LCD ! gstperf print-fps=true print-arm-load=true  ! omx_videosink display-device=LCD sync=false d.src_01  ! fakesink silent=true -v


HDMI:

./etc/init.d/change_display hdmi
echo 0 > /sys/devices/platform/vpss/graphics0/enabled
gst-launch omx_camera  ! "video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=60/1, buffer-count-requested=4" ! omx_scaler  ! omx_tvp  ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf print-fps=true \
print-arm-load=true  ! omx_videosink sync=false

Live Preview 1080p@30

LCD:

./etc/init.d/change_display lcd
echo 0 > /sys/devices/platform/vpss/graphics0/enabled
gst-launch omx_camera skip-frames=1   ! "video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=30/1, buffer-count-requested=4" ! omx_mdeiscaler name=d d.src_00 !  'video/x-raw-yuv, width=(int)800, height=(int)480'\
 ! omx_tvp ! omx_ctrl display-mode=OMX_DC_MODE_1080P_30 display-device=LCD ! gstperf print-fps=true print-arm-load=true  ! omx_videosink display-device=LCD sync=false d.src_01  ! fakesink silent=true -v


HDMI:

./etc/init.d/change_display hdmi
echo 0 > /sys/devices/platform/vpss/graphics0/enabled
gst-launch omx_camera skip-frames=1  ! "video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=60/1, buffer-count-requested=4" ! omx_scaler  ! omx_tvp  ! omx_ctrl display-mode=OMX_DC_MODE_1080P_30 ! gstperf \
print-fps=true print-arm-load=true  ! omx_videosink sync=false

Encoding: Video (H264) + Audio (AAC) 1080@30fps

EVM board:

echo 100 > /proc/sys/vm/dirty_expire_centisecs
gst-launch -e omx_camera skip-frames=1 output-buffers=10 !  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)30/1, buffer-count-requested=10  ! omx_tvp ! gstperf print-arm-load=true print-fps=true ! \
omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 profile=1 ! queue  ! h264parse output-format=0 ! mux.video_00 alsasrc  latency-time=20000 buffer-time=800000 ! "audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, \
width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2" !  omx_aacenc output-format=4 ! queue ! aacparse ! mux.audio_00 qtmux name=mux ! filesink location=audioVideo.mp4

Encoding: Video (H264) + Audio (AAC) 1080@60fps

EVM board:

echo 100 > /proc/sys/vm/dirty_expire_centisecs
gst-launch -e omx_camera output-buffers=10 !  video/x-raw-yuv, format=\(fourcc\)NV12, width=1920, height=1080, framerate=\(fraction\)60/1, buffer-count-requested=10  ! omx_tvp ! gstperf print-arm-load=true print-fps=true ! omx_h264enc \
force-idr-period=4 i-period=4 bitrate=10000000 profile=1 ! queue  ! h264parse output-format=0 ! mux.video_00 alsasrc  latency-time=20000 buffer-time=800000 ! "audio/x-raw-int, endianness=(int)1234, signed=(boolean)true, width=(int)16, \
depth=(int)16, rate=(int)44100, channels=(int)2" !  omx_aacenc output-format=4 ! queue ! aacparse ! mux.audio_00 qtmux name=mux ! filesink location=audioVideo.mp4

Decoding: Video (H264) + Audio (AAC) 1080@30fps

LCD:

./etc/init.d/change_display lcd
echo 0 > /sys/devices/platform/vpss/graphics0/enabled
amixer sset PCM 127
amixer sset 'Line DAC' 118
gst-launch filesrc location= audioVideo.mp4 ! qtdemux name=mux mux.video_00 ! queue  ! h264parse output-format=1 ! omx_h264dec ! omx_mdeiscaler name=d d.src_00 !  'video/x-raw-yuv, width=(int)800, height=(int)480'  ! omx_ctrl \
display-mode=OMX_DC_MODE_1080P_30 display-device=LCD !  omx_videosink display-device=LCD enable-last-buffer=false mux.audio_00 ! queue ! omx_aacdec ! alsasink d.src_01  ! fakesink silent=true -v

HDMI:

./etc/init.d/change_display hdmi
echo 0 > /sys/devices/platform/vpss/graphics0/enabled
amixer sset PCM 127
amixer sset 'Line DAC' 118
gst-launch filesrc location= audioVideo.mp4 ! qtdemux name=mux mux.video_00 ! queue  ! h264parse output-format=1 ! omx_h264dec ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_30 ! omx_videosink enable-last-buffer=false \
mux.audio_00 ! queue ! omx_aacdec ! alsasink

Decoding: Video (H264) + Audio (AAC) 1080@60fps

LCD:

./etc/init.d/change_display lcd
echo 0 > /sys/devices/platform/vpss/graphics0/enabled
amixer sset PCM 127
amixer sset 'Line DAC' 118
gst-launch filesrc location= audioVideo.mp4 ! qtdemux name=mux mux.video_00 ! queue  ! h264parse output-format=1 ! omx_h264dec ! omx_mdeiscaler name=d d.src_00 !  'video/x-raw-yuv, width=(int)800, height=(int)480'  ! omx_ctrl \
display-mode=OMX_DC_MODE_1080P_60 display-device=LCD !  omx_videosink display-device=LCD enable-last-buffer=false mux.audio_00 ! queue ! omx_aacdec ! alsasink d.src_01  ! fakesink silent=true -v

HDMI:

./etc/init.d/change_display hdmi
echo 0 > /sys/devices/platform/vpss/graphics0/enabled
amixer sset PCM 127
amixer sset 'Line DAC' 118
gst-launch filesrc location= audioVideo.mp4 ! qtdemux name=mux mux.video_00 ! queue  ! h264parse output-format=1 ! omx_h264dec ! omx_scaler ! omx_ctrl display-mode=OMX_DC_MODE_1080P_60 ! gstperf print-fps=true print-arm-load=true  ! \
omx_videosink enable-last-buffer=false mux.audio_00 ! queue ! omx_aacdec ! alsasink

RTSP - Video H264 1080@30fps

EVM board:

rr_rtsp_server " ( omx_camera skip-frames=1 output-buffers=10  ! video/x-raw-yuv, format=(fourcc)NV12, width=1920, height=1080, framerate=(fraction)30/1, buffer-count-requested=10 ! omx_tvp ! omx_h264enc force-idr-period=4 i-period=4 bitrate=10000000 \
profile=1 ! gstperf print-arm-load=true print-fps=true ! queue ! video/x-h264, width=(int)1920, height=(int)1080, stream-format=(string)byte-stream, alignment=(string)au ! rtph264pay name=pay0 )"

Host side

gst-launch-0.10 rtspsrc location=rtsp://<IPADDRESS>:/test ! rtph264depay ! queue ! ffdec_h264 ! xvimagesink -v

Using another DM8148 board to receive the streaming and display it on LCD:

gst-launch rtspsrc location=rtsp://<IPADDRESS>:/test ! rtph264depay ! queue ! h264parse access-unit=true ! queue ! omx_h264dec ! omx_mdeiscaler name=d d.src_00 ! 'video/x-raw-yuv, width=(int)800, height=(int)480' ! queue ! omx_ctrl \
display-mode=OMX_DC_MODE_1080P_30  display-device=LCD ! gstperf print-fps=true print-arm-load=true ! omx_videosink sync=false enable-last-buffer=false display-device=LCD d.src_01 ! fakesink silent=true