mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-20 00:31:13 +00:00
Adding sample (sample/HelloWorld.cs)
git-svn-id: svn://anonsvn.mono-project.com/source/branches/abock/gstreamer-sharp@61892 e3ebcda4-bce8-0310-ba0a-eca2169e7518
This commit is contained in:
parent
d09ded2065
commit
3511b39930
1 changed files with 121 additions and 0 deletions
121
sample/HelloWorld.cs
Normal file
121
sample/HelloWorld.cs
Normal file
|
@ -0,0 +1,121 @@
|
|||
using System;
|
||||
using Gst;
|
||||
using GLib;
|
||||
using System.Reflection;
|
||||
|
||||
public class HelloWorld {
|
||||
|
||||
MainLoop loop;
|
||||
Element pipeline, source, parser, decoder, conv, identity, sink;
|
||||
|
||||
bool BusCall(Bus bus, Message message) {
|
||||
|
||||
switch(message.Type) {
|
||||
case MessageType.Error:
|
||||
string err = String.Empty;
|
||||
message.ParseError(out err);
|
||||
Console.WriteLine ("Gstreamer error: {0}", err);
|
||||
loop.Quit();
|
||||
break;
|
||||
case MessageType.Eos:
|
||||
Console.WriteLine("End-of-stream");
|
||||
loop.Quit();
|
||||
break;
|
||||
default:
|
||||
//Console.WriteLine("Entered BusCall:\t" + message.Type);
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void Main(string [] args) {
|
||||
new HelloWorld(args);
|
||||
}
|
||||
|
||||
public HelloWorld(string [] args) {
|
||||
|
||||
// Initializes Gstreamer library
|
||||
Application.Init();
|
||||
|
||||
loop = new MainLoop();
|
||||
|
||||
// create elements
|
||||
if((pipeline = new Pipeline("audio-player")) == null)
|
||||
{
|
||||
Console.WriteLine("Could not create audio player pipeline");
|
||||
}
|
||||
|
||||
if((source = ElementFactory.Make("filesrc", "file-source")) == null)
|
||||
{
|
||||
Console.WriteLine("Could not create file-source");
|
||||
}
|
||||
|
||||
parser = ElementFactory.Make("oggdemux", "ogg-parser");
|
||||
decoder = ElementFactory.Make("vorbisdec", "vorbis-decoder");
|
||||
conv = ElementFactory.Make("audioconvert", "converter");
|
||||
identity = ElementFactory.Make("identity", "identitye");
|
||||
sink = ElementFactory.Make("alsasink", "alsa-output");
|
||||
|
||||
// set source to read the filename from command line argdument
|
||||
source.SetProperty("location", args[0]);
|
||||
|
||||
Bin bin = (Bin) pipeline;
|
||||
bin.Bus.AddWatch(new BusFunc(BusCall));
|
||||
|
||||
bin.Add(source);
|
||||
bin.Add(parser);
|
||||
bin.Add(decoder);
|
||||
bin.Add(conv);
|
||||
bin.Add(identity);
|
||||
bin.Add(sink);
|
||||
|
||||
|
||||
if(!source.Link(parser))
|
||||
Console.WriteLine("link failed");
|
||||
if(!decoder.Link(conv))
|
||||
Console.WriteLine("link failed between decoder and converter");
|
||||
if(!conv.Link(identity))
|
||||
Console.WriteLine("link failed between converter and identity");
|
||||
if(!identity.Link(sink))
|
||||
Console.Error.WriteLine("link failed between identity and sink");
|
||||
|
||||
parser.PadAdded += new PadAddedHandler(OnPadAdded);
|
||||
|
||||
Console.WriteLine("Adding custom event");
|
||||
|
||||
|
||||
identity.AddCustomEvent("handoff", new MyEventHandler(handoff));
|
||||
|
||||
pipeline.SetState(State.Playing);
|
||||
Console.WriteLine("Playing [" + args[0] + "]");
|
||||
|
||||
|
||||
loop.Run();
|
||||
|
||||
pipeline.SetState(State.Null);
|
||||
|
||||
pipeline.Dispose();
|
||||
}
|
||||
|
||||
delegate void MyEventHandler(object sender, Gst.Buffer buf);
|
||||
|
||||
ulong count = 0;
|
||||
|
||||
|
||||
void handoff(object i, Gst.Buffer buf) {
|
||||
Console.WriteLine(buf.Duration + "\t" + buf.Timestamp);
|
||||
/*
|
||||
ulong newcount = buf.Timestamp / buf.Duration * 20;
|
||||
if(newcount > count)
|
||||
{
|
||||
Console.Write("*");
|
||||
count = newcount;
|
||||
}
|
||||
*/
|
||||
}
|
||||
void OnPadAdded(object sender, PadAddedArgs e) {
|
||||
Console.WriteLine("Entered OnPadAdded");
|
||||
Pad sinkpad = decoder.GetPad("sink");
|
||||
e.Pad.Link(sinkpad);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue