PJSIP项目:从pjsip创建的窗口句柄始终为NULL

时间:2013-02-13 09:55:51

标签: c++ sdl pjsip

在PJSIP项目(Windows 32位MFC / C ++)中,我们正在使用SIP服务器来显示传入的视频呼叫。 由于使用SDL / DirectShow(DirectX)图层,SDL会创建自己的窗口来显示传入的视频(它可以工作)。我的config_site.h看起来像:

#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 总是空的!

也许有人与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

我试过这个配置,但没有显示视频......

1 个答案:

答案 0 :(得分: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 );