GStreamer camera streaming on i.MX6

Published on September 29, 2012

Archived Notice

This article has been archived and may contain broken links, photos and out-of-date information. If you have any questions, please Contact Us.

This is just a quick post highlighting how a few simple components can be used to stream video from the camera on an i.MX6 over the network.

While working with one of our i.MX53 customers on a video streaming application, we had reason to test the camera interface, video encoding, and streaming on i.MX6. Our customer brought us a couple of command lines that worked well on his laptop:

Laptop server command-line

On the server side, the pipeline reads from the camera (v4l2src), uses jpegenc and then routes it to a TCP server on port 5000:

~/$ gst-launch v4l2src device=/dev/video0
   ! videoscale
   ! video/x-raw-yuv,width=640,height=480
   ! ffmpegcolorspace
   ! jpegenc
   ! tcpserversink host=127.0.0.1 port=5000

Laptop client command-line

On the client side, the tcpclientsrc reads from the network port, decodes using jpegdec and sends the output to the display (autovideosink):

~/$ gst-launch tcpclientsrc host=127.0.0.1 port=5000 ! jpegdec ! autovideosink

I just finished participating in a training session by Timesys for distributor FAEs, where they gave a primer on gstreamer and its' use on SABRE Lite.

Amply armed, I was able to take this information and translate it into a fully accelerated pipeline on the SABRE Lite:

i.MX6 server command-line

# gst-launch mfw_v4lsrc capture-width=1280 capture-height=720 capture-mode=4
    ! vpuenc codec=12
    ! tcpserversink host=127.0.0.1 port=5000

Note the use of the two Freescale-provided elements:

  • mfw_v4lsrc - Video For Linux source provided by Freescale for camera input, and
  • vpuenc - Freescale-provided VPU-accelerated encoder

By using this hardware acceleration, CPU utilization on the i.MX6 is less than 5% for this 720P stream and piping the output over 1Gbps ethernet, there is no noticeable latency.

To examine the parameters for gstreamer elements, use the gst-inspect utility:

# gst-inspect mfw_v4lsrc
MFW_GST_V4LSRC_PLUGIN 2.0.8 build on Aug 15 2012 14:09:19.
Factory Details:
  Long name:	v4l2 based camera src
  Class:	Src/Video
  Description:	Capture videos by using csi camera
  Author(s):	Multimedia Team
  Rank:		primary (256)
Plugin Details:
  Name:			v4lsrc.imx
  Description:		v4l2-based csi camera video src
  Filename:		/usr/lib/gstreamer-0.10/libmfw_gst_v4lsrc.so
  Version:		2.0.8
  License:		LGPL
  Source module:	gst-fsl-plugins
  Binary package:	Freescle Gstreamer Multimedia Plugins
  Origin URL:		https://www.freescale.com
...
Element Properties:
...
  capture-mode        : set the capture mode of camera, please check
                        the bsp release notes to decide which value can be applied,
				for example ov5460:
   				ov5640_mode_VGA_640_480 = 0,
				ov5640_mode_QVGA_320_240 = 1,
				ov5640_mode_NTSC_720_480 = 2,
				ov5640_mode_PAL_720_576 = 3,
				ov5640_mode_720P_1280_720 = 4,
				ov5640_mode_1080P_1920_1080 = 5

I hope this miniature example helps kick-start your efforts to build real-world applications using i.MX6 and gstreamer. Contact us, or your local distributor FAE, or Timesys for details of how you can see this in action.