1
novembre
2012
Gstreamer : intégrer une webcam dans une application (C#/Vala)
novembre
2012
Un article de Rachel
1 Commentaire
Voici une application de base d’utilisation de Video for Linux (v4l2) et Gstreamer , notamment avec une Webcam.
- En Vala :
using Gst;
using Gtk;
public class Mainclass : GLib.Object
{
static Window window;
public static void main (string[] args)
{
Gst.init(ref args);
Gtk.init(ref args);
window = new Window(WindowType.TOPLEVEL);
Element e = parse_launch("v4l2src ! autovideosink");
e.bus.add_watch(cb,0);
e.set_state(Gst.State.PLAYING);
window.set_size_request(400,300);
window.show_all();
Gtk.main();
}
static bool cb (Gst.Bus bus, Gst.Message message)
{
if (message.get_structure() == null)
return true;
if (message.get_structure().get_name() == null)
return true;
if (message.get_structure().get_name() == "prepare-xwindow-id") {
(message.src as XOverlay).set_xwindow_id((ulong)Gdk.X11Window.get_xid(window.get_window()));
}
return true;
}
} - En C# :
using System;
using System.Runtime.InteropServices;
using Gst;
using Gst.Interfaces;
using Gtk;
class MainClass
{
static Window window;
[DllImport("libgdk-3.so")]
static extern IntPtr gdk_x11_window_get_xid (IntPtr handle);
public static void Main (string[] args)
{
Gst.Application.Init();
Gtk.Application.Init();
window = new Window(WindowType.Toplevel);
Element e = Parse.Launch("v4l2src ! autovideosink");
e.Bus.AddWatch(new BusFunc(cb));
e.SetState(State.Playing);
window.SetSizeRequest(400,300);
window.ShowAll();
Gtk.Application.Run();
}
static bool cb (Bus bus, Message message)
{
if (message.Structure == null)
return true;
if (message.Structure.Name == null)
return true;
if (message.Structure.Name == "prepare-xwindow-id") {
(message.Src as XOverlay).XwindowId = (ulong)gdk_x11_window_get_xid(window.Window.Handle);
}
return true;
}
}
On pourra aussi utiliser l’élément PlayBin2, avec en paramètre Uri la chaîne « v4l2://url_device_video ». on remplace url_device_video par l’emplacement de votre caméra (le plus souvent /dev/video0)
[…] ce précédent billet, je vous montrais comment accéder rapidement à la caméra. Je vais maintenant […]