tencent cloud

文档反馈

摄像头推流

最后更新时间: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
    录屏被系统中断
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持