在 WebRTC 应用中增加录制功能前,该优先考虑的难点

在实时音视频应用中增加录制功能应该越早越好。

当开发一个 WebRTC 音视频应用之前,我们都需要考虑一个问题“是否需要录制功能?”。如果回答为“是”,那么就要考虑“用来做什么?”、“需要录制多少内容?”,这些问题都需要优先考虑。不论你是通过实时音视频 PaaS 服务,还是基于开源自研的方式来开发应用,以上这些问题的答案都将很大程度上影响你的架构设计。同时,你还要决定是进行单流录制还是合流录制。本文我们会给出更多 Tips。

添加录制功能到个人WebRTC 的用例

  • 记录会议
  • 为满足培训、保存记录等目的的客服或质量保证
  • 开展网络研讨会或其他活动

添加录制功能到个人WebRTC 要考虑的因素

录制成本

实时音视频PaaS需要额外收费。若用该服务大规模地录制的话,会增加一定的成本。

存储/CPU 成本

即使你使用的是开源架构,也要考虑成本问题。因为该架构可能会给你的媒体服务器增添一些处理负担,从而影响服务器在重载下扩缩的灵活度。(如有需要)录制后的处理也会给服务器带来额外负担。大多数人都选择把录制内容存储在其他地方(比如Amazon S3)。因此,用户也要把长期存储文件的成本考虑在内。

录制架构设计

基于选择的架构类型,你在录制服务架构方面没有多少自由。

而且录制中的架构选项可能和应用程序本身的不一样。比如线上会议有多名参与者,还会开启屏幕共享等操作,会引发很多问题。

录制质量

你是否需要全高清质量的录制文件?你的录制文件要保存多长时间?这些都会影响到你的存储成本。

录制的安全性

大多数情况下,比如公司会议,内容较为私密。你要确保录制内容不会公开或外传。那么你打算把这些录制文件存储在哪?你打算给录制服务设置怎样的安全防护

不建议使用E2EE

如果你真的要在任意参与者之间都设置音视频的端对端加密(E2EE),可能就没办法录制实时音视频了。录制通常是在媒体服务器上进行的,这会破坏加密链,因为它位于客户端交流双方的中间位置。任何录音都必须在客户终端设备上完成,然后再上传到某个地方。费时费力,效率不高。

说到WebRTC中真正的E2EE,最终会联系到可插入流(insertable streams)。这是一个相对较新的概念,请记住,可插入流的工作方式是在WebRTC连接之外,在客户端设备上对视频流进行加密/解密。因此,一个应用程序的媒体服务器无法完成E2EE呼叫的录制。这就是为什么E2EE和录制不能兼得。

在WebRTC 应用程序中录音的方法

有两种方法:通过合流录音,或通过单流录音。下面我们会基于上文提到的条件来讨论这两种方法。

选项1:合流

合流录制场景示例

在这种情况下,录制在WebRTC媒体服务器上完成,输出一个单一媒体文件,所有不同的流都在这个文件中。

合流很好、很简单,工作量小。你只需考虑录制的存储位置,以及它的安全性。

但也有缺点(总是有缺点的,不是吗?),其一是你对录制布局的控制权不大。合成的录制内容可能和你在会议中听到的不太一样。比如你的录制内容只在网格上可用。如果出现屏幕共享,问题就来了。你需要明确如何告诉媒体服务器,一个流应该以显示为主。另外如果谈话过程中布局发生变化,那么录音转化可能会失败。

第二个缺点是:录制通常是在处理所有进程流的那同一个媒体服务器上完成的。这会造成额外性能负担。也就是说,如果该媒体服务器的某个实例也在记录所有对话,那它可扩展的对话数量就少了。

选项2:单流

替代方案: 单流

另一个选择是作为单独的流来录制。媒体服务器会把每个发言人的单流写入文件。它甚至可以写入视频单流和音频单流。

单独的数据流给录制提供了很大的灵活性。整个通话过程中你都可以改变结构,可以屏幕共享,并确保是全屏。你也可以对文件进行后期处理(可能要根据媒体服务器创建的输出文件类型进行后期处理)等其他操作。

另一个好处是,媒体服务器的工作量更小了。因为服务器不用实时组合这些文件了,只需写入即可。你的媒体服务器现在可以同时处理更多对话。然而在自己的架构中,你可能需要其他媒体服务器来处理这些文件,然后安全地存储它们。

缺点是:你要花费更多精力来使用,或回放这些录制。那你要怎么把这些媒体文件播放给用户呢?比如有四个不同的文件,你如何确保它们的时间同步呢?如果会议的某个发言人并非从头到尾都在场,导致几个文件长度不同,该怎么办呢?

就本文用例来说,能够以不同方式处理数据流的高度自由是有益的,甚至是必不可少的。在这种情况下,额外的工作必不可少。还有一点需要注意:在录制可用之前,这种后期处理工作会有一点延迟。

总结

如上所述,实时音视频是否需要添加录制功能很重要,需要提前考虑。

首先,是否要录音可能会改变你的架构方案的选择。比如是否采用开源,甚至根据在显示录音方面的灵活性,选择不同种类的CPaaS。

其次,你想多久记录一次,记录的目的,以及之后录音的用途。这都有助于你决定采用合流还是单流。

当然,这并不意味着你不能在事后添加录音! 只不过根据你的结构,这样的操作难易程度不同而已。

文章地址:https://webrtc.ventures/2021/03/adding-recording-to-your-webrtc-application/

原文作者:ArinSime