什么是webrtc
WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。
一个简单的例子 PyWebRTC
这里简单介绍一个例子。在这个例子中,建立WebRTC连接的过程如下图所示:

这是一个简单基于python实现的服务端响应用户请求的例子。当客户端(Client)发起请求,服务器端(Server)与Client建立WebRTC连接,并把流媒体资源库中的demo-instruct.wav音频通过WebRTC连接的方式传输到Client,在Client这一端可以实时听到音频的播放。
RTCPeerConnection
webrtc的P2P连接依赖于实现在两端主体程序中的RTCPeerConnection对象(pc_client和pc_server),它们需要经历两个阶段的协商,才能建立连接。
媒体协商
媒体协商要做的事情,是让彼此了解对方的多媒体能力(上图中红色标记的步骤)。例如:webrtc默认使用V8编码和解码,如果Client不支持V8解码,如果没有媒体协商过程,那么即便是连接成功,Server把视频数据发给Client,对方也无法播放。进一步,如果Client支持VP8、H264多中编码格式,而Server支持VP9、H264,如果要保证两端的正常的编码、解码,最简单的办法是取它们的交集,H264。
媒体协商的过程在代码层实际上是交换了各自的sdp信息,这个过程也叫 offer/answer 过程(可能是因为Client端的sdp信息由createOffer()方法创建,而Server的sdp信息由createAnswer()方法创建)。在这个例子中,这个过程大致为,首先由Client通过普通http请求的方式将自身sdp信息Post给Server,然后Server将自身sdp信息作为响应返回给Client,它们各自使用以下语句,来设置自身的sdp,和对方的sdp。
#用于设置自身的多媒体特征sdp
pc.setLocalDescription()
#用于设置对方的多媒体特征sdp
pc.setRemoteDescription
sdp的具体格式可以分成三个部分,*号表示的是可选的。如下:
Session description
v= (protocol version)
o= (originator and session identifier)
s= (session name)
i=* (session information)
u=* (URI of description)
e=* (email address)
p=* (phone number)
c=* (connection information -- not required if included in all media)
b=* (zero or more bandwidth information lines)
[...One or more time descriptions ("t=" and "r=" lines)]
z=* (time zone adjustments)
k=* (encryption key)
a=* (zero or more session attribute lines)
[...Zero or more media descriptions

本文详细介绍了WebRTC实时通信技术,涉及RTCPeerConnection的工作原理,媒体协商过程,以及如何在Python中通过PyWebRTC实现点对点连接,包括候选者收集和交换,以及如何结合TurnServer解决NAT问题。
最低0.47元/天 解锁文章
2554

被折叠的 条评论
为什么被折叠?



