断点调试用于确定APP端的码流是否正常

最近做的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.png

3.2 将打印的路劲补充到断点中

屏幕快照 2019-07-02 上午10.00.32.png

4、然后在接听呼入时进行拉流,执行断点一次后,取消断点,就能将回调码流写入到本地

最后这个问题定位的确是码流本身有问题,过来的码流会卡顿,最后网络组排查后是由于标准RTP没有在帧头附带帧率信息,网络组会统计1S内的帧数量,计算帧率,如果1s内统计的数量没有达标就会设置为默认码率,但他们也不知道为什么会导致他那边误判帧率为1导致卡顿,最后他们通过设置默认帧率为25解决了这个卡顿问题。

你可能感兴趣的:(断点调试用于确定APP端的码流是否正常)