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. 配置选项卡内,选取局域网的推流平台选项。
  2. 然后在推流地址内选择发送选项,这时候看到一个播流地址,将这个地址发送给直播电脑。请注意在网络配置变化时,这个地址也会产生变化。
  3. 单击+1流按钮,在数据表内看到一个局域网播流的行。
  4. 按下转换并写入按钮。这一步将私有的服务器(Private nginx)与共有的服务器(Public nginx)相连接。
  5. 推流选项卡内单击开始推流按钮。

请注意:在 OBS 推流配置中,使用私有地址输出(rtmp://127.0.0.1/live),以整流。直接使用公有服务器稳定性较低。

0810.B 主机接收信号

  1. 配置选项卡内,选取局域网的推流平台选项。
  2. 然后在推流地址内选择接收选项。
  3. 将分机的发送地址填入播流地址的文本框中。
  4. 单击+1流按钮,在数据表内看到一个分机的行。如果有多个分机,重复第 3-4 步。
  5. 推流选项卡内单击启动监视按钮。在监视器内进一步监视。

配置完成后,如果需要发送到其他的推流平台,按照 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 校表

采用北京时间作为标准参照。

  1. 右键右下角的日期与时间,选择 调整日期/时间
  2. 同步时钟 里,点击 立即同步
  3. 按照 0810 信号的发送与接收 将两机设置好,做好发送和接收信号的相关工作。
  4. 设置 里点选 显示系统时间,返回 推流 选项卡,将会看到毫秒级的系统时间。
  5. 在 OBS 中推流 AC Live Console 窗口。
  6. 主机 端侦测延迟,启用截屏功能查看两者时间差。

数学提示:一般情况下,只要将最后五位数相减就可以得到本机需要延迟的毫秒数。

  1. 设置本地输出视频源的对应毫秒数的 渲染延迟

渲染延迟效果表面上会有 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 单节点

资源占用最小、最快速

  1. 只使用一台电脑,让接收手机连上该电脑的热点。
  2. 打开直播电脑,通过 0810.A 分机发送信号 启用发送端。

请注意:先选择 接收端独立 选项后,再单击 转换并写入 。我们不希望端口冲突的事情发生。

0830.B 双节点

多节点提高稳定性、减少单一占用

  1. 将分机电脑连接到路由器上。
  2. 通过 0810.A 分机发送信号 启用发送端。
  3. 打开分机电脑热点,接收手机连到该热点上。

0830.C 套娃节点

接收手机距离比较远,需要一个分机电脑作信号放大

  1. 打开直播电脑的热点。
  2. 在热点信号覆盖范围内,将分机电脑的网络连到直播电脑的热点上。

尽可能使用上一种方法通过拉网线的方式传输数据。

  1. 将分机电脑的热点打开,在其热点信号覆盖范围内,将接收手机的网络连接到分机电脑上。

0830.Z 接收手机的设置

  1. 按下右上角 ··· 打开选单
  2. 点选 选择直播平台
  3. 选择 自定义直播
  4. 然后输入上一个节点的 播流地址
  5. 完成设置,开始直播。

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 绕过域名备案 使用测试功能播流的办法

推流后,在腾讯云控制台的流管理菜单中,点击测试,上方的地址就是播流地址,就可以用于播流。

播流过程中请不要关闭该窗口,否则会造成播流丢失。测试窗口就可以启用播流。这算是一个漏洞。

不确定这个漏洞何时会补上。