由于最近的大流行,像Zoom这样的视频会议工具在世界范围内变得非常流行。在本教程中,我将指导您使用Golang创建视频会议应用程序。
我们将使用WebRTC来发展我们的点对点通信。WebRTC允许访问媒体设备、打开对等连接、发现对等设备并开始流式传输。HBO的硅谷在11秒内总结了WebRTC。
WebRTC有许多功能,对于一篇文章来说可能相当复杂,我不会详细解释每个概念,但是,如果您想了解更多信息,我会始终链接文章以获取更多信息。
RTCDataChannel:在对等体之间创建通道,用于任意数据的双向连接(我们不会在视频会议应用程序中使用它)。
在继续实施过程中,我们将在WebRTC中解释不同的概念。
我们从创建peerConnectionConfig开始,这意味着我们注册一个信令服务器来帮助我们发现信息,比如要连接到的IP地址和端口。这个过程称为信令。
我们需要定义我们的媒体引擎,该引擎定义peerConnection支持的编解码器。然后,我们可以注册您要用于我们的应用程序的编解码器。这里我们使用的是VP8。
下一步是创建我们的会话描述协议(SDP)。SDP用于对等项之间的协商。有关更多详细信息,请查看SDP剖析。
为了简化实现,我们将从实现Alice向Bob流式传输视频开始。
WebRTC要求Alice和Bob发起与提议和答案的通信。两者都将在UI端创建他们的SDP产品(我将在另一篇文章中讨论这一点)。然后他们会把它发送到我们的围棋服务器。服务器将需要为Alice和Bob创建peerConnection对象,这将使用SDP提供并创建SDP应答。提议被设置为远程描述,而答案被设置为peerConnection对象的本地描述。
关于Pion的视频会议都是关于曲目的。Alice将需要使用Alice的PeerConnection对象创建轨迹。我们将以某种方式缓存此曲目,以便Bob可以查询缓存以获取曲目。Bob将使用该轨道收听Alice的UDP流量。
这看起来很简单,然而,有一个小挑战。我们确定爱丽丝会比鲍勃先连线吗?如果Bob先连接,他怎么能等待Alice创建曲目呢?好了,这里围棋最令人惊叹的功能之一将会帮助我们,频道。我们将使用通道让Bob等待,直到Alice连接并创建她的视频呼叫轨迹。
在上面的示例中,使用PeerConnectionMap作为将通过轨道的通道的peerID缓存。如果Alice首先连接,那么当Bob连接时,他将找到包含该曲目的频道。否则,鲍勃将一直等待,直到爱丽丝通过频道中的轨道。
现在我们已经有了视频流应用程序,让我们将其扩展到视频呼叫应用程序。这可以通过复制视频流媒体应用程序来完成,但在这种情况下,Bob将流媒体给Alice。
将所有内容放在一起,我们将需要一个端点,以便我们的UI可以创建HTTP请求来启动信令流程。对于我们的示例,Alice将创建两个HTTP请求。一个请求作为发送方,另一个作为接收方。鲍勃也需要这样做。无论谁先连接,频道总是会让其他用户等待。我们将使用GIN来开发我们的HTTP端点。
最后,我希望您了解使用Golang实现视频会议应用的服务器端的总体情况。您可以在这里获得实现https://github.com/Ramez-/go-video-confrence.。在下一篇文章中,我将继续讨论视频会议应用程序的UI部分。