gstreamer/subprojects/gstreamer-sharp/samples/PlaybackTutorial6.cs
Akkariin Meiko 27c4ec74a1 Update
2022-03-12 03:16:09 +08:00

91 lines
2.4 KiB
C#

// Authors
// Copyright (C) 2014 Stephan Sundermann <stephansundermann@gmail.com>
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);
}
}
}