ahora la bestiaza negra de las librerias audio/video: GStreamer.
Un exemplo simple, simple para veer un archivo video (se necesita poner una DrawingArea y dos Button):
Private Const GST_STATE_NULL As Integer = 1
Private Const GST_STATE_PLAYING As Integer = 4
Private play As Pointer
Library "libgstreamer-1.0"
' gst_init (&argc, &argv)
Private Extern gst_init(argc As Integer, argv As Pointer)
' GstElement * gst_element_factory_make(const gchar *factoryname, Const gchar * name)
Private Extern gst_element_factory_make(factoryname As String, name As String) As Pointer
' void g_object_set(gpointer object, const gchar *first_property_name, ...)
Private Extern g_object_set(gobject As Pointer, key As String, value As String, nl As String)
' void gst_video_overlay_set_window_handle(GstVideoOverlay *overlay, guintptr handle)
Private Extern gst_video_overlay_set_window_handle(overlay As Pointer, id As Integer) In "libgstvideo-1.0"
' GstStateChangeReturn gst_element_set_state(GstElement *element, GstState state)
Private Extern gst_element_set_state(gstobject As Pointer, state As Integer) As Integer
' void gst_object_unref(gpointer object)
Private Extern gst_object_unref(gobject As Pointer)
Public Sub Form_Open()
End
Public Sub Button1_Click()
Dim retI As Integer
gst_init(0, 0)
play = gst_element_factory_make("playbin", "play")
g_object_set(play, "uri", "file:///mi/archivo/video", Null) ' Atención! La dirección empieza con File:///.....
gst_video_overlay_set_window_handle(play, DrawingArea1.Handle)
' Iniciamos la reproducción audio/video:
retI = gst_element_set_state(play, GST_STATE_PLAYING)
Print "Estado de cambio = "; retI; " Ejecutando"
End
Public Sub Button2_Click()
Dim retI As Integer
' Bloqueamos la reproducción audio/video:
retI = gst_element_set_state(play, GST_STATE_NULL)
Print "Estado de cambio = "; retI; " STOP"
gst_object_unref(play)
End
Private Const GST_STATE_PLAYING As Integer = 4
Private play As Pointer
Library "libgstreamer-1.0"
' gst_init (&argc, &argv)
Private Extern gst_init(argc As Integer, argv As Pointer)
' GstElement * gst_element_factory_make(const gchar *factoryname, Const gchar * name)
Private Extern gst_element_factory_make(factoryname As String, name As String) As Pointer
' void g_object_set(gpointer object, const gchar *first_property_name, ...)
Private Extern g_object_set(gobject As Pointer, key As String, value As String, nl As String)
' void gst_video_overlay_set_window_handle(GstVideoOverlay *overlay, guintptr handle)
Private Extern gst_video_overlay_set_window_handle(overlay As Pointer, id As Integer) In "libgstvideo-1.0"
' GstStateChangeReturn gst_element_set_state(GstElement *element, GstState state)
Private Extern gst_element_set_state(gstobject As Pointer, state As Integer) As Integer
' void gst_object_unref(gpointer object)
Private Extern gst_object_unref(gobject As Pointer)
Public Sub Form_Open()
End
Public Sub Button1_Click()
Dim retI As Integer
gst_init(0, 0)
play = gst_element_factory_make("playbin", "play")
g_object_set(play, "uri", "file:///mi/archivo/video", Null) ' Atención! La dirección empieza con File:///.....
gst_video_overlay_set_window_handle(play, DrawingArea1.Handle)
' Iniciamos la reproducción audio/video:
retI = gst_element_set_state(play, GST_STATE_PLAYING)
Print "Estado de cambio = "; retI; " Ejecutando"
End
Public Sub Button2_Click()
Dim retI As Integer
' Bloqueamos la reproducción audio/video:
retI = gst_element_set_state(play, GST_STATE_NULL)
Print "Estado de cambio = "; retI; " STOP"
gst_object_unref(play)
End
Referencias (en italiano):
http://www.gambas-it.org/wiki/index..._dei_dati_media
http://www.gambas-it.org/wiki/index...PI_di_GStreamer