SDK 1.0 和 2.0 差别挺大的,目前SDK 2.3.0是最新版本
一、资源文档
1. Github开源资源
2. 官网资源
其实这部分的资料也是在Github上的,Github上的资源会比较新。
二、 SDK函数
这是SDK 2.3.0所有的接口
1 | public static native void setCallback(XP2PCallback callback); |
SDK函数调用顺序:
- setQcloudApiCred:设置密钥
- setCallback:回调
- startServiceWithXp2pInfo:初始化P2P连接
- runSendService:如果没有发送需求可不调用该接口
- dataSend:如果没有发送需求可不调用该接口
- stopSendService:该接口暂时不用调用
- stopService
三、P2P连接
1.通过密钥连接
- setQcloudApiCred(“xxx”,”xxx”)
- setCallback(this)
- startServiceWithXp2pInfo(id, productId, deviceName, “”)
这就是官方sdkdemo里面连接设备的核心函数,其中setQcloudApiCred的两个参数就是demo登录时填的密钥secretId
和secretKey
。
这种方式做调试方便,但同时权限也是非常高,在正式App中使用不合适。
2.通过xp2p_info连接 (采用此方式)
- setCallback(this)
- startServiceWithXp2pInfo(id, productId, deviceName, “xxx”)
xp2p_info这个参数在设备上线时上传给SDK服务器,我们自建后台可以通过云API获取到。
初始化P2P连接时,给startServiceWithXp2pInfo()传入xp2p_info参数即可连接设备。
官网文档摘录:
SDK需要的xp2p info需要App侧从自己的业务后台获取;
获取到xp2p info后,可以通过上述的startServiceWithXp2pInfo
接口将该info传给SDK,示例代码如下:
1
2
3 String xp2p_info = getXP2PInfo(...) // 从自建后台获取xp2p info
XP2P.setCallback(this)
XP2P.startServiceWithXp2pInfo(id, product_id, device_name, xp2p_info)
四、播放音视频
在连接上P2P的前提下,连接音视频也非常简单:
- val flv_url = XP2P.delegateHttpFlv(id)
- 使用ijkPlayer播放 flv_url
注意:如果P2P没有连接上,这里获取的flv_url为null
我分析这是将设备端的音视频封装为FLV格式,ijkPlayer本身是支持这些格式的,再经过自己魔改一
下ijkPlayer使得它支持P2P传输,所以App开发者也不需要自己解码了,给ijkPlayer配一个TextureView就能播放了。
五、说话、发送声音
步骤:
XP2P.postCommandRequestSync()
发送信令检查设备的状态(是否允许语音通话)XP2P.runSendService()
启动服务- 录音PCM,PCM编码ACC,ACC封装为FLV
XP2P.dataSend()
发送FLV数据XP2P.stopSendService()
停止服务
注意:语音编码可以采用其他如G711A、PCM,但必须封装为FLV,否则不能发送。
FLV格式请参考【FLV封装格式解析】
六、云台信令
postCommandRequestSync
发送信令
信令内容:
1 | 控制ipc左移:action=user_define&channel=xxx&cmd=ptz_left |
七、自定义信令交互
postCommandRequestSync
发送信令
格式: action=user_define&channel=xxx&cmd=xxx
自定义数据必须跟在 cmd=xxx
后面
八、回放
1.本地回放
postCommandRequestSync
用查询录像(action=inner_define&channel=0&cmd=get_record_index&start_time=000&end_time=111
)- ijkplayer点播(
ipc.flv?action=playback&channel=xxx&start_time=xxx&end_time=yyy
) - 暂停回放、继续回放
- 录像进度条滑动
2.云回放
- 云API查询录像
- 获取m3u8 URL
- ijkplayer点播