基于ijkplayer在FFMpeg 中增加丢包数显示功能
目的: 在我们目前的应用场景中,使用ijkplayer
来进行RTSP 的拉流解码播放。但是我们设备端在传输层中并没有部署RTCP 的控制协议实现,所以无法对数据传输的丢包数进行反向收集,那就需要APP端对数据长度进行校验。
方案:
- 因为我们使用RTSP 数据传输协议,在ijkplayer 中,数据处理完全是交由
FFMpeg
来进行的,对上层和ijkplayer的SDK 层而言,收到数据包是不透明的,所以我们需要对FFMpeg
的源码进行修改。
2.在源码中,RTSP 协议传输对应的数据传输相关方法位于文件夹libavformat/rtsp.c
中,在read_packet
方法中,我们可以看到RTSP协议对应的传输类型判断(UDP or TCP)
#if CONFIG_RTSP_DEMUXER
case RTSP_LOWER_TRANSPORT_TCP:
len = ff_rtsp_tcp_read_packet(s, rtsp_st, rt->recvbuf, RECVBUF_SIZE);
break;
#endif
case RTSP_LOWER_TRANSPORT_UDP:
case RTSP_LOWER_TRANSPORT_UDP_MULTICAST:
len = udp_read_packet(s, rtsp_st, rt->recvbuf, RECVBUF_SIZE, wait_end);
if (len > 0 &