flv播放一段时间后画面卡住
LeeeMooo opened this issue · comments
你好,感谢这么棒的项目。
我现在业务场景是:
通过start_relay_pull拉摄像头rtsp流,然后输出flv和hls(hls开启切片,间隔1分钟)。
flv用来网页flv.js播放,hls通过OnHlsMakeTs来保存录像ffmpeg ts转成mp4。
但是运行一段时间后会出现几条warn日志,出现时间不固定。
然后flv画面就卡住了,看请求还在继续拉数据。OnHlsMakeTs也不再触发了。
我现在的解决办法是event=open&&duration>0或者event=close&&duration=0时调用stop_relay_pull关闭这个流再重新拉流。
请问有没有好的解决办法
用 ffplay 直接播放摄像头流(不经过 lal )看看有没有 warning
大概运行多久会出现,如果时间短的话,按下面这个方式抓份数据给我看看,
大概运行多久会出现,如果时间短的话,按下面这个方式抓份数据给我看看,
出现时间不固定,有时候好几个小时才出现
我现在的解决办法是event=open&&duration>0或者event=close&&duration=0时调用stop_relay_pull关闭这个流再重新拉流。
调用stop_relay_pull(http://127.0.0.1:8082/api/ctrl/stop_relay_pull?stream_name=xxx) 后dead lock了,程序卡在了这里
lal/pkg/logic/group__relay_pull.go
Line 43 in 6fe6629
你的兼容性处理:
是在你自己的NotifyHandler实现中调用stop_relay_pull死锁了吗,
可能是有问题,默认的Notify是http异步出去的,所以没问题,
这个死锁我会修复。
另外出现问题的真正原因:
由于不好提供复现手段给我,我只能尝试性的修改一些时间戳处理的代码,然后你再测试,
到时候我通知你怎么测试。
最后,感谢使用lal并反馈问题给我。
是在你自己的NotifyHandler实现中调用stop_relay_pull死锁了吗
对,在OnHlsMakeTs里面调用的
回调中调用API死锁的问题我已经修复了,你测试一下。
你说的 PCMA -> flv.js 场景想去掉PCMA叠加静音音频的功能,我会考虑通过配置文件实现。
回调中调用API死锁的问题我已经修复了,你测试一下。
已解决
方便的话可以再试试以下方法(需拉取最新代码):
在调用
logic.NewLalServer
之前,增加
rtsp.BaseInSessionTimestampFilterFlag = false
信息汇总:
(1. NotifyHandler回调异步化,使得NotifyHandler中可以调用控制类的API(避免锁重入)【完成】
(2. 支持过滤掉非AAC格式音频,并增加AAC静音音频
现状:业务方自己hack代码支持
后续:我需要在lal中提供相应功能(通过var配置项控制)
(3. rtsp输入流一段时间后,flv无法播放,hls也不生成
- 业务方通过监控状态重新拉流解决
- 复现时间可能很长,业务方不方便抓取dump数据
- 关闭rtsp的avpacket queue让业务方继续测试
rtsp.BaseInSessionTimestampFilterFlag = false
好的,我测试一下
rtsp.BaseInSessionTimestampFilterFlag = false
好的,我测试一下
我前面没说清楚,加到logic.NewLalServer
之前哈,先设置这个参数为false,再NewLalServer
尴尬了我放在new后面了,刚测试了一个小时出现了,我再试试
还是出现了,我这次dump了数据,用的是这个
麻烦看看
https://t.wss.ink/f/b6kjgyy4hhf 密码:6907
又抓取了一段
https://t.wss.ink/f/b6lke7aycub 密码:2211
拉最新的代码,然后按上面的方法,把下面这个变量也设置为true
rtsp.TimestampFilterHandleRotateFlag = true
rtsp.TimestampFilterHandleRotateFlag = true
我测试一下,应该是false吧?
rtsp.TimestampFilterHandleRotateFlag = true
我测试一下,应该是false吧?
true,两个变量都设置为true哈,
BaseInSessionTimestampFilterFlag
TimestampFilterHandleRotateFlag