在 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总是 NULL !
也许有人对 SDL 的 windows 有类似的问题?问题也是,我是否明显需要一个 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
我试过这个配置,但没有视频显示...