API 描述
Android 平台提供 Native C API (C/C++ 现场设备 SDK API) 和 Java API。本文档为 Java API, 适用于 Android 系统,使用时请先引用 Android SDK aar 包。
SDK 集成说明
开发环境要求
●Android Studio 2.0+。
●Android 5.0(SDK API 21)及以上系统。
SDK 引用及依赖配置
1. 将 AAR 文件复制到工程目录下(例如:app/libs)。
2. 在 gradle 文件中增加依赖配置。
dependencies {implementation fileTree(dir: 'libs', include: ['*.aar']) //添加 SDK 依赖implementation 'com.google.code.gson:gson:2.8.9' //添加gson依赖}
权限配置
<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.CAMERA" />
混淆配置
-keep class com.tencent.trro.**{*;}
API 概览
TRROField
SDK 主入口。
API | 描述 |
获取 TrroField 单例。 | |
注册 SDK 事件监听。 | |
使用 TrroOptions 配置启动 SDK。 | |
使用 Json 配置启动 SDK。 | |
启动 SDK 视频传输托管,会自动按需推流/取消推流。 | |
停止并退出 SDK。 | |
给现场设备发送控制数据。 | |
外部输入音频数据。 | |
拉流端音频设置。 | |
外部视频流输入接口。 | |
外部编码流输入。 | |
设置远端设备操控权限。 | |
评估网络状态。 | |
获取 SDK 版本号。 |
getInstance
获取 TrroField 单例。
setListener
注册 SDK 事件监听,可获取网关连接状态、媒体信息等。
参数 | 描述 |
listener | 监听器实例。 |
initWithOptions
使用 TrroOptions 配置启动 SDK,接口为同步阻塞模式,等待信令连接成功后返回。返回值:成功 1 失败 <= 0。
参数 | 描述 |
context | ApplicationContext |
trroOptions |
initWithJson
使用 JSON 配置启动 SDK,接口为同步阻塞模式,等待信令连接成功后返回。返回值:成功 1 失败 <= 0
参数 | 描述 |
context | ApplicationContext |
jsonStr |
start
启动音视频传输业务,返回值:成功 1 失败 <= 0
参数 | 描述 |
view | SDK 采集视频流显示的 view。如果不需要 SDK 采集视频显示,可使用 start() 接口。 |
start
启动音视频传输业务,适用外部视频流输入,返回值:成功 1 失败 <= 0。
stop
停止并退出 SDK。
sendControlData
发送消息给观看端。返回值:成功 1 失败 <= 0。
参数 | 描述 |
msg | 二进制消息内容,单条大小小于1KB,每秒限制100条。 |
externalAudioData
外部输入音频数据,需要配置"audio_enable": 1 并开启外部音频输入"audio_external": 1,此时 SDK 音频采集会关闭并使用外部输入的音频数据。
参数 | 描述 |
gwid | 目标连接的现场设备 ID。 |
data | 音频 PCM 数据,16bit采样,10ms长度。 |
channel | 音频声道数。 |
sampleRate | 音频采样率。 |
audioMute
拉流端音频设置。
参数 | 描述 |
deviceId | 观看端 ID。 |
mute | true:静音。 false:取消静音。 |
externalVideoData
外部视频流输入,需要配置对应视频流 protocol 为 outside。返回值:成功 1 失败 <= 0。
参数 | 描述 |
streamId | 视频流 ID,从0开始,第2路为1,以此递增。 |
data | 图像数据。 |
width | 图像宽。 |
height | 图像高。 |
type | 图像类型。 0:YUV I420 4:YUYV 5:JPEG 推荐 YUVI420 格式:3 UYVY 6 ARGB 7 NV12 。 |
externalEncodeVideoData
外部编码流输入,需要配置对应视频流 protocol 为 outenc。返回值:成功 1 失败 <= 0。
参数 | 描述 |
streamId | 视频流 ID,从0开始,第2路为1,以此递增。 |
data | 图像编码数据,codec 类型与初始化配置中对应 streamId 视频流 codec 一致。 I 帧数据前需带 SPS/PPS 等信息。 |
width | 图像宽。 |
height | 图像高。 |
frameType | 编码类型: 0:P 帧 。 1:I 帧。 |
setOperationPermission
设置远端设备操控权限。返回值:成功 1 失败 <= 0。
同时只能有一个远端设备有 master 权限,若已有设备是 master 权限,再设置 master 权限,会取消之前设备的权限然后设置新设备。
参数 | 描述 |
deviceId | 设置权限的远端设备 ID。 |
permission | 0 guest,只有观看权。 1 master, 完全控制权限。 |
testNetworkQuality
试推流测试网络情况。返回值:无法评估网络,1:良好网络,2:较差网络,3:不可用网络。
参数 | 描述 |
streamIds | 想要进行网络探测的流 ID 数组。 |
streamSize | 想要进行网络探测的流 ID 数组的大小。 |
testTime | 连接成功后的探测持续时间,test_time 最小2s,最大10s。 |
getSDKVersion
获取 SDK 版本号信息。返回值:SDK字符串版本号。
TrroFieldListener
SDK 事件监听接口。
API | 描述 |
连接状态回调。 | |
出错事件通知。 | |
接收远端设备消息回调。 | |
编码建议信息回调,适用于外部输入编码帧场景。 | |
延迟信息回调。 | |
信令连接状态回调。 | |
媒体传输状态回调。 | |
远端混音音频数据回调。 | |
媒体传输状态回调。 | |
远端设备操控权限申请通知。 |
onState
视频流连接状态回调
参数 | 描述 |
streamId | 现场设备流 ID。 |
state | 0:未连接,1:连接中,2:已连接,3:正在断开连接 |
onError
视频流连接状态回调。
参数 | 描述 |
errorCode | 错误码。 |
errorMsg | 错误信息。 |
onControlData
接收远端设备消息回调。
参数 | 描述 |
controllerId | 远端设备 ID。 |
msg | 消息体内容,二进制。 |
len | 消息体长度。 |
qos | 消息 QoS 类型。 0:超低时延通道。 1:可靠通道。 |
onEncodeFrameInfo
编码建议信息回调,适用于外部输入编码帧场景。
参数 | 描述 |
streamId | 流 ID。 |
type | 回调类型, 0:强制关键帧请求 , 1 码率更新请求 。 |
bitrate | type为1时有效,表示建议输入的编码数据码率,单位 kbps 。 |
onLatencyReport
延迟信息回调。
参数 | 描述 |
streamId | 流 ID。 |
vcct | 视频控制闭环时延,等于视频上行延迟(不含采集)+ 控制下行延迟。 |
onSignalState
信令连接状态回调。
参数 | 描述 |
state | 信令连接状态。 0 连接建立成功(初始化首次连接成功)。 1 连接断开,内部会进行自动重连 。 2 自动重连成功 。 3 被踢下线(已有相同用户登录)。 4 用户名或者密码错误。 |
onMediaState
媒体传输状态回调。
参数 | 描述 |
streamId | 流 ID。 |
fps | 每秒帧数目。 |
bps | 每秒数据量。 |
rtt | 网络往返时间。 |
packetsLost | 丢包,丢包率= packetsLost / 255.0 * 100%。 |
packetsSend | 总发送数目。 |
stun | 穿网模式 0:host, 1:srflx, 2:prflx, 3:relay。 |
onRemoteMixAudioFrame
远端混音音频数据回调。
参数 | 描述 |
data | 音频 PCM 数据 |
length | 数据长度 |
channel | 音频声道数目。 单声道为1。 双声道为2。 多声道为 N。 |
sampleRate | 音频采样率 |
onAudioState
媒体传输状态回调。
参数 | 描述 |
streamId | 流 ID。 |
fps | 每秒帧数目。 |
bps | 每秒数据量。 |
rtt | 网络往返时间。 |
packetsLost | 丢包,丢包率= packetsLost / 255.0 * 100%。 |
packetsSend | 总发送数目。 |
stun | 穿网模式 0:host, 1:srflx, 2:prflx, 3:relay。 |
onOperationPermissionRequest
远端设备操控权限申请通知。
参数 | 描述 |
remoteDeviceId | 请求权限的remote deviceId。 |
permission | 请求的权限, 0: guest 只有观看权限, 1: master 完全控制权限。 |
TXCloudVideoView
视频流显示控件。
示例代码
SDK 初始化
//初始化配置,详细参数说明参考:https://cloud.tencent.com/document/product/1584/89794//设置流的属性TrroOptions.StreamsConfig streamsConfig = new TrroOptions.StreamsConfig.Builder().bps(2000).width(width).height(height).camera(mCamera).build();TrroOptions trroOptions = new TrroOptions.Builder().deviceId(mDeviceId).projectid(mProjectId).password(mPassword).logEnable(2) //日志级别,0:关闭,1,输出部分运行日志,2:输出详细运行日志.streamConfigs(new TrroOptions.StreamsConfig[] { streamsConfig }).deviceName(mDeviceName).build();//启动SDK,阻塞接口,建议在工作线程中调用TrroField.getInstance().initWithOptions(getApplicationContext(), trroOptions);
启动音视频传输托管
//配置视频流显示控件<com.tencent.trro.rtmp.ui.TXCloudVideoViewandroid:id="@+id/txcvv_1"android:layout_width="match_parent"android:layout_height="match_parent"/>//启动音视频传输托管TrroField.getInstance().start(txCloudVideoView);
事件回调监听
//在Activity生命周期函数中设置监听器,比如onStart方法设置监听,在onStop方法取消监听TrroField.getInstance().setListener(this);
资源释放
//在退出时释放资源,比如Activity的onDestroy方法中调用TrroGateway.getInstance().stop();