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 通过 v2_tx_live_pusher 接口提供摄像头推流能力。

特别说明

x86 模拟器调试:由于 SDK 大量使用 iOS 系统的音视频接口,这些接口在 Mac 上自带的 x86 仿真模拟器下往往不能工作。所以,如果条件允许,推荐您尽量使用真机调试。

示例代码

所属平台
GitHub 地址
关键类
iOS
CameraPushViewController.m
Android
CameraPushMainActivity.java
Flutter
live_camera_push.dart
说明:
除上述示例外,针对开发者的接入反馈的高频问题,腾讯云提供有更加简洁的 API-Example 工程,方便开发者可以快速的了解相关 API 的使用,欢迎使用。

快速开始

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. 初始化 V2TXLivePusher 组件

创建一个V2TXLivePusher对象,需要指定对应的 V2TXLiveMode
import 'package:live_flutter_plugin/v2_tx_live_pusher.dart';

/// V2TXLivePusher 初始化
initPusher() {
_livePusher = V2TXLivePusher(V2TXLiveMode.v2TXLiveModeRTC);
}

4. 设置视频渲染 RenderView

import 'package:live_flutter_plugin/widget/v2_tx_live_video_widget.dart';

/// 视频渲染View Widget
Widget renderView() {
return V2TXLiveVideoWidget(
onViewCreated: (viewId) async {
/// 设置视频渲染View
_livePusher.setRenderViewID(_renderViewId);
/// 开启摄像头预览
_livePusher.startCamera(true);
},
);
}


5. 启动和结束推流

如果已经通过startCamera接口启动了摄像头预览,就可以调用 V2TXLivePusher 中的 startPush 接口开始推流。推流地址可以使用 TRTC 地址 ,或者使用 RTMP 地址 ,前者使用 UDP 协议,推流质量更高,并支持连麦互动。
/// 开始推流
startPush() async {
// 生成推流地址 RTMP/TRTC
var url = "";
// 开始推流
await _livePusher.startPush(url);
// 打开麦克风
await _livePusher.startMicrophone();
}
推流结束后,可以调用 V2TXLivePusher 中的 stopPush 接口结束推流。
/// 停止推流
stopPush() async {
// 关闭摄像头
await _livePusher.stopCamera();
// 关闭麦克风
await _livePusher.stopMicrophone();
// 停止推流
await _livePusher.stopPush();
}
注意:
如果已经启动了摄像头预览,请在结束推流时将其关闭。
如何获取可用的推流 URL 开通直播服务后,可以使用直播控制台 > 辅助工具 > 地址生成器 生成推流地址,详细信息请参见 推拉流 URL

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

6. 纯音频推流

如果您的直播场景是纯音频直播,不需要视频画面,那么您可以不执行 第4步 中的操作,或者在调用 startPush 之前不调用 startCamera 接口即可。
/// 开始推流
startPush() async {
// 初始化V2TXLivePusher
_livePusher = V2TXLivePusher(V2TXLiveMode.v2TXLiveModeRTC);
// 生成推流地址 RTMP/TRTC
var url = "";
// 开始推流
await _livePusher.startPush(url);
// 打开麦克风
await _livePusher.startMicrophone();
}
说明:
如果您启动纯音频推流,但是 RTMP、FLV 、HLS 格式的播放地址拉不到流,那是因为线路配置问题,请 提工单 联系我们帮忙修改配置。

7. 设定画面清晰度

调用 V2TXLivePusher 中的 setVideoQuality 接口,可以设定观众端的画面清晰度。之所以说是观众端的画面清晰度,是因为主播看到的视频画面是未经编码压缩过的高清原画,不受设置的影响。而 setVideoQuality 设定的视频编码器的编码质量,观众端可以感受到画质的差异。详情请参见 设定画面质量

8. 美颜美白和红润特效

调用 V2TXLivePusher 中的 getBeautyManager 接口可以获取 TXBeautyManager 实例进一步设置美颜效果。

美颜风格

SDK 内置三种不同的磨皮算法,每种磨皮算法即对应一种美颜风格,您可以选择最适合您产品定位的方案。详情请参见 TXBeautyManager.h 文件:
美颜风格
效果说明
TXBeautyStyleSmooth
光滑,适用于美女秀场,效果比较明显
TXBeautyStyleNature
自然,磨皮算法更多地保留了面部细节,主观感受上会更加自然
TXBeautyStylePitu
由上海优图实验室提供的美颜算法,磨皮效果介于光滑和自然之间,比光滑保留更多皮肤细节,比自然磨皮程度更高
美颜风格可以通过 TXBeautyManager 的 setBeautyStyle 接口设置:
美颜风格
设置方式
接口说明
美颜级别
通过 TXBeautyManager 的 setBeautyLevel 设置
取值范围0 - 9; 0表示关闭,1 - 9值越大,效果越明显
美白级别
通过 TXBeautyManager 的 setWhitenessLevel 设置
取值范围0 - 9; 0表示关闭,1 - 9值越大,效果越明显
红润级别
通过 TXBeautyManager 的 setRuddyLevel 设置
取值范围0 - 9; 0表示关闭,1 - 9值越大,效果越明显

9. 设备管理

V2TXLivePusher 提供了一组 API 用户控制设备的行为,您可通过 getDeviceManager 获取 TXDeviceManager 实例进一步进行设备管理,详细用法请参见 TXDeviceManager API

10. 观众端的镜像效果

通过调用 V2TXLivePusher 的 setRenderMirror 可以改变摄像头的镜像方式,继而影响观众端观看到的镜像效果。之所以说是观众端的镜像效果,是因为当主播在使用前置摄像头直播时,默认情况下自己看到的画面会被 SDK 反转。



11. 横屏推流

大多数情况下,主播习惯以“竖屏持握”手机进行直播拍摄,观众端看到的也是竖屏分辨率的画面(例如 540 × 960 这样的分辨率);有时主播也会“横屏持握”手机,这时观众端期望能看到是横屏分辨率的画面(例如 960 × 540 这样的分辨率)。



V2TXLivePusher 默认推出的是竖屏分辨率的视频画面,如果希望推出横屏分辨率的画面,可以修改 setVideoQuality 接口的参数来设定观众端的画面横竖屏模式。
// 视频编码参数
var param = V2TXLiveVideoEncoderParam();
param.videoResolutionMode = isLandscape ? V2TXLiveVideoResolutionMode.v2TXLiveVideoResolutionModeLandscape : V2TXLiveVideoResolutionMode.v2TXLiveVideoResolutionModePortrait;
_livePusher.setVideoQuality(param);

12. 音效设置

调用 V2TXLivePusher 中的 getAudioEffectManager 获取 TXAudioEffectManager 实例可以实现背景混音、耳返、混响等音效功能。背景混音是指主播在直播时可以选取一首歌曲伴唱,歌曲会在主播的手机端播放出来,同时也会被混合到音视频流中被观众端听到,所以被称为“混音”。
调用 TXAudioEffectManager 中的 enableVoiceEarMonitor 选项可以开启耳返功能,“耳返”指的是当主播带上耳机来唱歌时,耳机中要能实时反馈主播的声音。
调用 TXAudioEffectManager 中的 setVoiceReverbType 接口可以设置混响效果,例如 KTV、会堂、磁性、金属等,这些效果也会作用到观众端。
调用 TXAudioEffectManager 中的 setVoiceChangerType 接口可以设置变调效果,例如“萝莉音”,“大叔音”等,用来增加直播和观众互动的趣味性,这些效果也会作用到观众端。


说明:
详细用法请参见 TXAudioEffectManager API

事件处理

事件监听

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
录屏被系统中断


帮助和支持

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

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

文档反馈