// Authors // Copyright (C) 2017 Thibault Saunier // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library 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 // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA // 02110-1301 USA using System; using Gst; using System.Diagnostics; namespace GESSharp { class GESExample { public static void Main (string[] args) { // Initialize Gstreamer Gst.Application.Init(); // Build the pipeline GES.Global.Init(); var pipeline = new GES.Pipeline(); var timeline = GES.Timeline.NewAudioVideo(); var layer = timeline.AppendLayer(); pipeline["timeline"] = timeline; var clip = new GES.TitleClip(); clip.Duration = Constants.SECOND * 5; layer.AddClip(clip); clip.SetChildProperty("text", new GLib.Value("Clip 1")); var clip1 = new GES.TitleClip(); clip1.Start = Constants.SECOND * 5; clip1.Duration = Constants.SECOND * 5; layer.AddClip(clip1); clip1.SetChildProperty("text", new GLib.Value("Clip 2")); timeline.Commit(); pipeline.SetState(State.Playing); //// Wait until error or EOS var bus = pipeline.Bus; Message msg = null; while (msg == null) { var format = Format.Time; long position; msg = bus.TimedPopFiltered (Gst.Constants.SECOND, MessageType.Eos | MessageType.Error); pipeline.QueryPosition (format, out position); Console.WriteLine("position: " + Global.TimeFormat(position) + " / " + Global.TimeFormat(timeline.Duration)); } pipeline.SetState(State.Null); } } }