前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【最佳实践】巡检项:实时音视频 (TRTC) 检查原生平台 SDK开启屏幕分享是否成功

【最佳实践】巡检项:实时音视频 (TRTC) 检查原生平台 SDK开启屏幕分享是否成功

原创
作者头像
jackwlchen
发布2023-05-09 12:12:00
4240
发布2023-05-09 12:12:00
举报

问题/风险描述:

在腾讯云实时音视频TRTC中,当您在移动设备或者 Windows/Mac 系统的设备上使用开启屏幕分享接口时,可能会遇到开启失败的问题,对应的就是TRTC的回调onError接口抛出ERR_SCREEN_CAPTURE_START_FAIL -1308错误码。其中在移动设备或者Mac系统的设备上,可能是没有相关屏幕分享的权限,而在 Windows 或 Mac 系统的设备上,则需要检查录屏接口的参数是否符合要求。这些问题都会导致录屏接口无法正常工作。

移动端工具栏
移动端工具栏
mac端开启屏幕共享权限
mac端开启屏幕共享权限

在Window或者Mac上还可能是因为设置进来的sourceId无效,或者sourceType跟sourceId不匹配,比如传入的sourceId是窗口的id,但是sourceType填入的是Screen,从而导致分享失败。

解决方案:

为了解决这些问题,我们建议您可以采取以下措施:

1. 在移动设备上,您可以引导用户去开启应用的权限,以允许应用可以使用录屏功能。您可以使用系统提供的提示信息,来引导用户打开对应的权限设置页面。

2. 在 Windows 或 Mac 系统的设备上,您需要检查录屏接口的参数是否符合要求

屏幕分享参数设置与情况
屏幕分享参数设置与情况

以下是Window屏幕分享的代码

代码语言:javascript
复制
/**
 * TRTC 屏幕分享(选择窗口)
 *
 * - 核心逻辑实现参考:
 * - 1. initScreenCaptureSources()          : 通过getScreenCaptureSources()获取可分享的屏幕窗口,包含屏幕和应用窗口两种类型,在返回值中,仅保留TRTCScreenCaptureSourceType为TRTCScreenCaptureSourceTypeWindow的窗口
 * - 2. initScreenSharingWindowSelections() : 将获取到的TRTCScreenCaptureSourceInfo列表展示到UI上,供用户选择
 * - 3. selectScreenCaptureTarget()         : 设置屏幕分享参数,具体参数可参考test_screen_share_setting.h
 * - 4. startScreenSharing()                : 开始屏幕分享
 * - 5. pauseScreenCapture()                : 暂停屏幕分享
 * - 6. resumeScreenCapture()               : 恢复屏幕分享
 * - 7. stopScreenSharing()                 : 停止屏幕分享
 * - 8. releaseScreenCaptureSourceList()    : 遍历完窗口列表后,需要调用release释放资源。
 */
 //通过getScreenCaptureSources()获取可分享的屏幕窗口,包含屏幕和应用窗口两种类型,在返回值中,仅保留TRTCScreenCaptureSourceType为TRTCScreenCaptureSourceTypeWindow的窗口
 void TestScreenShareSelectWindow::initScreenCaptureSources(){
    SIZE thumb_size;
#ifdef __APPLE__
    thumb_size.width = 300;
    thumb_size.height = 300;
#else
    thumb_size.cx = 300;
    thumb_size.cy = 300;
#endif
    SIZE icon_size = thumb_size;
    screen_capture_list_ = getTRTCShareInstance()->getScreenCaptureSources(thumb_size, icon_size);
}

//将获取到的TRTCScreenCaptureSourceInfo列表展示到UI上,供用户选择
void TestScreenShareSelectWindow::initScreenSharingWindowSelections() {
    initScreenCaptureSources();
    if (screen_capture_list_ == nullptr){
        return;
    }

    int screen_capture_size = screen_capture_list_->getCount();
    trtc::TRTCScreenCaptureSourceInfo screen_capture_source_info;
    int child_window_item_index = 0;
    for (int screen_index = 0; screen_index < screen_capture_size; screen_index++) {
        screen_capture_source_info = screen_capture_list_->getSourceInfo(screen_index);
        if(screen_capture_source_info.type != trtc::TRTCScreenCaptureSourceTypeWindow){
            continue;
        }

        addScreenSharingWindowItem(screen_capture_source_info, child_window_item_index);
        child_window_item_index++;
    }
    ui_screen_share_select_window_->scrrenSharingWindows->adjustSize();
}

//设置屏幕分享参数,具体参数可参考test_screen_share_setting.h
void TestScreenShareSelectWindow::selectScreenCaptureTarget(trtc::TRTCScreenCaptureSourceInfo sourceInfo){
    getTRTCShareInstance()->selectScreenCaptureTarget(
        sourceInfo
        , sharing_rect_
        , capture_property_);
}

//监听 点击开启屏幕分享
void TestScreenShareSelectWindow::startScreenSharing(){
    getTRTCShareInstance()->startScreenCapture(reinterpret_cast<trtc::TXView>(ui_screen_share_select_window_->screenSharedPreview->winId()),
        stream_type_,
        &enc_param_);
}

void TestScreenShareSelectWindow::resumeScreenCapture(){
    getTRTCShareInstance()->resumeScreenCapture();
}

void TestScreenShareSelectWindow::pauseScreenCapture(){
    getTRTCShareInstance()->pauseScreenCapture();
}

void TestScreenShareSelectWindow::stopScreenSharing(){
    getTRTCShareInstance()->stopScreenCapture();
    if(test_user_video_group_){
        getTRTCShareInstance()->startLocalPreview(test_user_video_group_->getLocalVideoTxView());
    }
}

void TestScreenShareSelectWindow::releaseScreenCaptureSourceList(){
    if (screen_capture_list_ != nullptr) {
        screen_capture_list_->release();
        screen_capture_list_ = nullptr;
    }
}

注意事项:

无论您遇到的是哪种问题,都需要在调用开启屏幕分享接口之前,对录屏权限和接口参数进行仔细的检查和确认。只有在保证开启屏幕分享接口的正常工作前提下,您才能顺利地完成屏幕分享功能的开发。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题/风险描述:
  • 解决方案:
  • 注意事项:
相关产品与服务
云顾问
云顾问(Tencent Cloud Smart Advisor)是一款提供可视化云架构IDE和多个ITOM领域垂直应用的云上治理平台,以“一个平台,多个应用”为产品理念,依托腾讯云海量运维专家经验,助您打造卓越架构,实现便捷、灵活的一站式云上治理。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档