Genteure
Genteure
在房间列表页面文件菜单里可以打开,或者 `%localappdata%\BililiveRecorder\app-2.5.0\logs`
你是在什么设备上运行的?24*7运行的NAS?云服务器?还是自己日常使用的电脑? 平常会关机重启吗?会重启录播姬吗?有没有可能是直接退出了录播姬导致的文件没有正常关闭? > 在录屏因为网络等原因分段的时候 你是怎么知道是因为网络问题分段的?后面一个文件和有问题的弹幕对应的视频文件内容是连续的吗?
录播输出目录是 VM 本地磁盘吗?还是网络磁盘挂载进去的?如果是挂载的网络磁盘,有没有可能是文件写入出问题了?文件写入报错导致的断开重试,所以弹幕文件也没有正常关闭。 如果不是网络磁盘,就再观察观察吧,再出现这个情况了之后看一下日志。
这个不能证明不是磁盘导致的断开,这个文件反而证明没有因为这个问题而分段。 设置里有一个开关,目前默认是收到 `onMetaData` 之后记录到这个 txt 文件里,设置里可以改成收到了之后分段。有这个文件说明不是因为这个原因分段的。这个也不是与直播服务器的连接断开了。
录播文件断开有几个原因: - 与直播服务器网络连接异常断开(软件:本地杀软防火墙、互联网波动、B站直播服务器问题等;硬件:网线断了、WiFi不稳、路由器挂了等) - 直播服务器正常关闭连接(直播正常结束主播结束推流、没有结束直播但是直播服务器有问题关闭连接) - 文件写入错误(本地IO问题、磁盘满了等) - 标准录制模式下修复系统为了修数据断开(直播流里编码参数变动) - 连续 10 秒没有处理新的直播数据,可能因为网络问题、直播服务器问题、或文件写入问题导致,防止卡死会强制结束。 所有原因导致文件关闭的时候都会去尝试结束弹幕文件,所以弹幕文件没有正常结束应该是尝试关闭弹幕文件的时候弹幕文件就已经不能写了。
首先要知道是什么原因导致的
> 如果在每次写入弹幕的时候都加上 `` 标签 这个实现不了,用的是 .NET 的 `XmlWriter` 只能一个一个 element 写。 就算能实现,每次写数据都多写一点再 seek 回去覆盖掉只为了避免很少见的这个问题感觉也不太合理,性能低。
> 如果不用xml格式存储,而是定义一种log格式,录播完成后转换成xml,比较可靠。 最近确实又在考虑类似这样的设计了,存到数据库里之类的。不过要不要做、具体怎么实现之类的还没想明白。以前曾经有过一个大饼 #185 但是后来咕了。
> 我不知道.net的框架是怎么样的,但是以java的开发经验,我觉得不至于一个面向对象的xml框架会以这种最原始直接append的方式写文本文件吧? .NET 里面的 XML 处理有 3 套不同层面的 API 1. [XmlSerializer](https://learn.microsoft.com/en-us/dotnet/api/system.xml.serialization.xmlserializer): 把 XML 数据直接反序列化成强类型的 object,和把强类型的 object 序列化成 XML 数据。 比如录播姬FLV数据处理系统里,模拟修复部分就在用 https://github.com/BililiveRecorder/BililiveRecorder/blob/1ed0bf16b3e732e0ce1bd81fcef8a43398f44b41/BililiveRecorder.ToolBox/Tool/Fix/FixHandler.cs#L178 用这个 API 的时候,只需要考虑这个数据在运行时的结构,读写过程是个黑箱(虽然可以用 attribute 控制)。 2. [XmlDocument](https://learn.microsoft.com/en-us/dotnet/api/system.xml.xmldocument): 把 XML...
你可以读同时输出的 `.m3u8` 文件