// Authors // Copyright (C) 2014 Stephan Sundermann using System; using Gst; using System.Runtime.InteropServices; using System.Text; namespace GstreamerSharp { class Playback { const uint PlayFlagsVis = (1 << 3); static Element Pipeline; // Return TRUE if this is a Visualization element static bool FilterVisFeatures (PluginFeature feature) { if (!(feature is ElementFactory)) return false; var factory = (ElementFactory)feature; if (!factory.GetMetadata (Gst.Constants.ELEMENT_METADATA_KLASS).Contains ("Visualization")) return false; return true; } public static void Main (string[] args) { ElementFactory selectedFactory = null; // Initialize GStreamer Application.Init (ref args); // Get a list of all visualization plugins var list = Registry.Get().FeatureFilter (FilterVisFeatures, false); // Print their names Console.WriteLine ("Available visualization plugins:"); foreach (var walk in list) { var factory = (ElementFactory)walk; var name = factory.Name; Console.WriteLine(" {0}", name); if (selectedFactory == null && name.StartsWith ("goom")) { selectedFactory = factory; } } // Don't use the factory if it's still empty // e.g. no visualization plugins found if (selectedFactory == null) { Console.WriteLine ("No visualization plugins found!"); return; } // We have now selected a factory for the visualization element Console.WriteLine ("Selected '{0}'", selectedFactory.Name); var visPlugin = selectedFactory.Create (); if (visPlugin == null) return; // Build the pipeline Pipeline = Parse.Launch ("playbin uri=http://1live.akacast.akamaistream.net/7/706/119434/v1/gnl.akacast.akamaistream.net/1live"); // Set the visualization flag var flags = (uint)Pipeline ["flags"]; flags |= PlayFlagsVis; Pipeline ["flags"] = flags; // set vis plugin for playbin Pipeline ["vis-plugin"] = visPlugin; // Start playing var ret = Pipeline.SetState (State.Playing); if (ret == StateChangeReturn.Failure) { Console.WriteLine ("Unable to set the pipeline to the playing state."); return; } // Wait until error or EOS var bus = Pipeline.Bus; var msg = bus.TimedPopFiltered (Constants.CLOCK_TIME_NONE, MessageType.Error | MessageType.Eos); // Free resources Pipeline.SetState (State.Null); } } }