Comments (5)
因为每个直播间编码参数、分辨率、FPS的不同,所以不能用预先生成数据的方式填充。考虑带一个 x264 做编码器,动态生成纯色视频画面用来填充。编码器设置使用最快、码率最低的设置。录播姬设置里提供修改颜色的选项,默认纯黑色 #000000
。
音频方面还需要再研究,需要检测前一段直播数据的音频编码和当前直播数据音频编码完全一致才能进行拼接,否则关闭上一个文件重开新文件。
在考虑使用 mkv 作为此录制模式的输出容器,有可能方便写入更多 metadata 如视频里从什么地方开始、到什么地方是填充画面。因为直播录制的文件写入是流式的,在文件开头添加新数据的话需要把整个文件的数据都向后移动。具体细节还需要再研究。
from bililiverecorder.
把 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.
Clip 功能感觉几乎用不到,考虑去除掉
from bililiverecorder.
是否可以将重新连接后拼接的数据通过对整个GOP进行Hash来自动寻找合适的拼接点进行拼接,例如两条连接分别为:
ABCDEFGHIJ(其中J不完整)
GHIJKLMOP
此时是否可以尝试拼接为ABCDEFGHIJKLMOP呢?
已知可能的失败因素
- B站分发直播流的时候可能因为二压而并不按照一个一个GOP规整地传输
- 如何设计算法,使得中途如果产生 ABCDEF IJKLMN 而丢失GH的情况得到正确处理
from bililiverecorder.
目前来看不太现实,应该不会实现了。
from bililiverecorder.
Related Issues (20)
- webui版本和录播姬本体版本不同步 HOT 2
- 频繁出现弹幕服务器连接断开 HOT 3
- 录制结束后产生的临时文件未能转成视频文件存储 HOT 2
- 直播服务器会提供 H.264 Annex B 格式的直播流,分辨率等变动不需要切分文件 HOT 2
- 检测访问环境,如果可能是无密码公网访问就拒绝服务 HOT 3
- 只能录制一个网站太浪费了,建议增加更多直播网站兼容 HOT 2
- 添加 B站cookies刷新机制 HOT 1
- 录制的音频声音不清晰
- 无法显示用户名,每个用户ID都为0 HOT 2
- 直播间信息显示为空,名称只有一个. HOT 1
- 支持其他直播网站 HOT 1
- 添加了--http-open-access参数但是依然不可以公网访问 HOT 1
- 弹幕服务器的连接并没有按照设置走系统代理
- 连接弹幕服务器出错 HOT 1
- Windows-Cli版判断是否为外网访问的逻辑疑似异常 HOT 1
- 请求新增批量录播修复功能 HOT 2
- (配置不当导致?)录制时发生IO错误 解密操作失败,请参见内部异常 HOT 4
- api 实现对于设置的修改 HOT 1
- 添加定时测试“录制画质”是否能达到默认设置的功能 HOT 3
- 不能自动登录 HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bililiverecorder.