幕后 | 多机位网络直播实践

前言:“多机位网络直播“ 重在”多机位“而非”网络“,网络只是作为视频数据的载体,而如何在受限的环境下低延时、高质量地传输视频流,才是多机位的难点所在。

网络直播对于工作室来讲,并非是一个新领域。事实上,早在2022年初我们就曾内部测试过在校园内网的环境下进行网络直播,并取得了不错的成效。但仅仅通过一段提前录制好的视频进行测试并不能算是成功,只能说是迈出了“从无到有”的一步。真正使其变得稳定、丰富、可观赏则是相对困难的一步。

第一次尝试真正意义上的“多机位” 是在2022年的秋季运动会上。我们通过HDMI+网络的传输方式实现了覆盖整个操场的拍摄范围,并通过带有移动网络图传模块的大型无人机覆盖校外的场地拍摄。

然而,受限于HDMI本身的物理结构,其理论传输范围在30M之内,若是想实现更远的传输,则需要线缆延长器来实现。

机位图传示意图

HDMI延长器(图例机位3)的原理是将信号重新处理、编码和打包,类似于“翻录”的概念。数字信号的编解码需要大量时间和算力,这会导致延迟大幅提升;其对算力的需求同时也导致其需要外部供电来支撑芯片的编解码运算,这对于户外的使用场景显然是不便的。同时,市面上所销售的延长器几乎价格都在百元以上,这对于我们也是较大的经济压力。

HDMI物理层结构图 图/知乎

我们同样尝试通过互联网传输来自更远机位的视频流,然而受限于中国内地服务器相对极低带宽流量的高昂的价格,其带来了相对较差的图像传输效果、极高的延迟(10~20s)和非常不稳定的连接,使得我们不得不放弃了这项方案。

事实上,第一次大规模的多机位测试并非以完全失败告终,在了解了多种图传方案之后,我们得出了以下结论:

SRT是一种能够在复杂网络环境下实时、准确地传输数据流的网络传输技术,它在传输层使用UDP协议,具备UDP速度快、开销低的传输特性,支持点对点传输,无需中间进行服务器中转(仅需任意一端具备固定公网IP地址即可),互联网点对点传输可小于1S。

NDI是能够允许局域网络内的设备对信号进行高质量传输,且对于网络环境要求较高。在局域网内的一个设备可以通过一条网线输出或者接收多个NDI信号,不需要复杂的布线,局域网内端到端延时仅为1-3帧(小于100ms)。从实际应用来看,Full ND端到端延时小于100ms,NDI HX端到端延时约100+ms。

综合比较,NDI流似乎为局域网内成本与性能平衡的最佳解决方案。我们最终于23年10月份,借运动会的契机对其进行了实践。考虑到NDI“高要求高性能”的特性,我们与学校IT部门展开合作,使用了全校范围内预留的网络接口。并使用WireGuard E2E VPN 技术在校园内网的基础上搭建了一套自己的局域网,供来自校园不同位置的视频设备传输视频流。这套设备同时也在南北校区内网专线的基础上实现了异地互联,将不同地域的设备同时存在同一虚拟网关下,精简了网络架构。

得益于南校区的公网IPv4和对称形NAT,在学校IT部门的支持下,我们使用Tailscale异地组网工具实现了公网访问。免去了中间服务器转发的流程,大大降低了网络延时和公网流量开销。

解决了多机位的问题,接下来需要思考如何将视频流高效交付至客户端进行观看。

考虑到观看者的使用成本,微信视频号平台貌似是优于抖音/B站的选择。在微信内传播的观看链接只需要一次应用内点击即可进入观看。但微信视频号的第三方推流限制较多,需要进行企业/行业认证。因此Web网页端是较为复杂但观看最为方便的方案。

传统的解决方案,使用带有公网IP的云服务器作为访问点(Access Point),搭建一套带有嵌入式Web播放器的播放页面。此方案存在以下问题:

  • 中国大陆地区的公网带宽/流量不足且费用极高
  • 高并发场景下设备性能不稳定
  • 需要安装的软件包缺乏国内镜像源,在Github被大陆屏蔽的状态下需要手动配置Repo和依赖
  • 观看人数过多的情况下会挤占云服务器的下行带宽,导致直播中心的视频流无法正常上传至服务器

在成功通过工信部ICP域名备案后,我们将直播接入阿里云的视频直播服务。此项方案有以下优势:

  • 公网带宽无限制,按使用流量付费
  • 无需人工配置
  • 设备性能无压力
  • 直播中心全球范围内多地域可选,视频流通过阿里云CDN网络交付至客户端。

通过直播当天生产环境实际测试,此套方案工作性能良好,播放流畅。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇