wiki:buildroot/gstreamer

Version 1 (modified by Tim Harvey, 3 years ago) (diff)

initial page

Introduction to GStreamer in Buildroot

An embedded solution may require a custom multimedia streaming solution. Buildroot and GStreamer makes for an efficient lightweight solution.

This guide will walk you through the necessary steps to create a bootable image containing the ability to:

  • capture/playback/encode/decode Video
  • capture/playback/encode/decode Audio

Building the demo image

Recommended hardware

  • Ventana board with video input and video output (ie GW5404)
  • 1080p HDMI monitor
  • Mini HDMI cable to HDMI (for connecting the board and monitor together)
  • Power cables

Building

Procedure:

# clone buildroot
git clone https://github.com/buildroot/buildroot.git
cd buildroot
# fetch and apply patch that adds ventana defconfig files
wget http://trac.gateworks.com/raw-attachment/wiki/buildroot/gstreamer/0001-configs-add-various-Gateworks-Ventana-configs.patch
wget http://trac.gateworks.com/raw-attachment/wiki/buildroot/gstreamer/0002-board-gateworks-add-overlay-for-Gateworks-Ventana-bo.patch
git am *.patch
# build the gwventana-gst image
make distclean
make imx6-gwventana-gst_defconfig
make
ls output/images/

The patch adds the following:

  • board/gateworks/ventana/rootfs_overlay/bin/media-ctl-setup - media-ctl helper script for configuring video capture devices
  • configs/imx6-gwventana-gst_defconfig - defconfig for GStreamer based image

You can use the following filesystem images:

  • output/images/rootfs.ubi for 2K page size flash geometries (256MB flash or newer 2GiB flash parts)
    • if you are looking for a ubi image suitable for 4K page size flash geometries (the Micron 2GiB part) change the following via menuconfig:
      BR2_TARGET_ROOTFS_UBIFS_LEBSIZE=0x3e000
      BR2_TARGET_ROOTFS_UBIFS_MINIOSIZE=0x1000
      BR2_TARGET_ROOTFS_UBIFS_MAXLEBCNT=8192
      BR2_TARGET_ROOTFS_UBI_PEBSIZE=0x40000
      BR2_TARGET_ROOTFS_UBI_SUBSIZE=0
      
  • output/images/rootfs.tar - refer to this page to create a bootable block storage device using the created tarball
  • output/images/sdcard.img - disk image suitable for copying to a removalbe block storage device (see linux/blockdev)

Running the Demos

Login as "root"

Example Demos:

  • Video Display of test pattern:
    gst-launch-1.0 videotestsrc ! autovideosink
    
  • Capture, encode, and stream Analog Video
    media-ctl-setup adv7180 > setup
    . ./setup
    gst-launch-1.0 v4l2src device=$DEVICE ! \
            $GST_CONVERT output-io-mode=dmabuf-import ! \
            v4l2h264enc output-io-mode=dmabuf-import ! \
            rtph264pay ! udpsink host=$SERVER port=5000
    
    • view on $SERVER with:
      gst-launch-1.0 udpsrc port=5000 caps=application/x-rtp,payload=96 ! rtph264depay ! decodebin ! autovideosink
      
  • Capture, encode, save Analog audio:
    amixer -c 1 sset "Capture Mux" LINE_IN # LINE_IN vs MIC_IN, default MIC_IN
    amixer -c 1 sset "Capture" 8 # 0-15, default 0
    gst-launch-1.0 alsasrc device="sysdefault:CARD=sgtl5000audio" ! audioconvert ! filesink location=file.mp3
    
  • Decode and Playback audio to Analog out:
    gst-launch-1.0 filesrc location=file.mp3 ! mpegaudioparse ! mpg123audiodec ! alsasink device="sysdefault:CARD=sgtl5000audio"
    
  • Capture, encode, and stream Analog Audio:
    amixer -c 1 sset "Capture Mux" LINE_IN # LINE_IN vs MIC_IN, default MIC_IN
    amixer -c 1 sset "Capture" 8 # 0-15, default 0
    gst-launch-1.0 -v alsasrc device="sysdefault:CARD=sgtl5000audio" ! \
              audioconvert ! \
              lamemp3enc ! \
              rtpmpapay ! udpsink host=$SERVER port=5000
    
    • play on $SERVER with:
      gst-launch-1.0 udpsrc port=5000 caps=application/x-rtp,payload=96 ! rtpmpadepay ! decodebin ! autoaudiosink
      
  • Stream, decode, playback audio:
    gst-launch-1.0 playbin uri=http://server/myfavoritesong.mp3
    

Conclusion

This concludes how to build and install the GStreamer demo in buildroot. Using "make menuconfig" many additional applications and gstreamer plugins can be built into buildroot for other needs.