acgnhiki / blrec

Bilibili Live Streaming Recorder 哔哩哔哩直播录制
GNU General Public License v3.0
569 stars 39 forks source link

关于fmp4真原画流独有问题'返流'的对策请求 #227

Open Sodapopoo opened 8 months ago

Sodapopoo commented 8 months ago

fmp4流真原画的独有问题 ①返流 ②固定断流

疑似fmp4流真原画的独有问题 ③画面撕裂

【关于返流】 返流是一种特殊的,只存在于fmp4真原画流的问题,其他的fmp4二压流(二压原画及蓝光等)和flv流(真原画和二压)都没有该问题 fmp4流断流后再次连接fmp4真原画流,或者下播后短时间内重新开播,就有概率出现返流 重新开始录制之后的数秒到数分钟内,会输出之前已经录过的流,就像吃过的东西吐出来了一样,我将其称之为‘返流’ 不管该直播间是既有flv流又有fmp4流还是只有fmp4流,都会观察到该现象 只有真原画流存在的直播间暂时没有观察到这一现象 就是说,返流目前只在有fmp4二压流的直播间出现

在ffmpeg合并返流的m3u8时,很有可能会提示时间戳不连续的问题 并且,有时候这种返流是不稳定的,可能一会输出现在的流,一会输出以前的流 我称之为交替性返流

返流录播大部分在5分钟内恢复正常,我遇到过最长的返流有12分钟以上才恢复正常 如果主播反复出现断流,每次返流的持续时间会有延长 有趣的是,返流录播恢复正常之后的流跟弹幕轴是完全对得上的

【关于固定断流】 固定断流其实分为两种情况,一种是切m4s片段的时候切坏了,一种是某个CDN推流不成功(大部分情况是区分不开这两种状况的) 切坏了就是,不管用什么ip录制,不管这次录制时的CDN稳定性如何,这次的录播都一定会出现的fmp4真原画流独有的断流 是在推流前切分m4s片段的时候就有的问题 beta2版本现在可以较为稳定的检测到固定断流

【关于画面撕裂】 fmp4真原画很容易撕裂画面,二压原画和其他画质会撕裂画面吗?我没什么印象了 但是我观察固有断流时发现一个现象,画面撕裂跟固有断流其实是绑定的 因为画面撕裂是时间戳不连续导致的,某个片段出问题之后画面参数、帧数不一样,合在一起就会撕裂 但是二压流的片段都被b站压过,参数是相同的,即使缺了一块,撕裂的可能性也很小

关于fmp4二压流的固有断流问题:我暂时没有发现二压流有固定断流的问题,但是二压流有别的问题,除了画质不好之外,还有容易卡顿、重复的问题 不过,这些问题跟flv的二压流是完全相同的,并没有独有的fmp4二压流问题 flv流是不存在固定断流的,flv流虽然有概率出现数据缺失,却不可能会在推流没问题的情况下有某个固定时间点,所有CDN的录播都存在断流 另外,连接不佳导致的复读不是返流问题,而是所有流都有的问题 fmp4流在连接不佳时,尤其是断线之后重新连接容易发生画面撕裂,而flv流在断线后的过渡十分圆滑

【fmp4和flv优缺点】 fmp4的好处是更容易请求到真原画流,开始录制的时间一般比flv早 fmp4把流分成一个个小片段再合起来可以几乎完全的避免音画不同步的问题 fmp4请求之后比较稳定,不容易断 我甚至录出来过两个服务器录出来的录播连哈希值都相同的情况,还不止一次,flv就没有过 但是,我要说的重点来了,根据我的观察,fmp4流的优势区间是在主播的推流比较稳定的情况下才有的 如果主播的网络推流十分拉跨,尤其是用手机户外直播的,还是会很容易断,而且fmp4真原画流独有的问题 返流、画面撕裂等会让录播的观看体验很糟糕,很有可能还不如flv流录制的效果好

flv流的好处是过度圆滑,杜绝返流问题,也没有固定断流(固定断流是切片fmp4片段的时候切坏了或者推流不成功导致的) 毕竟flv流是连续的单个流而不是切出来的片段拼接起来的 flv流有概率出现音画不同步 flv流很难获取到真原画流,一旦网络波动很容易断掉,一般开播时获取流的耗时较长 对我来讲flv最大的问题是很难检测出数据缺失的问题(缺失数据概率低),当然断流可以检测出来

(自问自答环节) 你问我怎么知道的?我以前会对比录出来的fmp4录播和flv录播的长度。 有一次正好发现有flv录播缺了一大段时间,这一次是录播姬上,也没有提示断流和网络卡住,但是flv中间有个位置比fmp4缺了将近十分钟 还有一次是blrec录的,这次缺了几十秒,同样也没有提示断线和硬盘卡住,没有断流标签 录播姬那次可惜我没保留样本 blrec那次我保留了

【请求对策】 目前已知:fmp4真原画存在独有问题返流 其他fmp4画质,包括二压原画,以及所有flv流都没有该问题

你可能会说,那直接录flv不就完了吗? 确实,我就是这么干的,但是这样依然有无法顾及的地方 现在还有很多只有hls流的直播间,所以返流对策里,手动和自动切换fmp4二压画质是必不可少的。 我的想法是,在选择hls流录制的时候增加一个额外的选项,不过现在不是已经实装了没有flv自动切换fmp4流吗? 所以直接增加一个单独的额外选项吧,只要打开,哪怕是flv自动切fmp4的直播间断流后也会生效 打开之后,hls流断线或短时间内重新开播自动切换flv,没有flv自动切hls二压画质,除非该房间只有真原画流存在 如果可以的话,能像录播姬那样自己填画质优先级,让用户决定优先切换哪种流的哪个画质是最好

我还需要一个手动的对策,就是手动关闭录制的同时可以再次开启录制,目的是为了切换二压流 最好是一键式的功能,不过要跟剪辑功能区分开 现在的blrec关闭录制按钮之后,必须要等待转mp4完成之后才能重新开始录制,这就使得我想手动切换二压流时必然会缺一大段录播,所以手动切换目前不可用

【额外请求】 弹幕因为意外关闭录制程序等原因出现就无法完成写入,能否增加一个设置,比如可以设置弹幕最小写入数量或者其他措施来保证弹幕的意外写入

Sodapopoo commented 8 months ago

【返流样本】 链接直达32分13秒~37分26秒 返流12 14 19 链接直达 返流12 14 21 返流样本1.zip 返流样本2.zip 返流样本3.zip.001.zip 返流样本3.zip.002.zip 返流样本4.zip.001.zip 返流样本4.zip.002.zip 返流样本4.zip.003.zip 返流样本5 只有fmp4流 二压与真原画的区别.zip.001.zip 返流样本5 只有fmp4流 二压与真原画的区别.zip.002.zip

【固定断流样本】 固定断流样本1.zip 固定断流样本2.zip 固定断流样本3.zip

【画面撕裂样本】 画面撕裂样本.zip

【flv流对比样本】 返流样本1 flv对比用.zip.001.zip 返流样本1 flv对比用.zip.002.zip 返流样本2 flv对比用.zip 返流样本4 flv对比用.zip 固定断流2+3 flv对比用.zip

(分卷这样重命名) 12 23 分卷这样重命名

Sodapopoo commented 8 months ago

beta2版本使用的ffmpeg录制的fmp4录播记录了编码器: @奶粉 @KNaiFen 可以把录播站用的ffmpeg更新一下,beta2.0版本使用的ffmpeg版本合并m3u8可以记录编码器,这样录播站的录播就能把hls流跟flv流区分开了,否则不能通过ffprobe来判断录的是什么流,对比的时候很麻烦

Sodapopoo commented 8 months ago

今天发现了二压fmp4流的固定断流,看来固定断流不是fmp4真原画流独有的问题 12.23二压固定断流.zip

Sodapopoo commented 8 months ago

提供一个CDN推流失败样本,这种固定断流用不同的CDN是有概率录下来的 12.24CDN推流失败固定断流.zip.001.zip 12.24CDN推流失败固定断流.zip.002.zip

Sodapopoo commented 7 months ago

我前段时间录制了一份PCDN的hls真原画流,结果并没有返流现象,并且比flv开始时间更早 返流现象似乎是像204这样的大服务器才会出现的,开播一段时间后产生了缓存碎片,断流之后推流的时候没有处理掉这些缓存碎片,就会发生返流。地区CDN也会有返流,但是PCDN不会,因为从原理上来讲PCDN似乎没有产生这样的缓存碎片的条件,但是我也不敢打包票保证一定没有。我认为PCDN真原画流是比二压流更好的返流对策

返流对策优先级排序: FLV真原画流>PCDN真原画流>二压流

pcdn真原画流与返流对比.zip