2014-04-15 2 views
2

GTK #에 LibVLC.NET 래퍼를 사용합니다. 그리고 난 이미이 예제를 사용하여 비디오를 재생했다 :GTK의 LibVLC.NET #

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); 

그러나 또 다른 새로운 창에서 동영상 재생이 지금 내가 비디오를 재생됩니다 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()로?

답변

1

플랫폼에 따라 libvlc_media_player_set_xwindow (Linux), libvlc_media_player_set_hwnd (Windows) 또는 libvlc_media_player_set_nsobject (OSX)를 호출해야합니다.

두 번째 매개 변수는 비디오를 포함 할 원시 구성 요소의 핸들 인 정수입니다.

GTK/GTK #와 같은 툴킷은이 윈도우 핸들러를 가져올 수있는 구성 요소에 메소드를 제공해야합니다.

예를 들어이 C# 코드는 미디어 플레이어와 기본 구성 요소를 만든 후 한 번만이 작업을 수행 할 필요가 GTK 위젯

private static Int32 Wid(Widget widget) { 
    IntPtr windowPtr = gtk_widget_get_window(widget.Handle); 
    if(windowPtr != IntPtr.Zero) { 
     IntPtr xidPtr = gdk_x11_drawable_get_xid(windowPtr); 
     if(xidPtr != IntPtr.Zero) { 
      return xidPtr.ToInt32(); 
     } 
    } 
    return 0; 
} 

에서 필요한 창 핸들을 가져올 수 있습니다, 당신은하지 않습니다 미디어를 재생할 때마다해야합니다.

+0

도움이 될 것이라고 생각하지만 LibVLC.NET에서는이 기능이 없습니다. –

+0

그렇다면 내가 설명한대로 라이브러리를 사용할 수 있다고 생각하지 않습니다. 해당 프로젝트에서 제공하는 예제는 비트 맵을 사용하여 비디오를 렌더링하므로 비디오 콜백을 사용해야합니다. 이 도움이되지 않습니다 : http://libvlcnet.codeplex.com/SourceControl/latest#trunk/LibVLC.NET.Presentation/? – caprica

+0

업데이트 된 질문을 참조하십시오. –