我需要在libvlc_media_player_set_hwnd()函数中使用GTK#,但是找不到它。相反,我在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)
*/在注释中提到了libvlc_media_player_set_hwnd (),可能是这个函数以某种方式取代了它,还是提供了与libvlc_media_player_set_hwnd ()相同的访问机会?
因此,我需要这个函数或函数来取代它,或者帮助我在所需的窗口或gtk.widget中播放视频的方法(可能我需要获取图像的位图或类似的东西)。
我能做什么?
发布于 2014-09-01 09:11:13
libvlc/video/set_format_callbacks的含义与libvlc/media_player/set_hwnd.完全不同虽然后者的使用相当明显(选择目标屏幕区域),但前者(根据本源)是libvlc_video_set_format的回调替代。嗯,我没有检查libvlc文档,但在那里可能描述得很好。我不是libvlc方面的专家,但是,IMHO,这两个功能相去甚远。
关于代码中注释中可见的其他功能:
(见关于他们的医生)
因此,这取决于您试图使用libVlc的平台,因为这决定了VLC可以使用屏幕的方式。
如果你是在微软Windows上构建任何东西-使用HWND对。
如果您正在使用XWindows构建Linux --使用XWindow对。
如果您正在MacOS/iOS上构建Cocoa,请使用NSObject/NSView对。
如果您是在MaxOS/iOS上构建OpenGL -使用AGL对。
在上,您必须使用HWND。即使您使用的是WPF/GTK#/任何东西。中的每个窗口在根上都使用HWND。从你的UI库中挖掘出来。就在那里的某个地方。但这可能令人不满意。例如,WPF (除非您做一些技巧)对每个窗口对象使用一个HWND句柄。将此HWND传递给VLC将导致VLC绘制所有其他窗口,而不仅仅是您想要的区域。这必须通过不同的方法来解决,例如,创建另一个较小的窗口,将其保持在主窗口的顶部,并不断同步其位置,使其移动起来就像粘在主窗口上一样。丑陋,但很简单,而且在大多数情况下都很有效。
https://stackoverflow.com/questions/23105610
复制相似问题