AV1、H.265与Janus的爱恨情仇(二)

运行AV1

正如预期的那样,从一开始AV1就被认为是免版税的编解码器。如果你想了解更多关于编解码器及其背后的知识(你会看到很多大牛的名字),请访问AOMedia网站上的“入门”页面。

本文的重点在于AV1与WebRTC的关系。与所有编解码器一样,为了在WebRTC中运行,AV1首先需要一种在SDP中协商的方式以及一组RTP打包规则。通常,这是在IETF活动(特别是在MMUSIC和AVTCORE工作组中)中发生的一个过程。也就是说到目前为止,对于AV1而言该过程有些不同——尽管都有规范的draft,但目前该过程是在单独运行的。你可以在相关GitHub repo上关注其进展。简而言之就是该信息可以满足第一个要求,即在提供请求或协商时,Janus SDP堆栈是把AV1视为编解码器的。

当然,仅凭一套规则不足以使AV1在WebRTC中运行。你还需要在实际中(例如在浏览器或其他端点中)执行上述规则。幸运的是,我们的朋友CoSMo Software从一开始就参与了AV1-RTP设计过程,他们分享了许多信息和代码以帮助实现这一目标。具体来说,他们在libwebrtc中共享了AV1的初步集成,并使其在自定义的Chromium构建和libwebrtc对等连接示例中均可用。很遗憾,Chromium与我的项目不适配。但是,其预编译的示例确实有用,接下来我会解释这一点。对于测试和原型化我的AV1相关工作来说,这些实例十分珍贵。感谢CoSMo的各位完成了上述可用的操作!

更准确地说,我利用了libwebrtc提供的开箱即用的预编译peerconnection_clientpeerconnection_server示例:在该自定义版本中,CoSMo修改了示例以提供AV1。这些示例的工作方式非常简单:服务器充当基本的信令服务器(使用HTTP长轮询进行双向通信),并且一个或多个客户端都可以注册到服务器;无论何时,任何一个客户端都可以呼叫另一个客户端,它们会通过服务器交换SDP和候选对象。最终在两端的本地窗口,客户使用画中画布局显示本地和远程视频。

当然,我要测试的是让其中一个客户端与Janus,而不是另一个预编译的客户端,建立一个AV1 PeerConnection。也就是说,为了达成目的,我必须对它们实现的信号进行反向工程, 让他们与Janus通信。 而我最终要做的是在node.js中创建一个“假”的 peerconnection_server实现。这个“假”服务器会允许真实的peerconnection_client实例注册,但同时始终只会报告单个假的列表用户,该用户将被映射到Janus的EchoTest会话中。 这样,每当一个客户端呼叫“假”用户时,便可以建立一个Janus API会话。SDP和候选对象会来回交换信息,从而允许真正的peerconnection_client实例在Janus中创建PeerConnection。

这样,我还可以做一些重要的事情。首先,我可以确认集成工作是否正常(如下图所示),但最重要的是:我还可以对RTP上的真实AV1会话进行未加密捕获,以完成进一步测试。

文章地址:https://www.meetecho.com/blog/av1-h265-janus/

原文作者:Lorenzo Miniero

填写常用邮箱,接收社区更新

WebRTC 中文社区由

运营