Buscar este blog

miércoles, 11 de septiembre de 2013

Audio y video con gstreamer

Una opción para la programación de audio y video en .Net es gstreamer, esta es una librería cross platform que funciona en windows, linux osx y android por lo que con el diseño adecuado tu aplicación puede funcionar en todas estas plataformas.
En cuanto a .Net el soporte se da a través de la librería gstreamer-sharp que es un binding basado en interop para acceder a las dlls nativas.
Esta librería no se encuentra en el sdk oficial pero puedes obtenerla en la pagina de ossbuild que tiene instaladores del sdk que incluyen las dlls para .Net.

Es muy fácil de usar aquí el ejemplo, unas pocas lineas de código que hacen todo:

using Gst;
 
namespace ConsoleApplication1 {
    public class PlayBinTest {
        static Element pipeline = null;
        public static void Main(string[] args) {
            Application.Init();
 
            pipeline = Gst.Parse.Launch("playbin uri=http://localhost:8000/");
            pipeline.SetState(State.Playing);
            Bus bus = pipeline.Bus;
            bus.AddWatch(EventLoop);
 
            Gst.GLib.MainLoop loop = new Gst.GLib.MainLoop();
            loop.Run();
 
            pipeline.SetState(State.Null);
            System.Console.ReadLine();
        }
        static bool EventLoop(Bus bus, Message msg) {
                switch(msg.Type) {
                    case MessageType.Eos: {
                        msg.Dispose();
                        return false;
                    }
                    case MessageType.Error: {
                        System.Console.WriteLine(msg.Structure.ToString());
                            pipeline.SetState(State.Ready);
                            pipeline["uri"] = "http://localhost:8000";
                            pipeline.SetState(State.Playing);
                        return true;
                    }
                }
            return true;
        }
    }
}