LibVLC.NET en GTK #
yo sueloLibVLC.NET envoltorio en GTK #. Y ya he reproducido video usando este ejemplo:
LibVLCLibrary library = LibVLCLibrary.Load(null);
IntPtr inst, mp, m;
inst = library.libvlc_new(); // Load the VLC engine
m = library.libvlc_media_new_location(inst, "path/to/your/file"); // Create a new item
mp = library.libvlc_media_player_new_from_media(m); // Create a media player playing environement
library.libvlc_media_release(m); // No need to keep the media now
library.libvlc_media_player_play(mp); // play the media_player
Thread.Sleep(10000); // Let it play a bit
library.libvlc_media_player_stop(mp); // Stop playing
library.libvlc_media_player_release(mp); // Free the media_player
library.libvlc_release(inst);
LibVLCLibrary.Free(library);
Pero el video se reproduce en otra ventana nueva, ahora necesito configurar la ventana o (mejor) contenedor en GTK # que reproducirá el video. ¿Cómo debería hacer esto?
Actualizar: Encontré esta función en LibVLC.NET:
//==========================================================================
// void libvlc_video_set_format_callbacks (libvlc_media_player_t *mp, libvlc_video_format_cb setup, libvlc_video_cleanup_cb cleanup)
//==========================================================================
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate uint libvlc_video_format_cb(ref IntPtr opaque, ref uint chroma, ref uint width, ref uint height, ref uint pitches, ref uint lines);
//==========================================================================
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void libvlc_video_cleanup_cb(IntPtr opaque);
//==========================================================================
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
private delegate void libvlc_video_set_format_callbacks_signature(IntPtr mp, libvlc_video_format_cb setup, libvlc_video_cleanup_cb cleanup);
//==========================================================================
private readonly libvlc_video_set_format_callbacks_signature m_libvlc_video_set_format_callbacks;
//==========================================================================
public void libvlc_video_set_format_callbacks(IntPtr mp, libvlc_video_format_cb setup, libvlc_video_cleanup_cb cleanup)
{
VerifyAccess();
m_libvlc_video_set_format_callbacks(mp, setup, cleanup);
}
/*
void libvlc_media_player_set_nsobject (libvlc_media_player_t *p_mi, void *drawable)
void * libvlc_media_player_get_nsobject (libvlc_media_player_t *p_mi)
void libvlc_media_player_set_agl (libvlc_media_player_t *p_mi, uint32_t drawable)
uint32_t libvlc_media_player_get_agl (libvlc_media_player_t *p_mi)
void libvlc_media_player_set_xwindow (libvlc_media_player_t *p_mi, uint32_t drawable)
uint32_t libvlc_media_player_get_xwindow (libvlc_media_player_t *p_mi)
void libvlc_media_player_set_hwnd (libvlc_media_player_t *p_mi, void *drawable)
void * libvlc_media_player_get_hwnd (libvlc_media_player_t *p_mi)
*/
En los comentarios se menciona libvlc_media_player_set_hwnd (), ¿puede esta función reemplazarlo o dar acceso a las mismas oportunidades que libvlc_media_player_set_hwnd ()?