发布摘要
-
重构Record插件,支持mp4格式(非fmp4)
-
优化HLS插件内存使用
-
rtsp远端拉流默认改成tcp协议
-
订阅者关闭增加关闭原因
-
重构summary,减少无效采集,防止并发读写
-
增加强制关闭订阅者的api
-
远端拉流遇到无法连接的地址不再无限重试
详细说明
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插件升级
-
升级了
gosip
库版本(v0.0.0-20230802091127-d58873a3fe44
) -
此外修复了一个错误的
sip
信号导致的nil
指针问题。
RTSP插件升级
-
升级了
gortsplib
库版本(v3.9.0
) -
RTSP
默认远端拉流改为tcp
协议