Skip to content

首开时延测试指引

donghu-jiang edited this page Feb 25, 2021 · 1 revision

版本信息

  • 版本:v1.0
  • 修改内容:
    • 初始版本
  • 修改时间:2021.02.24

###测试原理

  • 为排除sdkdemo播放器耗时干扰,测试应将sdkdemo默认播放部分去掉,转而使用数据回调形式接收音视频数据,在回调函数中将接收到数据时的时间和数据长度打印, 并与设备端就同一帧的发送时间戳进行比较,从而得出从设备发送一帧到app接收到该帧所用时间.

sdkdemo修改

sdk接口函数使用

  • 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端对应两包数据时差有较大差异现象,具体表现为对应一帧的延时为负数.