3.1 Using GStreamer

GStreamer must be initialized before using it. Initialization loads the GStreamer libraries and plug-ins.

(require gstreamer)
 
(unless (gst-initialized?)
  (if (gst-initialize)
      (displayln (gst-version-string))
      (error "Could not load GStreamer")))

This initializes GStreamer if it hasn’t already been loaded, and prints its version, or raises an error if GStreamer could not be initialized.

From here, a GStreamer pipeline is constructed by linking together elements. Create an element by using an element factory to make elements.

(define test-pattern
  (element-factory%-make "videotestsrc"))
 
(define preview
  (element-factory%-make "osxvideosink"))
 
(define my-pipeline
  (pipeline%-compose "my-pipeline"
                     test-pattern
                     preview))

This code creates two elements: a source that generates test video data and a native macOS video sink. It then composes a pipeline by linking those two elements together. Every GStreamer application needs a pipeline and pipeline%-compose is a convenient mechanism for quickly creating them.

From here the pipeline can be played by setting its state:

(send my-pipeline set-state 'playing)

This will draw a new window where a test video signal of SMPTE color bars will be displayed.

Shut down the pipeline by setting its state again:

(send my-pipeline set-state 'null)

A quick way to create a pipeline is by using parse/launch to parse a pipeline description into an element.

(define trailer-uri
  "http://movietrailers.apple.com/movies/marvel/thor-ragnarok/thor-ragnarok-trailer-1_h720p.mov")
 
(define movie-trailer
  (parse/launch (format "playbin uri=~a" trailer-uri)))
 
(send movie-trailer play!)

A playbin element is used to quickly play media from a URI. In addition to parse/launch, the gstreamer module provides a number of utilities and helpers for working with Common Elements for building basic pipelines.

 
var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?f1ba5b4a33d29d84db69f029b9ace483"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();