tencent cloud

直播 SDK

动态与公告
TUILiveKit 产品动态
云直播推拉流 SDK 产品动态
新手指引
产品简介
产品概述
产品优势
性能数据
基本概念
购买指南
TRTC Live 价格总览
Live 视频直播计费说明
开通服务(TUILiveKit)
Demo 体验
Demo 体验指引
跑通 Demo(TUILiveKit)
接入指南
视频直播
准备工作
主播开播
观众观看
直播列表
语聊房
准备工作
主播开播
观众观看
直播列表
推流助手
推流助手(Electron 桌面应用)
推流助手(Web 桌面浏览器)
直播监播
监播页面(Web 桌面浏览器 React 版)
监播页面(Web 桌面浏览器 Vue 版)
UI 自定义
直播视频组件
视频源编辑组件
观众列表组件
聊天弹幕组件
媒体源配置面板
连麦管理面板
直播送礼组件
无 UI 集成
搭建视频直播
搭建语聊房
功能指南
关注主播(TUILiveKit)
至臻画质(TUILiveKit)
输入媒体流进房(TUILiveKit)
礼物系统(TUILiveKit)
客户端 API
Android
iOS
Web
服务端 API(TUILiveKit)
账号系统
REST API
第三方回调
错误码(TUILiveKit)
常见问题
平台编译
用户鉴权
云直播推拉流 SDK
产品简介
购买指南
Demo 体验
免费测试
SDK 下载
License 管理
高级功能
客户端 API
常见问题
无 UI 集成方案
API 文档
OSS information
OSS Attribution Notice

录屏推流

聚焦模式
字号
最后更新时间: 2024-01-13 15:53:49

概述

摄像头推流,是指采集手机摄像头的画面以及麦克风的声音,进行编码之后再推送到直播云平台上。腾讯云 live_flutter_plugin 通过 V2TXLivePusher 接口提供摄像头推流能力。

示例代码

针对开发者的接入反馈的高频问题,腾讯云提供有更加简洁的 API-Example 工程,方便开发者可以快速的了解相关 API 的使用,欢迎使用。
所属平台
GitHub 地址
iOS
Android
Flutter

开发环境准备

Android

Android 5.0 系统以后开始支持录屏功能。
悬浮窗在部分手机和系统上需要通过手动设置打开。

iOS

录屏功能是 iOS 10 新推出的特性,苹果在 iOS 9 的 ReplayKit 保存录屏视频的基础上,增加了视频流实时直播功能,官方介绍见 Go Live with ReplayKit。iOS 11 增强为 ReplayKit2,进一步提升了 Replaykit 的易用性和通用性,并且可以对整个手机实现屏幕录制,并非只是支持 ReplayKit 功能,因此录屏推流建议直接使用 iOS 11 的 ReplayKit2 屏幕录制方式。系统录屏采用的是扩展方式,扩展程序有单独的进程,iOS 系统为了保证系统流畅,给扩展程序的资源相对较少,扩展程序内存占用过大也会被 Kill 掉。腾讯云 LiteAV SDK 在原有直播的高质量、低延迟的基础上,进一步降低系统消耗,保证了扩展程序稳定。
注意:
本文主要介绍 iOS 11 的 ReplayKit2 录屏使用 SDK 推流的方法,涉及 SDK 的使用介绍同样适用于其它方式的自定义推流。更详细的使用说明可以参考 Demo 里 Live Demo Screen 文件夹示例代码。
1. 创建直播扩展 在现有工程选择 New > Target…,选择 Broadcast Upload Extension,如图所示。

配置好 Product Name。单击 Finish 后可以看到,工程多了所输 Product Name 的目录,目录下有个系统自动生成的 SampleHandler 类,这个类负责录屏的相关处理。
注意:
Xcode 9 及以上的版本,手机也必须升级至 iOS 11 以上,否则模拟器无法使用录屏特性。
2. 导入TXLiteAVSDK_ReplayKitExt.framework 直播扩展需要导入 TXLiteAVSDK_ReplayKitExt.framework。扩展导入 framework 的方式和主 App 导入方式相同,SDK 的系统依赖库也没有区别。具体请参见腾讯云官网 工程配置(iOS)

快速开始

1. 设置依赖

按照 SDK 集成指引 将 live_flutter_plugin 嵌入您的 App 工程中。
dependencies:
live_flutter_plugin: latest version number

2. 给 SDK 配置 License 授权

1. 获取 License 授权:
若您已获得相关 License 授权,需在 云直播控制台 获取 License URL 和 License Key。

若您暂未获得 License 授权,需先参考 新增与续期 License 进行申请。
2. 在您的 App 调用 live_flutter_plugin 的相关功能之前进行如下设置:
import 'package:live_flutter_plugin/v2_tx_live_premier.dart';

/// 腾讯云License管理页面(https://console.tencentcloud.com/live/license)
setupLicense() {
// 当前应用的License LicenseUrl
var LICENSEURL = "";
// 当前应用的License Key
var LICENSEURLKEY = "";
V2TXLivePremier.setLicence(LICENSEURL, LICENSEURLKEY);
}
注意:
License 中配置的 packageName/BundleId 必须和应用本身一致,否则会推流失败。

3. 创建 Pusher 对象

创建一个 V2TXLivePusher 对象,我们后面主要用它来完成推流工作。
V2TXLivePusher livePusher = V2TXLivePusher(V2TXLiveMode.v2TXLiveModeRTMP);

4. 启动推流

经过 步骤1 的准备之后,用下面这段代码就可以启动推流了:
String rtmpUrl = "rtmp://2157.livepush.myqcloud.com/live/xxxxxx";
livePusher.startMicrophone();
livePusher.startScreenCapture();
livePusher.startPush(rtmpUrl);
如何获取可用的推流 URL? 开通直播服务后,可以使用直播控制台 > 辅助工具 > 地址生成器 生成推流地址,详细信息请参见 推拉流 URL

返回 V2TXLIVE_ERROR_INVALID_LICENSE 的原因如果 startPush 接口返回 V2TXLIVE_ERROR_INVALID_LICENSE,则代表您的 License 校验失败了,请检查 第2步:给 SDK 配置 License 授权 中的工作是否有问题。

5. 结束推流

因为用于推流的 V2TXLivePusher 对象同一时刻只能有一个在运行,所以结束推流时要做好清理工作。
//结束录屏直播,注意做好清理工作
void stopPush() {
livePusher.stopMicrophone();
livePusher.stopScreenCapture();
livePusher.stopPush();
}

事件处理

事件监听

SDK 通过 V2TXLivePusherObserver 代理来监听推流相关的事件通知和错误通知,详细的事件表和错误码表请参见 错误码表

错误通知

SDK 发现部分严重问题,推流无法继续。
事件 ID
数值
含义说明
V2TXLIVE_ERROR_FAILED
-1
暂未归类的通用错误
V2TXLIVE_ERROR_INVALID_PARAMETER
-2
调用 API 时,传入的参数不合法
V2TXLIVE_ERROR_REFUSED
-3
API 调用被拒绝
V2TXLIVE_ERROR_NOT_SUPPORTED
-4
当前 API 不支持调用
V2TXLIVE_ERROR_INVALID_LICENSE
-5
license 不合法,调用失败
V2TXLIVE_ERROR_REQUEST_TIMEOUT
-6
请求服务器超时
V2TXLIVE_ERROR_SERVER_PROCESS_FAILED
-7
服务器无法处理您的请求

警告事件

SDK 发现部分警告问题,但 WARNING 级别的事件都会触发一些尝试性的保护逻辑或者恢复逻辑,而且有很大概率能够恢复。
事件 ID
数值
含义说明
V2TXLIVE_WARNING_NETWORK_BUSY
1101
网络状况不佳:上行带宽太小,上传数据受阻
V2TXLIVE_WARNING_VIDEO_BLOCK
2105
当前视频播放出现卡顿
V2TXLIVE_WARNING_CAMERA_START_FAILED
-1301
摄像头打开失败
V2TXLIVE_WARNING_CAMERA_OCCUPIED
-1316
摄像头正在被占用中,可尝试打开其他摄像头
V2TXLIVE_WARNING_CAMERA_NO_PERMISSION
-1314
摄像头设备未授权,通常在移动设备出现,可能是权限被用户拒绝了
V2TXLIVE_WARNING_MICROPHONE_START_FAILED
-1302
麦克风打开失败
V2TXLIVE_WARNING_MICROPHONE_OCCUPIED
-1319
麦克风正在被占用中,例如移动设备正在通话时,打开麦克风会失败
V2TXLIVE_WARNING_MICROPHONE_NO_PERMISSION
-1317
麦克风设备未授权,通常在移动设备出现,可能是权限被用户拒绝了
V2TXLIVE_WARNING_SCREEN_CAPTURE_NOT_SUPPORTED
-1309
当前系统不支持屏幕分享
V2TXLIVE_WARNING_SCREEN_CAPTURE_START_FAILED
-1308
开始录屏失败,如果在移动设备出现,可能是权限被用户拒绝了
V2TXLIVE_WARNING_SCREEN_CAPTURE_INTERRUPTED
-7001
录屏被系统中断

常见问题

ReplayKit2 屏幕录制在 iOS 11 新推出功能,相关的官方文档比较少,且存在着一些问题,使得每个版本的系统都在不断修复完善中。以下是一些使用中的常见现象或问题:
1. 屏幕录制何时自动会停止? 系统在锁屏或有电话打入时,会自动停止屏幕录制,此时 SampleHandler 里的 broadcastFinished 函数会被调用,可在此函数发通知提示用户。
2. 采集推流过程中有时屏幕录制会自动停止问题? 通常是因为设置的推流分辨率过高时在做横竖屏切换过程中容易出现。ReplayKit2 的直播扩展目前是有50M的内存使用限制,超过此限制系统会直接杀死扩展进程,因此 ReplayKit2 上建议推流分辨率不高于720P。
3. iPhoneX 手机的兼容性与画面变形问题? iPhoneX 手机因为有刘海,屏幕采集的画面分辨率不是 9:16。如果设了推流输出分辨率为 9:16 的比例,如高清里是为 960 × 540 的分辨率,这时因为源分辨率不是 9:16 的,推出去的画面就会稍有变形。建议设置分辨率时根据屏幕分辨率比例来设置,拉流端用 AspectFit 显示模式 iPhoneX 的屏幕采集推流会有黑边是正常现象,AspectFill 看画面会不全。

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈