Giter VIP home page Giter VIP logo

Comments (5)

Genteure avatar Genteure commented on May 19, 2024

因为每个直播间编码参数、分辨率、FPS的不同,所以不能用预先生成数据的方式填充。考虑带一个 x264 做编码器,动态生成纯色视频画面用来填充。编码器设置使用最快、码率最低的设置。录播姬设置里提供修改颜色的选项,默认纯黑色 #000000

音频方面还需要再研究,需要检测前一段直播数据的音频编码和当前直播数据音频编码完全一致才能进行拼接,否则关闭上一个文件重开新文件。

在考虑使用 mkv 作为此录制模式的输出容器,有可能方便写入更多 metadata 如视频里从什么地方开始、到什么地方是填充画面。因为直播录制的文件写入是流式的,在文件开头添加新数据的话需要把整个文件的数据都向后移动。具体细节还需要再研究。

from bililiverecorder.

Genteure avatar Genteure commented on May 19, 2024

把 FlvProcessor 项目重构,只留下与 Flv 解析生成密切相关的逻辑,考虑改名为 Flv (去掉 Processor),把现在的各种“业务逻辑”移到 Core 项目。
为了支持多个录制模式,把直播数据处理改成插件式。

实现三种录制模式:

  • 原始 - 不做任何处理,直接把收到的数据转存到硬盘,每条连接录制成一个文件。
  • 标准 - 修改所有 Tag 的时间戳,在 Script Tag 中添加视频总长度信息,每条连接录制成一个文件。
  • 拼接 - 断开重连后如果 Sequence Header 不变,则存到同一个文件里,中间填充生成的纯色画面。
interface IStreamSession
{
  // TODO
}
interface IConnectionSession
{
  // TODO
}
interface IStreamProcessor
{
  // 录制会话开始结束,直播间状态切换时调用
  void StartSession(IStreamSession session);
  void StopSession(IStreamSession session);

  // HTTP-FLV 连接成功/连接断开
  void Connected(IConnectionSession connection);
  void Disconnected(IConnectionSession connection);

  // 处理收到的 FLV 数据并写入文件
  void HandleFlvHeader(byte[] header); // FLV 通常 9 bytes 长的 Header
  void BeforeHandle(IFlvTag tag); // 所有 Tag
  void HandleScript(IFlvTag tag); // 理论只有一个的 Script Tag
  void HandleSequenceHeader(IFlvTag tag); // 理论只有两个的 Sequence Header
  void HandleVideo(IFlvTag tag); // 不含 Sequence Header 的所有视频数据
  void HandleAudio(IFlvTag tag); // 不含 Sequence Header 的所有音频数据
  void AfterHandle(IFlvTag tag); // 所有 Tag
}

from bililiverecorder.

Genteure avatar Genteure commented on May 19, 2024

Clip 功能感觉几乎用不到,考虑去除掉

from bililiverecorder.

cqjjjzr avatar cqjjjzr commented on May 19, 2024

是否可以将重新连接后拼接的数据通过对整个GOP进行Hash来自动寻找合适的拼接点进行拼接,例如两条连接分别为:
ABCDEFGHIJ(其中J不完整)
GHIJKLMOP

此时是否可以尝试拼接为ABCDEFGHIJKLMOP呢?

已知可能的失败因素

  • B站分发直播流的时候可能因为二压而并不按照一个一个GOP规整地传输
  • 如何设计算法,使得中途如果产生 ABCDEF IJKLMN 而丢失GH的情况得到正确处理

from bililiverecorder.

Genteure avatar Genteure commented on May 19, 2024

目前来看不太现实,应该不会实现了。

from bililiverecorder.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.