前言
之前在修改IJKPlayer编译支持RTSP图传的时候遇到一个双图传卡顿的问题,在github的ijk项目下留言,后续还跟一些小伙伴探讨了下。最近又发现陆陆续续有些小伙伴还有这方面的需求。刚好前几天我重新处理并编译了FFmpeg4.0在最新的系统OS15.3系统中编译不通过的问题,并且也更新了自己的库,借此机会在这里跟大家分享一下IJKPlayer支持RTSP的问题。
首先,我直接把我现在在用的支持RTSP并且优化了图传延迟的编译好的库分享给大家:
1. 配置设置:
let options = IJKFFOptions()
options.setFormatOptionValue("tcp", forKey: "rtsp_transport")
// 视频帧率
options.setPlayerOptionIntValue(30, forKey: "fps")
// 最大帧率
options.setPlayerOptionIntValue(30, forKey: "max-fps")=
// 播放前的探测时间
options.setFormatOptionIntValue(5000000, forKey: "analyzeduration")
// 以音频帧为时间基准,当视频帧和音频帧不同步时,允许丢弃的视频帧数[-1,120] 默认0
options.setPlayerOptionIntValue(30, forKey: "framedrop")
// 跳过循环滤波; 0 画面质量高,解码开销大; 48 画面质量差,解码开销小
options.setCodecOptionIntValue(48, forKey: "skip_loop_filter")
// 跳帧 CPU处理不过来跳帧
options.setCodecOptionIntValue(0, forKey: "skip_frame")
// 设置无packet缓存
options.setPlayerOptionIntValue(0, forKey: "packet-buffering")
options.setFormatOptionValue("nobuffer", forKey: "fflags")
// 不限制拉流缓存大小
options.setPlayerOptionIntValue(1, forKey: "infbuf")
// 预读数据的缓冲区大小 整数–[0,15 * 1024 * 1024] 默认15 * 1024 * 1024
options.setFormatOptionIntValue(1024*1024*10, forKey: "max-buffer-size")
// 停止预读的最小帧数。即预读帧数大于等于该值时,将停止预读。2-50000 默认50000
options.setPlayerOptionIntValue(3, forKey: "min-frames")
// 启动预加载
options.setPlayerOptionIntValue(1, forKey: "start-on-prepared")
// 设置探测包数量
options.setFormatOptionIntValue(4096, forKey: "probesize")
// 通过立即清理数据包来减少等待时长
options.setFormatOptionIntValue(1, forKey: "flush_packets")
// 开启硬解码
options.setPlayerOptionIntValue(1, forKey: "videotoolbox")
// 最大缓存 毫秒
options.setPlayerOptionIntValue(1000, forKey: "max_cached_duration")
// 清理DNS
options.setFormatOptionIntValue(1, forKey: "dns_cache_clear")
options.setFormatOptionIntValue(-1, forKey: "dns_cache_timeout")
// 设置自动重连
options.setFormatOptionIntValue(1, forKey: "reconnect")
// 设置连接超时时间
options.setFormatOptionIntValue(15 * 1000 * 1000, forKey: "timeout")
2.我编译好的库下载地址:
IJKMediaFramework.framework.zip 链接: pan.baidu.com/s/15slcwBmL…
其次:这个版本的库编译修改的部分,都是在网上找了一些大神的贴子,综合处理下来完成的
1. FFmpeg的修改
- 基于FFmpeg4.0做修改,避免双图传卡顿问题
- 适配RTSP的支持
- 处理延迟问题
2. IJKPlayer的修改
- 处理编译报错问题
- 处理H265支持
- 追帧问题
- 修改主线程警告问题