08 局域网 - SJTU-Art-Center/ACLiveConsole GitHub Wiki
0800
局域网
行动代号:LAN
你需要先安装 OBS,以及其所需要的 Visual C++ 2010 Redistributable 运行库再使用本功能。
局域网应当作为有距离的传输方式。对于实时性情形,正常的方案应当使用专用线材连接信号。
3.8.1 版本新增的局域网串流功能,启用了两个 nginx 服务器: 私有的 Private nginx
(地址:rtmp://127.0.0.1:1935/live
)和公有的 Public nginx
(地址:rtmp://[LAN IP]:1935/live
)。前者支持分流,后者支持收发。
在未来的版本中,可能会想办法重新编译 nginx,让其只使用一个 nginx 就可以实现两个功能,并且优化性能。由于 nginx 是 linux 系统原生的软件,在 AC Live Console 上是一种 Windows 移植版本,在没有优化的情形下,性能上会有一定的下降。
现有的模型是基于链表模式的局域网传输模型。现在的功能能够实现:在局域网范围内所有的电脑都可以接收到本电脑的信号(Public nginx
起作用,连接图是完全的),但是传输入口是需要使用本地计算机才可以访问的(Private nginx
起作用),理论上应当需要禁止其他电脑访问该入口,但是现实中已经有一层局域网密码保护,而且在端口被本地占用的情况下,是拒绝访问的,所以现在的防御性已经足够好了。
如果系统被攻入,可以通过监视器及时监视到本地情况,进行进一步操作。未来的版本中希望能够整合二者,减少入口的暴露。
当前的版本,链的传输延迟是毫秒级的,但是接收器 VLC 却是有缓冲机制的,增大了延迟。如果想做到毫秒级接收,需要考虑从更底层的ffmpeg开始开发起来。
当前的版本,能够传输 1080P 的视频流,能够传输多少清晰度取决于网络交换机的传输吞吐能力。
至于学校网络内部的传输,我们有很大的把握说内部设立了防火墙,但是我们或许可以通过向学校网络信息中心的申请,得到没有防火墙的网口,从而实现内部传输。暂时没有看到学校的硬件直播服务用于多地直播或者是直播流整合。
0810
信号的发送与接收
设置起来也不是那么复杂。
0810.A
分机发送信号
- 在
配置
选项卡内,选取局域网
的推流平台选项。 - 然后在推流地址内选择
发送
选项,这时候看到一个播流地址,将这个地址发送给直播电脑。请注意在网络配置变化时,这个地址也会产生变化。 - 单击
+1流
按钮,在数据表内看到一个局域网播流的行。 - 按下
转换并写入
按钮。这一步将私有的服务器(Private nginx
)与共有的服务器(Public nginx
)相连接。 - 在
推流
选项卡内单击开始推流
按钮。
请注意:在 OBS 推流配置中,使用私有地址输出(
rtmp://127.0.0.1/live
),以整流。直接使用公有服务器稳定性较低。
0810.B
主机接收信号
- 在
配置
选项卡内,选取局域网
的推流平台选项。 - 然后在推流地址内选择
接收
选项。 - 将分机的发送地址填入播流地址的文本框中。
- 单击
+1流
按钮,在数据表内看到一个分机的行。如果有多个分机,重复第 3-4 步。 - 在
推流
选项卡内单击启动监视
按钮。在监视器内进一步监视。
配置完成后,如果需要发送到其他的推流平台,按照 02 配置 中的操作配置其他平台,
转换并写入
按钮、开始推流
按钮按下后,在分机也可以得到主机的放送信号。这就完成了内网的联系。
0820
外置低延迟显示器
请使用在要求实时互动延迟较低的场景,比如实时连线。
后来发现,对接收端进行改造可以大大减小延迟,使用新播放器的 FFplay
可以将延迟减少至 1000ms 以内。
由于 VLC 为了支持多种格式,自己有一套缓冲机制,网上也有大牛直接改了中层代码,绕过了缓冲机制,请见:VLC优化(2)修改VLC读缓冲机制,我目前还不知道他改的是什么,所以暂时没有考虑这个方案。(可能这个方案看起来也很靠谱。)
然后我又找到了一个关于 Winform 直接使用底层 FFmpeg API 接收 RTMP 流的 C# 示例 CSharpVideoDemo ,而且借助友校(没错,就是未来百个雷课堂
的母校)的 TUNA 学生组织的 金枪鱼之夜:FFmpeg杂谈 讲座,学习了一些 FFmpeg API 的相关知识,我 fork 了原工程,放在了 CSharpLowLatencyRTMP ,希望能够移植到 WPF 中。
现在的 FFplay 外接窗口使用了 -fflags nobuffer
强行其不使用缓存,这样就降低了延迟。
关于嵌入软件中这个分支,仍然在探讨中(不保证能做出来),请见:CSharpLowLatencyRTMP 的 wiki 。
0821
延迟上的变通方式
层级不同:我们推荐将对延迟要求没有那么高的视频源放入 AC Live Console 中管理,比如 B 站源、输出信号监视、弹幕公屏。
层级相同:或者是将所有的视频源都放入同一级子级。相邻的视频源由于网络情况不同延迟会有浮动。可以尝试通过更改网络延迟的方法(见 0654
网络延迟设置 )粗调网络延迟。
OBS校表:而对延迟要求较高的,我们可以放入 OBS 统一进行管理。既然我们没有办法做到无延迟播流,那我们就可以都延迟,这样在一个稍后的时间点上是被调整同步的,这样也是可以的!
注意:这能够让播出内容同步,但并不意味着能在互动上的同步,虽然治标不治本,但是,通过这种办法,至少局域网内(拍摄同一事物)是可以保证同场景同步的,这已经是一个很好的解决方案了。
安装 VLC 播放器后,我们可以看到 OBS 现在拥有了 VLC 视频源插件(它支持 VLC 的大部分功能)。然后我们添加 渲染延迟
的效果滤镜(方法类似于在0766
在 OBS 中启用色键功能 ,里面有相关教程图),手动调整各画面的延迟,让它们同步。
0822
OBS 校表
采用北京时间作为标准参照。
- 右键右下角的日期与时间,选择
调整日期/时间
。 - 在
同步时钟
里,点击立即同步
。 - 按照
0810
信号的发送与接收 将两机设置好,做好发送和接收信号的相关工作。 - 在
设置
里点选显示系统时间
,返回推流
选项卡,将会看到毫秒级的系统时间。 - 在 OBS 中推流 AC Live Console 窗口。
- 在 主机 端侦测延迟,启用截屏功能查看两者时间差。
数学提示:一般情况下,只要将最后五位数相减就可以得到本机需要延迟的毫秒数。
- 设置本地输出视频源的对应毫秒数的
渲染延迟
。
渲染延迟效果表面上会有 500 ms 的限制,如果超过这个值,我们可以多叠几个渲染延迟效果。
实验说明:OBS 内的 VLC 插件对于 RTMP 的接收没有 AC Live Console 稳定。可以在 OBS 中采用对弹幕公屏窗口捕获的方法输入 AC Live Console 的视频源。
如果集成于 AC Live Console 中,可以调整
0654
网络延迟设置 粗调。
0830
无人机的信号接收
本段适合任何具有 RTMP 直播流直播功能的拍摄设备。
大疆(DJI®)的无人机,其手机软件具有实时直播的功能。如果需要将这一个信号进行整合,就需要一个服务器去暂时接收这些信息。(按照原来的方式,只能直接推流到 B 站)
通过 AC Live Console,我们大致有三种方式将这一路信号整合:单节点、双节点、套娃节点。
0830.P
启用电脑移动热点功能
打开右下角的 通知中心
,选中 移动热点
。
右键可以设置热点的名称、密码。
0830.A
单节点
资源占用最小、最快速
- 只使用一台电脑,让接收手机连上该电脑的热点。
- 打开直播电脑,通过
0810.A
分机发送信号 启用发送端。
请注意:先选择
接收端独立
选项后,再单击转换并写入
。我们不希望端口冲突的事情发生。
0830.B
双节点
多节点提高稳定性、减少单一占用
- 将分机电脑连接到路由器上。
- 通过
0810.A
分机发送信号 启用发送端。 - 打开分机电脑热点,接收手机连到该热点上。
0830.C
套娃节点
接收手机距离比较远,需要一个分机电脑作信号放大
- 打开直播电脑的热点。
- 在热点信号覆盖范围内,将分机电脑的网络连到直播电脑的热点上。
尽可能使用上一种方法通过拉网线的方式传输数据。
- 将分机电脑的热点打开,在其热点信号覆盖范围内,将接收手机的网络连接到分机电脑上。
0830.Z
接收手机的设置
- 按下右上角
···
打开选单 - 点选
选择直播平台
。 - 选择
自定义直播
。 - 然后输入上一个节点的
播流地址
。 - 完成设置,开始直播。
0840
云直播
这是最后的备用方案。
由于 Zoom 有画质清晰度的限制,如果真的追求画质的话,可以借助云平台进行直播流的内部传输。
比如,腾讯云平台,每个终端需要申请一个个人账号,验证也比较容易。新用户赠送 20G 的初始流量(新用户9.9元 100G 够用了)。
但是,播流地址需要具有备案的域名支持,由于 AC 还没有自己的域名,所以使用本方案需要提前准备一段时间,创建网站,至少是构建一个可以用于传输的域名。
或者是借一个域名。
每个人将自己的直播流推流至云平台,然后直播电脑控制台使用播流地址接收,
A 由 AC Live Console 作为导播(简易、配置有要求)(仅适用于对延迟要求不高的流,对比见 0821
延迟上的变通方式 )
B OBS + VLC 导播(复杂、优化更好、可以设置延迟)
最后由 OBS 截取窗口输出。
这种方案使用快直播功能(慢直播也行,前者可能需要商业洽谈),由于使用了自己制作的功能,一场晚会产生的费用大概 10 元以内,域名 31 元(生成二级域名免费),共 41 元。
0841
云导播
如果完全依赖于云的话,可以考虑云导播功能。
腾讯云的 云导播功能 将于 5月1日 停止内测,内测结束后就不必申请,整个工作流程可以依赖于腾讯云的方案,不必下云就可以实现在线推流。
它挺强大的(比我这种好很多,是一种成熟的方案),估算每场晚会的云导播费用大概为 170 元(按 4h 计算)。
0842
Zoom 裁剪方式
如果不追求画质的话,可以使用这种方案,也不错。研毕应该就是这么做的。
中心思想:使用 OBS 对 Zoom 画面进行裁剪,按住 Alt
。
0843
将 OBS 画面嵌入 Zoom 中
安装 OBS-VirtualCam 插件。
0844
移动端直接腾讯云
直接腾讯云demo,直接手机推流,然后将连接发送至接收主机就可以直接使用了。
码率有上限,<2000kbps。
0845
绕过域名备案 使用测试功能播流的办法
推流后,在腾讯云控制台的流管理菜单中,点击测试
,上方的地址就是播流地址,就可以用于播流。
播流过程中请不要关闭该窗口,否则会造成播流丢失。测试窗口就可以启用播流。这算是一个漏洞。
不确定这个漏洞何时会补上。