提交工单
咨询集成、功能及报价等问题
设置成窗口分享后,可以分享桌面不同窗口的内容。
本文主要讲述如何设置窗口分享,详情请参考示例Demo。
/*
设置日志路径和级别
*/
zego_screencapture_set_log_level(kZegoLogLevelDebug, logDir);
/*
设置捕获错误回调
*/
zego_screencapture_reg_capture_error_notify((zego_screencapture_capture_error_notify_func)OnCaptureError, this);
/*
设置捕获数据回调
*/
zego_screencapture_reg_captured_frame_available_notify((zego_screencapture_captured_frame_available_notify_func)OnCapturedFrameAvailable, this);
/*
初始化
*/
zego_screencapture_init();
/*
设置桌面分享的采集帧率,即OnCapturedFrameAvailable每秒回调次数
*/
zego_screencapture_set_fps(framerate);
/*
设置是否同时捕捉光标
*/
zego_screencapture_set_cursor_visible(checked);
/*
设置是否在捕捉到分享画面的同时显示点击动画
*/
zego_screencapture_enable_click_animation(checked);
/*
设置视频采集的格式
*/
//zego_screencapture_set_capture_video_pixel_format(kZegoPixelFormatI420);
zego_screencapture_set_capture_video_pixel_format(kZegoPixelFormatBGRA32);
/*
刷新窗口列表,EnumWindowList得到列表数据后深拷贝带走,FreeWindowList与之配对
*/
unsigned int count(0);
const struct ZegoScreenCaptureWindowItem* itemList(nullptr);
itemList = zego_screencapture_enum_window_list(true, &count);
if (!itemList) return;
QVector<QVariantMap> windowList;
for (int i = 0; i < count; i++)
{
QVariantMap varMap;
QString windowTitle = itemList[i].title ? itemList[i].title : "";
varMap["title"] = windowTitle;
varMap["id"] = (qint64)itemList[i].handle;
windowList.push_back(varMap);
}
m_settings->setWindowList(windowList);
//释放窗口列表
zego_screencapture_free_window_list(itemList);
详情见窗口缩略图
/*
设置需要捕获的窗口
*/
zego_screencapture_set_target_window((void*)id);
/*
启动捕获
*/
zego_screencapture_start_capture();
void ZegoScreenCaptureController::OnCapturedFrameAvailable(const char *data, uint32_t length, const struct ZegoScreenCaptureVideoCaptureFormat *video_frame_format, uint64_t reference_time, uint32_t reference_time_scale, void *user_data)
{
ZegoScreenCaptureController *pThis = (ZegoScreenCaptureController *)user_data;
if (!pThis)
return;
auto externalDevice = pThis->m_externalCaptureFactory->Device();
if (!externalDevice || !externalDevice->IsCapturing())
return;
if (!externalDevice->Client())
return;
// 从桌面分享SDK回调的桌面画面,直接传给音视频SDK推流
AVE::VideoCaptureFormat format;
format.width = video_frame_format->width;
format.height = video_frame_format->height;
if (video_frame_format->video_pixel_format == kZegoPixelFormatI420)
{
format.strides[0] = video_frame_format->strides[0];
format.strides[1] = video_frame_format->strides[1];
format.strides[2] = video_frame_format->strides[2];
}
else
{
format.strides[0] = video_frame_format->strides[0];
}
format.pixel_format = (AVE::VideoPixelFormat)video_frame_format->video_pixel_format;
format.rotation = video_frame_format->rotation;
externalDevice->Client()->OnIncomingCapturedData(data, length, format, reference_time, reference_time_scale);
}
/*
停止捕获
*/
zego_screencapture_stop_capture();
联系我们
文档反馈