-
Notifications
You must be signed in to change notification settings - Fork 22
首开时延测试指引
donghu-jiang edited this page Feb 25, 2021
·
1 revision
- 版本:v1.0
- 修改内容:
- 初始版本
- 修改时间:2021.02.24
###测试原理
- 为排除sdkdemo播放器耗时干扰,测试应将sdkdemo默认播放部分去掉,转而使用数据回调形式接收音视频数据,在回调函数中将接收到数据时的时间和数据长度打印, 并与设备端就同一帧的发送时间戳进行比较,从而得出从设备发送一帧到app接收到该帧所用时间.
-
android接口修改:
- 去掉sdkdemo自带播放代码
mPlayer.dataSource = url mPlayer.prepareAsync() mPlayer.start()
- 添加音视频数据接收回调接口
XP2P.startAvRecvService("action=live")
- 在数据回调接口中打印数据长度和接收时间
override fun avDataRecvHandle(data: ByteArray?, len: Int) { // 音视频数据回调接口 val df = SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS") val date= df.format(Date()) L.d("avDataRecvHandle: recv len: $len, recv time: $date") }
-
ios接口修改
- 关掉sdkdemo自带播放代码,打开“数据写入文件”的开关,这是会走裸流传输逻辑
[TIoTCoreXP2PBridge sharedInstance] startAvRecvService];
- 在数据回调接口中打印数据长度和接收时间
@protocol TIoTCoreXP2PBridgeDelegate <NSObject> - (void)getVideoPacket:(uint8_t *)data len:(size_t)len; @end
-
C++层对应接口修改
- 用户也可以直接修改native层对应接口
- C++层添加音视频数据接收回调接口:
startAvRecvService()
- C++层在数据回调接口:
av_recv_handle_t()
,用户若直接使用C++层接口函数,该接口可根据实际需求自行定义,在该接口中打印接收数据长度和接收时间即可.
- 设备端在送入sdk帧时打印毫秒及时间戳和该帧大小以及帧类型(音频/视频),方便与app端进行对比
- app接接收到的数据过大时会被分包,因此要准确判断一帧接收完成需要跟设备端对比数据长度
- 由于app端和设备端系统时间可能不一致,因此可先计算出二者的时间差,在计算延时时将该时间差也计算在内即可.
- p2p无法穿透时,数据传输会使用turn服务中转,因此会出现app端前后两包数据时差与camera端对应两包数据时差有较大差异现象,具体表现为对应一帧的延时为负数.