更新记录
0.0.1(2025-06-11) 下载此版本
- 首个版本,支持 Android / iOS 平台。
平台兼容性
uni-app x
Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
---|---|---|---|---|---|
- | - | 5.0 | 13 | × | × |
TiRTC-RapidKit
"RAPID" = Real-time Audio-visual Platform for IoT Devices.
为物联网视觉设备提供一个高效的跨平台音视频解决方案。
- 这是探鸽公司面向 IoT 视觉设备提供的客户端 SDK,底层完全基于 C 实现,轻量且高性能,当前 SDK 仅 基于 uni-app 技术栈作必要封装工作。
- 基于UTS 标准模式组件实现。
更多文档,见探鸽物联网视频开放平台。
环境要求
- Android 5.0 及以上,支持 ARM64 架构
- iOS 13 及以上,支持 ARM64 架构
- 建议使用 HBuilderX 4.31 及以上版本
申请接入
参考文档向平台申请接入。
调试准备
下载本插件
本页面点击下载解压后放到 uni_modules
目录下。
制作自定义调试基座
本 SDK 依赖于各端底层原生实现,因此需要制作自定义调试基座,方可在日常开发中正常运行、调试。
参考官方文档的使用自定义基座运行下的“云打包自定义基座”。
API 说明
导入 SDK
import * as rapid from '@/uni_modules/TiRTC-RapidKit'
初始化 SDK
// appId: 申请得到的 APPID
// packageName: 应用包名,使用探鸽账号体系时才需要填写;否则传空字符串即可
// 返回 true 即表示初始化成功,可以开始使用后文的功能
export function initialize(appId: string, packageName: string) : boolean
用户鉴权
// 参数为平台下发的 token,返回 true 即表示鉴权成功,可以开始使用下述功能
// 你可通过探鸽平台账号体系的登录接口、或者三方登录接口,获取到 token
export function authenticate(token: string) : boolean
实时音视频播放
1. 在页面中声明 rapid-texture
组件
rapid-kit-texture
是一个组件,用于在视图树中展示一个视频窗口,并由 SDK 负责渲染实时视频画面。
注意:你需要为每一个rapid-texture
提供一个唯一的id
,这是为了让 SDK 的播放器可以与组件建立关联。
<template>
<view>
<!-- 其他组件 ... -->
<view>
<rapid-texture id="texture_0" style="width: 100%;height: 300px;background-color: black;"></rapid-texture>
</view>
</view>
</template>
2. 创建播放器实例
/// textureId 即 rapid-kit-texture 组件的 "id" 值
/// 函数返回 “播放器” 实例
export function createLivePlayer(deviceId : string) : RapidLivePlayer
3. 播放器 API
export interface RapidLivePlayer {
// 将播放器与一个原生视频组件绑定
// 注意:必须在调用 start() 之前调用此方法
attach(textureId : string) : void
// 设置渲染状态变化回调
// 0 - 正在播放, 1 - 正在缓冲数据
onRenderStateChanged(l : ((state : number) => void)) : void
// 开始播放
start() : void
// 停止播放
stop() : void
// 销毁播放器实例,释放底层资源
destroy() : void
}
一个完整的示例
替换 pages/index/index.uvue
中的代码,即可实现一个完整的示例。
<template>
<view>
<view class="text-area">
<text class="title">TiRTC-RapidKit 示例</text>
<text class="status">初始化: {{isInitSuccess ? '成功' : '失败'}}</text>
<text class="status">用户认证: {{isAuthSuccess ? '通过' : '失败'}}</text>
</view>
<view class="button-group">
<button class="control-button" @click="handleInit">1. 初始化</button>
<button class="control-button" @click="handleAuth">2. 校验令牌</button>
<button class="control-button" @click="handleCreate">3. 创建播放器</button>
<button class="control-button" @click="handleStart">4. 开始播放</button>
<button class="control-button" @click="handleStop">5. 停止播放</button>
<button class="control-button" @click="handleRelease">6. 销毁播放器</button>
</view>
<view>
<rapid-texture id="texture_0" style="width: 100%;height: 300px;background-color: black;"></rapid-texture>
</view>
</view>
</template>
<script>
import * as rapid from '@/uni_modules/TiRTC-RapidKit'
export default {
data() {
return {
title: 'Hello',
isAuthSuccess: false,
isInitSuccess: false,
playerId: 0,
player: null as rapid.RapidLivePlayer | null
}
},
onLoad() {
},
methods: {
handleInit() {
let init = rapid.initialize("xxxx", "com.xx.xx")
this.isInitSuccess = init
},
handleAuth() {
let auth = rapid.authenticate("eyJxxx")
this.isAuthSuccess = auth
},
handleCreate() {
if (!this.isAuthSuccess) {
console.log("[handleCreate] not authenticated")
return
}
this.player = rapid.createLivePlayer("xxxxxxxxxxxx")
this.player!.onRenderStateChanged((state) => {
console.log(">>>>>>> state == " + state)
})
this.player!.attach("texture_0")
},
handleStart() {
this.player!.start()
},
handleStop() {
this.player!.stop()
},
handleRelease() {
this.player!.destroy()
this.player = null
}
}
}
</script>
<style>
.logo {
height: 100px;
width: 100px;
margin: 100px auto 25px auto;
}
.title {
font-size: 18px;
color: #8f8f94;
text-align: center;
}
.status {
text-align: center;
margin: 10px 0;
color: #8f8f94;
}
.button-group {
display: flex;
flex-direction: column;
margin: 20px;
}
.control-button {
margin: 0;
}
</style>