更新记录

6.1.1(2024-03-02)

  1. 新增V2版本推流(内测);

6.1.0(2024-01-30)

  1. 升级推流库至最新版;
  2. 新增屏幕控制功能(内测);

6.0.0(2023-06-08)

  1. 升级SDK至版本11.2.0;
查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 14.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 适用版本区间:9 - 17

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


腾讯云直播推流器

主要负责将本地的音频和视频画面进行编码,并推送到指定的推流地址,支持任意的推流服务端。

接口模式(纯API)

扫描下方二维码,安装示例代码,快速体验插件功能:

Android iOS 联系我们
Android示例代码 iOS示例代码 技术支持

扫码添加技术支持(微信号: ruanyunkeji006),开通测试账号。

技术支持

建议扫码添加我们技术支持,协助接入和测试。

联系我们 微信号 更多功能
联系我们
ruanyunkeji006

基础美颜
离线推送
聊天、点赞、送礼等

API 接口文档

使用教程

快速开始

步骤 1. 集成插件

  • 加载插件

插件名称: RY-TencentLivePusher

  1. 使用 自定义基座 ,引入插件;

  2. 新建nvue文件,该插件必须在nvue中使用。在使用前,需要先加载插件。

<RY-TencentLivePusher ref="livePusher" v-bind:style = "{ width: playerWidth, height: playerHeight }"></RY-TencentLivePusher>

说明:

可以通过修改width和height参数值的大小,来修改视频容器的大小。

  • 腾讯云配置

注册或登录腾讯云账号,并进行实名认证。

  1. 点击 直播服务,开通直播功能,已开通,则忽略;
  2. 点击 Licence管理,进入Licence页面;
  3. 点击 "创建测试Licence"按钮,弹出测试Licence配置界面;
  4. 在"基本信息"中,输入"App Name" => 应用名称,"Package Name" => Android包名(需要和自定义基座的Android包名一致),"Bundle Id" => iOS包名(与自定义基座iOS的Bundle Id一致);
  5. 在"选择功能模块中",选中"直播推流(RTMP推流+RTC推流)"。
  6. 创建成功后,您会获取 Licence,您会获得两个字符串:一个字符串是 licenseURL,另一个字符串是解密 key。

注意:

请使用测试Licence开发测试,如果您需要购买正式Licence(信息填写错误无法修改,也可能无法退款),建议先联系我们技术支持微信(微信号: ruanyunkeji006)。

  • 生成推流地址

a. 自动推流,联系我们技术支持微信(微信号: ruanyunkeji006)。

b. 点击 推流地址,填入相关信息,生成推流地址。

步骤 2. 开始使用插件

  • 首先调用 init 初始化推流并给SDK授权。该步骤可以指定一些高级配置参数,但一般情况下我们不建议您操作该对象,因为我们已经在其内部配置好了所有需要校调的参数。
this.$refs.livePusher.init({
    licence: {
        url: 'http://license.vod2.myqcloud.com/license/v1/e50xxxe680/TXLiveSDK.licence',
        key: '3d436208xxxxd7f92871'
    },
    docPath: plus.io.convertLocalFileSystemURL('_doc')
}, ret => {
    console.log(ret);
});

注意:

需要使用高级参数,请联系我们技术支持微信(微信号: ruanyunkeji006)。

步骤 3. 设置监听

使用 setLivePusherListener 设置推流监听器,监听器会返回推流相关的 事件回调

this.$refs.livePusher.setLivePusherListener({}, ret => {
    console.log(ret);
});

步骤 4. 开启摄像头预览

调用 startPreview 接口可以开启当前手机的摄像头预览。您需要为startPreview 接口提供一个用于显示视频画面的坐标和区域。

this.$refs.livePusher.startPreview({
    rect: {
        x: 0, 
        y: 0, 
        w: self.playerWidth,
        h: self.playerHeight
    }
}, ret => {
    console.log(ret);
});

备注:可以通过rect参数控制视频画面的大小和位置。

步骤 5. 启动和结束推流

如果已经通过 startPreview 接口启动了摄像头预览,就可以调用 startPush 接口开始推流。

var self = this;
this.$refs.livePusher.startPush({
    rtmpUrl: 'rtmp://xxxxx.xxxx.xxx/xxxx'
}, ret => {
    console.log(ret);
})

推流结束后,可以调用 stopPush 接口结束推流。请注意,如果已经启动了摄像头预览,请在结束推流时将其关闭,否则会导致 SDK 的表现异常。

this.$refs.livePusher.stopPreview({}, ret => {
    console.log(ret);
});

this.$refs.livePusher.stopPush({}, ret => {
    console.log(ret);
});
  • 如何获取可用的推流 URL? 开通直播服务后,推流地址的生成步骤,可以联系我们技术支持微信 (微信号: ruanyunkeji006)。

  • 返回 -5 的原因? 如果 startPush 接口返回 -5,则代表您的 License 校验失败了,请检查 第1步 “集成插件” 中的工作是否有问题。

步骤 6. 纯音频推流

如果您的直播场景是纯音频直播,不需要视频画面,那么您可以不执行 第4步 中的操作,取而代之的是开启 init 中的enablePureAudioPush配置。

this.$refs.livePusher.init({
    // 是否纯音频推流
    enablePureAudioPush: true,
    ...
}, ret => {
    console.log(ret);
});

如果您启动纯音频推流,但是 rtmp、flv 、hls 格式的播放地址拉不到流,那是因为线路配置问题,请联系我们技术支持微信(微信号: ruanyunkeji006),联系我们帮忙修改配置。

步骤 7. 设定画面清晰度

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

清晰度

步骤 8. 控制摄像头

RY-TencentLivePusher 提供了一组 API 用户控制摄像头的行为:

函数 功能说明 备注说明
switchCamera 切换前后摄像头
toggleTorch 打开或关闭闪光灯 仅在当前是后置摄像头时有效
setZoom 调整摄像头的焦距 焦距大小,取值范围:1-5,默认值建议设置为1即可
setFocusPosition 设置手动对焦位置 需要将init()中的touchFocus选项设置为true后才能使用

步骤 9. 观众端的镜像效果

调用 RY-TencentLivePusher 中的 setMirror 接口可以设置观众端的镜像效果。之所以说是观众端的镜像效果,是因为当主播在使用前置摄像头直播时,自己看到的画面会被 SDK 默认反转,这时主播的体验跟自己照镜子时的体验是保持一致的。setMirror 所影响的是观众端观看到的画面情况,如下图所示:

镜像效果

步骤 10. 横屏推流

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

横屏推流

RY-TencentLivePusher 默认推出的是竖屏分辨率的视频画面,如果希望推出横屏分辨率的画面,需要:

  1. 设置 RY-TencentLivePusher 中的 homeOrientation 可以改变观众端看到的视频画面宽高比方向。
  2. 调用 RY-TencentLivePusher 中的 setRenderRotation 可以接口改变主播端的视频画面的渲染方向。
this.$refs.livePusher.init({
    homeOrientation: 0,
    ...
}, ret => {
    console.log(ret);
});

this.$refs.livePusher.setRenderRotation({
    rotation: 1
}, ret => {
    console.log(ret);
});

步骤 11. 隐私模式(垫片推流)

有时候主播的一些动作不希望被观众看到,但直播过程中又不能下播,那就可以考虑进入隐私模式。在隐私模式下,SDK 可以暂停采集主播手机的摄像头画面以及麦克风声音,并使用一张默认图片作为替代图像进行推流,也就是所谓的“垫片”。

该功能也常用于 App 被切到后台时:在 iOS 系统中,当 App 切到后台以后,操作系统不再允许该 App 继续采集摄像头画面。 此时就可以通过调用 pausePush 进入垫片状态。因为对于大多数直播 CDN 而言,如果超过一定时间(腾讯云目前为70s)不推视频数据,服务器就会断开当前的推流链接,所以在 App 切到后台后进入垫片模式是很有必要的。

垫片推流

  • step1: 开启应用的 Background 模式
  • step2: 设置 TXLivePushConfig 中的相关参数 在开始推流前,使用 init 中pause参数的pauseImg、pauseFps和pauseTime可以设置垫片推流的详细参数:
this.$refs.livePusher.init({
    pauseImg: '/xxxx/xxx/xxx.png',
    pauseFps: 10, 
    pauseTime: 300, 
    ...
}, ret => {
    console.log(ret);
});

步骤 12. 设置 Logo 水印

设置 RY-TencentLivePusher 中的 watermark 可以让 SDK 在推出的视频流中增加一个水印,水印位置位是由坐标选项决定。

  • SDK 所要求的水印图片格式为 png 而不是 jpg,因为 png 这种图片格式有透明度信息,因而能够更好地处理锯齿等问题(将 jpg 图片在 Windows 下修改后缀名是不起作用的)。
  • watermark 设置的是水印图片相对于推流分辨率的归一化坐标。假设推流分辨率为:540 × 960,该字段设置为:(0.1,0.1,0.1,0.0),那么水印的实际像素坐标为:(540 × 0.1,960 × 0.1,水印宽度 × 0.1,水印高度会被自动计算)。
this.$refs.livePusher.init({
    watermark: {
        img: '/xxxx/xxx/watermark.png',
        x: 0, 
        y: 0, 
        w: 0.1
        h: 0.1
    }
    ...
}, ret => {
    console.log(ret);
});

步骤 13.主播端弱网提示

手机连接 Wi-Fi 网络不一定就非常好,如果 Wi-Fi 信号差或者出口带宽很有限,可能网速不如4G,如果主播在推流时遇到网络很差的情况,需要有一个友好的提示,提示主播应当切换网络。

弱网提示

通过 setLivePusherListener 里的 onNetBusyWarn 事件,它代表当前主播的网络已经非常糟糕,出现此事件即代表观众端会出现卡顿。此时就可以像上图一样在 UI 上弹出一个“弱网提示”。

this.$refs.livePusher.setLivePusherListener({}, ret => {
    if (ret.hasOwnProperty('eventType')) {
        if ('onNetBusyWarn' == ret.eventType) {
            // 弱网提示
            console.log(ret);
        }
    }
});

步骤 14. 发送SEI消息

调用 sendMessageEx 接口可以发送 SEI 消息。所谓 SEI,是视频编码数据中规定的一种附加增强信息,平时一般不被使用,但我们可以在其中加入一些自定义消息,这些消息会被直播 CDN 转发到观众端。使用场景有:

  1. 答题直播:推流端将题目下发到观众端,可以做到“音-画-题”完美同步。
  2. 秀场直播:推流端将歌词下发到观众端,可以在播放端实时绘制出歌词特效,因而不受视频编码的降质影响。
  3. 在线教育:推流端将激光笔和涂鸦操作下发到观众端,可以在播放端实时地划圈划线。

由于自定义消息是直接被塞入视频数据中的,所以不能太大(几个字节比较合适),一般常用于塞入自定义的时间戳等信息。

this.$refs.livePusher.sendMessageEx({
    msg: 'This is a sei message'
}, ret => {
    uni.showToast({
        title: JSON.stringify(ret),
        icon: "none"
    });
});

常规开源播放器或者网页播放器是不能解析 SEI 消息的,必须使用我们的RY-TencentLivePlayer才能解析这些消息:

  1. 初始化设置中的 enableMessage 选项为true。
  2. 当RY-TencentLivePlayer所播放的视频流中有 SEI 消息时,会通过setLivePlayerListener中的 onGetMessage 通知给您。

更多功能

  • 聊天、弹幕、点赞、打赏、送礼等
  • 基础美颜
  • 背景音乐
  • 离线推送

扫码添加, 获取技术支持:

技术支持



微信号: ruanyunkeji006

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android: "android.permission.INTERNET", "android.permission.ACCESS_NETWORK_STATE", "android.permission.ACCESS_WIFI_STATE", "android.permission.SYSTEM_ALERT_WINDOW", "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.READ_EXTERNAL_STORAGE" iOS: 无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件使用腾讯云移动直播SDK会采集数据,详情可参考: https://cloud.tencent.com/document/product/454

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问