基于webrtc的数据传输研究总结

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

什么是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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值