
发布摘要
-
优化HLS插件内存使用
-
rtsp远端拉流默认改成tcp协议
-
订阅者关闭增加关闭原因
-
重构summary,减少无效采集,防止并发读写
-
增加强制关闭订阅者的api
-
远端拉流遇到无法连接的地址不再无限重试
golang流媒体框架,重构Record插件,支持mp4格式(非fmp4)
详细说明
Record插件更新
本次发布中,Record插件更新代码较多。
支持mp4格式
原本的支持的mp4格式为fmp4格式,有用户反应文件播放时无法拖放。这是由于fmp4的格式导致的,fmp4格式是一种流媒体格式,适合直播场景。本次修改为录制原始mp4格式。值得注意的时候,这种格式需要在录制完成的时候对文件再次修改,因此如果在文件没有写完时直接关闭进程会导致录制的文件不完整。原来的fmp4代码依然保留,可以通过配置fmp4来启用。fmp4和mp4不可同时开启录制。
代码重构
主要调整内容是将不同的录制格式的逻辑代码更加统一,更多通过基础结构体完成必要工作。并修复了一个api启用录制时没有将信息存入正在录制的列表中。
增加功能
api调用录制的时候,增加了两个参数,一个是fileName用于自定义文件名。举例:原本录制的live/test文件会是:record/live/test.flv。当我们通过调用http://localhost:8080/record/api/start?streamPath=live/test&fileName=abc后,录制的文件是:record/live/test/abc.flv。
引擎更新
订阅关闭原因
订阅者在停止时日志上显示的信息较少,并不能反映出这个订阅者停止订阅是由于什么原因导致的,对排查问题造成比较大的困扰。本次更新增加了订阅者在主动或者被动关闭时的原因提示。
强制关闭订阅
有用户反馈需要将某个订阅者关闭,因此增加该api。http://localhost/api/stop/subscribe?streamPath=xxx&id=xxx。其中参数id代表这个订阅者的唯一ID。
订阅者生成默认ID
这条是为了上面这条服务,订阅者之前的ID没有任何限制,因此可能是空的。本次更新后,如果订阅者的ID在订阅的时候为空,将会默认赋予一个唯一的ID。
优化summary
原来的summary会每隔1s运行一次。在没有访问summary信息时候会额外带来一些消耗。本次更新后,summary会在请求序列化的时候进行采集,但采集的频率会限制,1s内不会执行两次。通过缓存机制也防止并发访问summary序列化时导致的错误。
远端推拉防止无限重试
由于之前退出重试需要根据流关闭状态确定,而错误的远端地址会导致流尚且创建就报错,引起无限重试。本次更新增加了这部分判断。
AnnexB兼容性
某些设备输出的PS流里面的H264数据会有一些不规范的数据。具体表现是I帧数据后面出现了00 00 00 01分隔符,但后面跟的NaluType为8(PPS)。从二进制看并非PPS数据,此时引擎如果处理为PPS后,会导致PPS超大,对后续的RTP打包造成错误。因此目前处理如下:遇到I帧后,本次AnnexB数据后续均视为I帧的一部分。
其他更新
优化HLS内存使用
HLS插件中增加二级缓存,HLS流退出后将复用这个流用到的内存池,减少内存申请。
GB28181插件升级
-
此外修复了一个错误的sip信号导致的nil指针问题。
升级了gosip库版本(v0.0.0-20230802091127-d58873a3fe44)
RTSP插件升级
-
RTSP默认远端拉流改为tcp协议
升级了gortsplib库版本(v3.9.0)