Gstreamer

From ArmadeusWiki
Jump to: navigation, search

Installation

$ make menuconfig
Package Selection for the target  --->
    Audio and video libraries and applications  --->
        ...
        [*] gstreamer
        [*]   require libxml2 for registry and load/save
        -*-   gst-plugins-base  --->
        [*]   gst-plugins-good  --->
        [*]   gst-plugins-bad  --->
        [*]   gst-plugins-ugly  --->

Plugins worth to activate:

  • base:
  • good:
  • bad:
  • ugly:

Usage

Check installed plugins

  • To see all installed plugins:
# gst-inspect
videoscale:  videoscale: Video scaler
queue2:  queue2: Queue               
ffmpegcolorspace:  ffmpegcolorspace: FFMPEG Colorspace converter
audiorate:  audiorate: Audio rate adjuster                      
audioconvert:  audioconvert: Audio converter                    
audioresample:  audioresample: Audio resampler                  
volume:  volume: Volume
...
  • To have more details about one particular plugin (here alsasrc):
# gst-inspect alsasrc
Factory Details:     
  Long name:    Audio source (ALSA)
  Class:        Source/Audio       
  Description:  Read from a sound card via ALSA
  Author(s):    Wim Taymans <wim@fluendo.com>  
  Rank:         primary (256)                  

Plugin Details:
  Name:                 alsa
  Description:          ALSA plugin library
  Filename:             /usr/lib/gstreamer-0.10/libgstalsa.so
  Version:              0.10.25                              
  License:              LGPL                                 
  Source module:        gst-plugins-base                     
  Binary package:       GStreamer Base Plug-ins source release
  Origin URL:           Unknown package origin                
...
<cut>

Audio

  • play a monotic tone to check your sound configuration is working (if not please configure ALSA):
# gst-launch audiotestsrc ! audioconvert ! audioresample ! alsasink
  • same test but with a given sound card (if you have more than one like on the APF6Dev):
# gst-launch audiotestsrc ! audioconvert ! audioresample ! alsasink device='sysdefault:CARD=imxhdmisoc'
  • play a music file (here a .ogg, supposing the libgstogg plugin was installed):
# gst-launch filesrc location=toto.ogg ! decodebin ! audioconvert ! audioresample ! alsasink
  • record a sound from an Input Line/Mic and store it as an uncompressed wav file:
# gst-launch alsasrc ! audioconvert ! audioresample ! wavenc ! filesink location=mic.wav
  • record a sound from an Input Line/Mic and compress it (ogg/worbis):
# gst-launch alsasrc ! audioconvert ! audioresample ! vorbisenc ! oggmux ! filesink location=mic.ogg
  • record a sound from an Input Line/Mic @ 8KHz (16KHz is too CPU consuming on APF27), compress it with Speex and send it to your Host (here 192.168.1.2) at port 6666:
# gst-launch -v alsasrc ! audioconvert ! audioresample ! 'audio/x-raw-int,rate=8000,width=16,channels=1' ! speexenc ! rtpspeexpay ! udpsink host=192.168.1.2 port=6666
  • to live decode the stream on your PC:
$ gst-launch udpsrc port=6666 caps="application/x-rtp, media=(string)audio, clock-rate=(int)16000, encoding-name=(string)SPEEX, encoding-params=(string)1, payload=(int)110" ! gstrtpjitterbuffer ! rtpspeexdepay ! speexdec ! audioconvert ! audioresample ! autoaudiosink
  • to store the stream in Wav format on your PC:
$ gst-launch udpsrc port=6666 caps="application/x-rtp, media=(string)audio, clock-rate=(int)16000, encoding-name=(string)SPEEX, encoding-params=(string)1, payload=(int)110" ! gstrtpjitterbuffer ! rtpspeexdepay ! speexdec ! audioconvert ! audioresample ! wavenc ! filesink location=toto.wav

Video

Plugins

  • You'll need to activate a few plugins in Buildroot menuconfig to play videos with Gstreamer:
Package Selection for the target  --->
    Audio and video libraries and applications  --->
        ...
        -*-   gst-plugins-base  --->
              [*]   ffmpegcolorspace (mandatory for video playback)
              ...
              [*]   playback (mandatory)
        [*]   gst-plugins-good  --->
              [*]   videobox
              [*]   videocrop
        [*]   gst-plugins-bad  --->
              [*]   fbdev

Test installation

  • To test your Gstreamer installation, you need to select a plugin in Buildroot menuconfig:
Package Selection for the target  --->
    Audio and video libraries and applications  --->
        ...
        -*-   gst-plugins-base  --->
              [*]   videotestsrc
  • Then on your APF system, launch the following command:
# gst-launch -v videotestsrc ! videocrop top=42 left=1 right=4 bottom=0 ! fbdevsink

You must see a pattern displayed on the screen if your Gstreamer installation is working well.

Play video

MPEG 1/2
  • If you want to play MPEG 1/2 video, you have to install some plugins in Buildroot menuconfig:
Package Selection for the target  --->
    Audio and video libraries and applications  --->
        ...
        [*]   gst-plugins-bad  --->
              [*]   mpegdemux
              [*]   mpegtsmux
              [*]   mpeg4videoparse
              [*]   mpegvideoparse
        [*]   gst-plugins-ugly  --->
              [*]   mpegaudioparse
              [*]   mpegstream
With FFmpeg decoder
  • In Buildroot menuconfig, select:
Package Selection for the target  --->
    Audio and video libraries and applications  --->
        ...
        -*- ffmpeg  --->
        ...
        [*] gst-ffmpeg
  • On your APF system, play the video with the command:
# gst-launch filesrc location=VIDEO_FILE_LOCATION ! mpegdemux ! ffdec_mpegvideo ! ffmpegcolorspace ! fbdevsink
With mpeg2dec decoder
  • In Buildroot menuconfig, select:
Package Selection for the target  --->
    Audio and video libraries and applications  --->
        ...
        [*]   gst-plugins-ugly  --->
              [*]   mpeg2dec
  • On your APF system, play the video with the command:
# gst-launch filesrc location=VIDEO_FILE_LOCATION ! mpegdemux ! mpeg2dec ! ffmpegcolorspace ! fbdevsink

Take photos

  • You will need some more plugins:
Package Selection for the target  --->
    Audio and video libraries and applications  --->
        ...
        [*]   gst-plugins-good  --->
              [*]   jpeg (JPEG support)
              [*]   png (PNG support)
  • 1 photo:
# gst-launch v4l2src num-buffers=1 ! video/x-raw-rgb,width=1024,height=768 ! ffmpegcolorspace ! pngenc ! filesink location=/root/photo.png
  • lots of photo: :-)
# gst-launch v4l2src ! video/x-raw-rgb,width=1024,height=768 ! ffmpegcolorspace ! pngenc ! multifilesink location=/root/photo%03d.png
Note Note: ffmpegcolorspace should be replaced with videoconvert on recent gstreamer versions (1.10+) and pngenc can be replaced with jpegenc for JPEG format. v4l2src should be replaced by imxv4l2videosrc on Freescale kernels


APF6 with Freescale kernel

On the APF6 with legacy Freescale kernel (apf6legacy_defconfig or apf6legacy-4.1_defconfig), you can use hardware H.264 VPU to decode/encode videos without using CPU.

  • First get some video for test ;-)
# cd /usr/share/
# wget http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_h264.mov
  • Play the H.264 video with hardware decoding and framebuffer rendering:
# gst-launch filesrc location=/usr/share/big_buck_bunny_480p_h264.mov ! qtdemux ! vpudec ! mfw_v4lsink
  • Same with audio:
# gst-launch filesrc location=/usr/share/big_buck_bunny_480p_h264.mov ! qtdemux name=demux \
    demux. ! queue max-size-buffers=0 max-size-time=0 ! vpudec ! mfw_v4lsink \
    demux. ! queue max-size-buffers=0 max-size-time=0 ! decodebin ! audioconvert ! audioresample ! alsasink
  • Display CSI camera input to HDMI monitor with 2D acceleration:
# gst-launch-1.0 imxv4l2videosrc ! imxg2dvideosink

Links