录播修复介绍

录播姬的B站录播修复系统能自动修复大部分B站录播文件经常出现的各种疑难杂症。

在标准模式下进行录制时,直播数据会经过修复系统处理,再写入硬盘。

工具箱中的录播修复功能所使用的修复逻辑和标准模式录制时的是一样的。

修复系统可能会

  • 切割输出为多个文件
  • 修改音视频数据的时间戳
  • 删除重复出现的数据
  • 删除没有作用的无效数据
  • 生成辅助播放器快进的索引

如果遇到判定为无法修复的问题,录制时会断开重连,修复工具会删除并忽略有问题的片段。
如果使用工具箱进行修复时提示遇到了无法修复的问题,请进行反馈。

修复系统不会对直播画面进行压制、编码。

能修复的文件

可以分析和修复

  • 录播姬 1.3 原始数据模式录制的 FLV 文件
  • 录播姬 1.2 或更早版本录制的 FLV 文件
  • 其他通过直接下载流方式录制B站直播,并且没有经过任何处理的 FLV 文件
  • 从直播回放下载的 FLV 文件

录播姬 1.3 标准模式录制的文件已经在录制时修复过了,不需要再使用工具箱进行修复。

不能修复 ffmpeg 或其他工具处理过的文件!
也不能修复使用 ffmpeg 从B站直播服务器录制的文件。
因为 ffmpeg 不能正确识别有问题的文件里的内容,会导致文件进一步损坏,无法修复。
如果有剪辑、转封装等需求,要先使用录播姬修复之后再用 ffmpeg 进行操作。

能修复什么问题

下面列出一些常见的有问题的录播文件的现象。
注:下面列出的是常见现象,而不是造成现象的原因。

投稿到哔哩哔哩主站时

  • 转码失败:该视频文件中时间戳有跳变,请检查文件修正跳变后重新压制上传
  • 转码失败:该视频时长超过 10 小时,请剪辑后通过分P上传(实际视频时长不到10个小时)
  • 转码失败:该视频无视频轨,请补充视频轨并重新压制上传(实际本地播放器可以播放视频画面)
  • 转码失败:该视频数据有误,请检查并修复视频数据后重新上传

使用 FFmpeg 读取时

Non-monotonous DTS in output stream 0:1; previous: 000000, current: 000000; changing to 000000. This may result in incorrect timestamps in the output file.

在本地使用播放器播放时

  • 视频开头正常,后面画面花屏、绿屏
  • 视频开头正常,后面无声音
  • 无法拖动视频进度条
  • 当前播放时间显示为几百小时
  • 拖动进度条后整个播放器卡住
  • 文件很大,但是播放器只能识别其中短短几分钟内容
  • 视频顺序播放时正常,拖动进度条后在刚才正常播放的位置音画不同步

修复技术原理说明

FLV 文件的结构就好像是一列货运火车,它有一个车头,后面跟着车厢。车厢有放集装箱的平板车,也有放煤的煤车。FLV 就好像是有三个火车头(分别是 metadata 、视频解码参数、音频解码参数)的火车,集装箱是视频数据,煤是音频数据。

录播姬的修复系统就像是火车的编组站、调车场。先解析 FLV 的数据结构,读取出一节一节的车厢,再根据一些处理规则编组成新的列车,写入硬盘。

以一条最简单的规则为例:根据之前收到的录播样本文件总结发现,如果一段录播中间出现了本应该在开头出现的 metadata 信息,通常这前后的录播是不连贯的,最好分成两个单独的文件。所以当修复系统这个“调车场”在一列“火车”中间发现了个“车头”的时候,就会从“车头”的位置把它分成两列“火车”。

录播姬的修复系统就是由多条这样的修复规则组成的。