最近做的sip对讲项目,在接听时出现了视频卡顿的问题,为了排查这个问题的原因,首先想到的码流本身是否有问题还是传输到APP之后解码播放产生卡顿,所以第一反应是将传输到APP的码流写到本地,再用播放器进行播放,看看码流本身是否卡顿。
由于码流的回调是在c++函数中,无法直接获取到沙盒路径,又不愿意为了调试改动代码,所以考虑采用条件断点来导出码流。
1、首先增加一段写文件的代码
static std::string path = "";
std::string ppp = "";
FILE* fd = fopen(path.c_str(), "a+");
if((long)fd <= 0)
{
printf("=============open failed=========\n");
}else {
fwrite(audioData, len, 1, fd);
fclose(fd);
}//导出数据
2、然后增加一个条件断点
屏幕快照 2019-07-02 上午9.55.30.png- 此时的沙盒路径还未填写完整
3、在程序启动时,获取沙盒路径,并将条件断点上的路径填写完整
3.1 在didFinishLaunchingWithOptions函数中做个断点,并通过打印NSHomeDirectory()获得沙盒路径
屏幕快照 2019-07-02 上午9.59.25.png3.2 将打印的路劲补充到断点中
屏幕快照 2019-07-02 上午10.00.32.png4、然后在接听呼入时进行拉流,执行断点一次后,取消断点,就能将回调码流写入到本地
最后这个问题定位的确是码流本身有问题,过来的码流会卡顿,最后网络组排查后是由于标准RTP没有在帧头附带帧率信息,网络组会统计1S内的帧数量,计算帧率,如果1s内统计的数量没有达标就会设置为默认码率,但他们也不知道为什么会导致他那边误判帧率为1导致卡顿,最后他们通过设置默认帧率为25解决了这个卡顿问题。
网友评论