Monibuca / plugin-hls

HLS协议的实现,提供HLS协议拉流,和HLS的写磁盘功能
MIT License
40 stars 40 forks source link

fix: fix hls for play #14

Closed zjx94 closed 11 months ago

zjx94 commented 11 months ago

1、在播放hls的时候,在不同推流中会出现第一个ts的duration很大的情况

EXTM3U

EXT-X-VERSION:3

EXT-X-MEDIA-SEOWENCE:0

EXT-X-TARGETDURATION: 395

EXTINF:394.760,

h2641696835298 ts

EXTINF:2.830,

h2641696835298 ts 解决方法: 在frag函数中默认首次为2即可

2、在播放hls的时候,出现第一个ts和第二个ts同名的情况,会导致后续相关数据结构load或store导致对象发生改变,出现无法正常播放的情况。(如第一个ts只有PMT数据600+B的情况) 解决方法: 测试发现是第一个gop和第二个gop容易在1秒内完成,而ts命名是用秒来命名,所以会导致ts同名,在frag函数中对ts命名增加hls_segment_count来区分即可。

3、在播放hls的时候,出现第一个ts实际是无效的情况,因为原文中先进行Store再为t.ts指定下一个对象 hls.memoryTs.Store(tsFilePath, t.ts) t.ts = &MemoryTs{...} 解决方法: t.playlist和ts.infoRing里的内容分开管理,infoRing的长度为playlist长度+1 在第一个ts生成后记录到infoRing里;在第二个ts生成后,将前一个ts写入playlist,再讲第二个ts记录到infoRing里;以此类推 且第一次播放测试与中途播放测试均正常

langhuihui commented 11 months ago

不要用fmt.Println输出日志,使用对象带的 logger 来输出,根据需要使用 debug 和 info 等,使用英文,这样可以支持多语言

zjx94 commented 11 months ago

嗯嗯,我打印的是测试用的,第一次提交发现没删完全,后面提交的一次的104902d就删掉了fmt打印