2013-02-13 64 views
-1

在PJSIP項目(Windows 32 Bit MFC/C++)中,我們正在使用SIP服務器來顯示傳入視頻呼叫。 由於使用了SDL/DirectShow(DirectX)圖層,SDL創建了自己的窗口來顯示傳入的視頻(它的工作原理)。我的config_site.h看起來像:PJSIP項目:從pjsua allways創建的窗口句柄NULL

#define PJMEDIA_HAS_VIDEO   1 
#define PJMEDIA_HAS_FFMPEG   1 
#define PJMEDIA_VIDEO_DEV_HAS_SDL  1 
#define PJMEDIA_VIDEO_DEV_HAS_DSHOW  1 

我會在自己的窗口而不是在SDL的窗口中顯示視頻。 所以我試圖讓SDL窗口的HWND,並使用它像一個自己的子窗口:

pjsua_call_get_info(call_id, &ci); 
for (unsigned i = 0; i < ci.media_cnt; ++i) 
{ 
    if ((ci.media[i].type == PJMEDIA_TYPE_VIDEO) && 
    (ci.media[i].dir & PJMEDIA_DIR_DECODING)) 
    { 
    pjsua_vid_win_info wi; 
    pjsua_vid_win_get_info(ci.media[i].stream.vid.win_in, &wi); 
    // Using handle like this or whatever: 
    //HWND hwndOld = ::SetParent((HWND)&wi.hwnd.info.win.hwnd, pWnd->m_hWnd); 
    break; 
    } 
} 

問題:wi.hwnd.info.win.hwnd是百達NULL!

也許有人有與SDL的窗口類似的問題? 問題是,我是否明顯需要一個SDL圖層 - 也許我只會使用PJSIP來放置它?我的意思是:

#define PJMEDIA_HAS_VIDEO   1 
#define PJMEDIA_HAS_FFMPEG   1 
//#define PJMEDIA_VIDEO_DEV_HAS_SDL  1 
//#define PJMEDIA_VIDEO_DEV_HAS_DSHOW  1 

我已經試過此配置,但沒有視頻已經表明...

+0

只是爲了信息: http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/2011-November/013684.html – duDE 2013-02-13 09:58:45

回答

1

找到解決方法(快速&髒) - FindWindow函數幫助(:

CWnd* pWnd = mainView->GetDlgItem(IDC_STATIC_CTRL); 
RECT rectWin; 
::GetWindowRect(pWnd->m_hWnd, &rectWin); 

HWND hWnd = FindWindow(_T("SDL_app"), NULL); 

::SetWindowPos(hWnd, 
     NULL, 
     rectWin.left, 
     rectWin.top, 
     rectWin.right - rectWin.left, 
     rectWin.bottom - rectWin.top, 
     SWP_SHOWWINDOW);