我需要在GTK#中使用libvlc_media_player_set_hwnd()函数,但我无法找到它。取而代之的是我在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中播放视频的方法(可能需要获取图像的位图或类似的东西)。
我该怎么办?
答案 0 :(得分:2)
libvlc
/ video
/ set_format_callbacks
完全适用于与libvlc
/ media_player
/ set_hwnd
不同的内容。虽然后者的使用相当明显(选择目标屏幕区域),但前者(根据this source)是libvlc_video_set_format
的回调替代。好吧,我没有查看libvlc文档,但它可能很好地描述了。我不是libvlc的专家,但是,恕我直言,这两个功能相距甚远。
关于代码中注释中可见的其他函数:
因此,它取决于您尝试使用libVlc的什么平台,因为这决定了VLC在屏幕上绘制的方式。
如果你在MS Windows上进行任何建设 - 使用HWND对 如果您使用XWindows为Linux构建 - 使用XWindow对 如果你在MacOS / iOS上为Cocoa构建 - 使用NSObject / NSView对 如果您在MaxOS / iOS上构建OpenGL,请使用AGL对。
在MS Windows上,您必须使用HWND。即使你使用WPF / GTK#/等等。 MS Windows中的每个窗口都在其根目录中使用HWND。从您的UI库中挖掘出来。它在某处。但它可能不令人满意。例如,WPF(除非你做一些技巧)只为每个Window对象使用一个HWND句柄。将此HWND传递给VLC将导致VLC绘制所有其他窗口,而不仅仅是您想要的区域。这必须通过不同的方法解决,例如 - 创建另一个较小的窗口,将其保持在主窗口的顶部,并不断地同步其位置,使其移动,就好像它粘在主要窗口上一样。丑陋但简单,在大多数情况下都有效。