C++ PJSIP项目:从pjsua创建的窗口句柄始终为空
在PJSIP项目(Windows 32位MFC/C++)中,我们使用SIP服务器来显示传入的视频呼叫。 由于使用SDL/DirectShow(DirectX)层,SDL会创建自己的窗口来显示传入的视频(它可以工作)。我的config_site.h看起来像:C++ PJSIP项目:从pjsua创建的窗口句柄始终为空,c++,sdl,pjsip,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 #de
#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;
}
}
我已尝试此配置,但未显示视频…找到解决方法(快速和肮脏)-FindWindow帮助(:
仅提供以下信息:
#define PJMEDIA_HAS_VIDEO 1
#define PJMEDIA_HAS_FFMPEG 1
//#define PJMEDIA_VIDEO_DEV_HAS_SDL 1
//#define PJMEDIA_VIDEO_DEV_HAS_DSHOW 1
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 );