summaryrefslogtreecommitdiff
path: root/samples
diff options
context:
space:
mode:
authorStephan Sundermann <stephansundermann@gmail.com>2013-07-11 15:26:27 +0200
committerStephan Sundermann <stephansundermann@gmail.com>2013-12-21 16:52:20 +0100
commit9b318234afaa34fed454fe3bcd37b17845ef8471 (patch)
treea9fe2e126d8f39e062f95e92286faf7e69b3ceba /samples
parent4b10c322fec39cdb95bb1dd53bcb31af1cad2d96 (diff)
Added basic sample. Just plays a movie and parses the messages it gets from Gstreamer and writes them to the console
Diffstat (limited to 'samples')
-rw-r--r--samples/Playback.cs96
1 files changed, 96 insertions, 0 deletions
diff --git a/samples/Playback.cs b/samples/Playback.cs
new file mode 100644
index 0000000..e7676af
--- /dev/null
+++ b/samples/Playback.cs
@@ -0,0 +1,96 @@
+// Copyright (C) 2013 Stephan Sundermann <stephansundermann@gmail.com>
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as
+// published by the Free Software Foundation, either version 3 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+using System;
+using Gst;
+
+namespace GstreamerSharp
+{
+ class Playback
+ {
+ static GLib.MainLoop Loop;
+ static Element element;
+
+ public static void Main (string[] args)
+ {
+ Loop = new GLib.MainLoop();
+
+ Application.Init(ref args);
+ element = Gst.Parse.ParseLaunch("playbin uri=http://ftp.nluug.nl/ftp/graphics/blender/apricot/trailer/Sintel_Trailer1.1080p.DivX_Plus_HD.mkv");
+
+ element.Bus.AddSignalWatch();
+ element.Bus.Message += Handle;
+ element.SetState(State.Playing);
+ Loop.Run();
+ }
+
+ static void Handle (object e, MessageArgs args)
+ {
+
+ switch (args.Message.Type) {
+ case MessageType.StateChanged:
+ State oldstate, newstate, pendingstate;
+ args.Message.ParseStateChanged (out oldstate, out newstate, out pendingstate);
+ System.Console.WriteLine ("[StateChange] From " + oldstate + " to " + newstate + " pending at " + pendingstate);
+ break;
+ case MessageType.StreamStatus:
+ Element owner;
+ StreamStatusType type;
+ args.Message.ParseStreamStatus (out type, out owner);
+ System.Console.WriteLine ("[StreamStatus] Type" + type + " from " + owner);
+ break;
+ case MessageType.DurationChanged:
+ long duration;
+ element.QueryDuration (Format.Time, out duration);
+ System.Console.WriteLine ("[DurationChanged] New duration is " + (duration / Constants.SECOND) + " seconds");
+ break;
+ case MessageType.ResetTime:
+ ulong runningtime = args.Message.ParseResetTime ();
+ System.Console.WriteLine ("[ResetTime] Running time is " + runningtime);
+ break;
+ case MessageType.AsyncDone:
+ ulong desiredrunningtime = args.Message.ParseAsyncDone ();
+ System.Console.WriteLine ("[AsyncDone] Running time is " + desiredrunningtime);
+ break;
+ case MessageType.NewClock:
+ Clock clock = args.Message.ParseNewClock ();
+ System.Console.WriteLine ("[NewClock] " + clock);
+ break;
+ case MessageType.Buffering:
+ int percent = args.Message.ParseBuffering ();
+ System.Console.WriteLine ("[Buffering] " + percent + " % done");
+ break;
+ case MessageType.Tag:
+ TagList list = args.Message.ParseTag ();
+ System.Console.WriteLine ("[Tag] Information in scope " + list.Scope + " is " + list.ToString());
+ break;
+ case MessageType.Error:
+ GLib.GException gerror;
+ string debug;
+ args.Message.ParseError (out gerror, out debug);
+ System.Console.WriteLine ("[Error] " + gerror.Message + " debug information " + debug + ". Exiting! ");
+ Loop.Quit ();
+ break;
+ case MessageType.Eos:
+ System.Console.WriteLine ("[Eos] Playback has ended. Exiting!");
+ Loop.Quit ();
+ break;
+ default:
+ System.Console.WriteLine ("[Recv] " + args.Message.Type);
+ break;
+ }
+ }
+ }
+} \ No newline at end of file