更新记录

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>

隐私、权限声明

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

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

插件不采集任何数据

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

许可协议

MIT协议

暂无用户评论。

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