WEBRTC开发系列第一篇-sdp交换流程

最近刚好接手了原生webrtc开发项目需求,趁项目第一版落地,有很多技术细节还印象深刻先写文章记录下来,webrtc的前世今生我就不多赘述,读者可以左转百度查询,关于他的使用场景说明文章也是很多。

首先,先科普下webrtc建立一个正常会话的流程:

文字描述流程大概是:

  1. 主播端创建一个peerconnection实例,添加完音视频轨道之后createOffersdp之后setLocalDescription设置本地offer描述(生成的sdp信息里面包含是否传输音视频流和相关支持的一些编解码参数)
  2. 主播端通过信令服务器把第一步生成的offersdp信息发送给接受端
  3. 观众端通过信令服务器接受到主播端offersdp信息通过setRemoteDescription把主播端offersdp设置到本地
  4. 观众端createAnswer生成对应offer的answersdp信息,并通过setLocalDescription设置answer到本地
  5. 观众端通过信令服务器发送answer信息给主播端
  6. 主播端接收观众端发送过来的answer信息并通过setRemoteDescription把answer信息设置到本地,至此,两端都保存了己方和对方的sdp信息
  7. 主播端把通过监听icecandidate事件产生的candidate信息发送给观众端,观众端接受到之后通过addIceCandidate把对应candidate信息设置到本地
  8. 观众端同样触发第七步步骤,至此,双方的candidate交换完毕,一个正常的peerconnection链接就建立了,双方可以正常音视频通话了

其中遇到了一些坑,因为项目涉及到多端合作原因,在跨多端出现了主播端连续生成两个不一致内容的sdp信息,而且第二次才是正确的,这时候就会遇到一些问题

坑1:

  1. 连续发送两个offer信息,第一个offer信息里面只带有audio信息,没有video信息,第二个offer信息里面audio、video都有
  2. 观众端接受到之后,第一次生成对应answer并且setLocalDescription会报错,因为这时候生成的answer对应的是第一次发送的offer产生的,但是第二次offer也设置成功,所以offer-answer没有对应上,导致报错
  3. answer设置报错之后通过信令服务器发送对应answer给主播端的话会导致链接失败

解决方案:通过try-catch捕获createAnswer里面的流程,只要触发报错就不通过信令发送给主播端

坑2:

  1. 连续发送两次offer,第一次是只有video信息,第二次带有audio、video信息,但是相关audio信息排在video前面(默认)
  2. setRemoteDescription时候报错,因为setRemoteDescription要求前后两次offer里面audio、video描述信息顺序保持一致

解决方案:通过交换第二次sdp信息里面audio、video顺序解决

 

 

以下是一个使用WebRTCAndroid上实现用户之间通信的案例实现: 1. 集成WebRTC库:在Android应用中集成WebRTC库,例如Google提供的WebRTC库。 2. 创建信令服务器:使用WebSocket协议或者HTTP服务器与客户端进行通信,实现SDP和ICE交换。可以使用第三方开源的信令服务器,例如Google提供的Firebase。 3. 实现音视频采集:使用Android系统提供的Camera API获取摄像头数据,使用MediaCodec进行音视频编解码等。 4. 实现PeerConnection连接:使用WebRTC提供的PeerConnection API,建立客户端之间的连接,并进行音视频传输。可以通过设置不同的参数来实现不同的通信模式,例如音频通话、视频通话等。 5. 实现DataChannel连接:使用WebRTC提供的DataChannel API,建立客户端之间的数据传输通道,实现文本消息等数据交换。 6. 实现界面交互:在Android应用中,实现界面交互,例如实现视频聊天界面、音频聊天界面等。可以通过自定义View和SurfaceView实现视频显示,通过MediaPlayer实现音频播放等。 7. 处理网络问题:WebRTC通信会受到网络带宽、丢包、延迟等问题的影响,需要通过网络条件的优化来保证通信质量。可以使用网络优化库,例如Pion WebRTC等。 需要注意的是,在实现WebRTC通信时,还需要处理Android系统相关的权限问题,例如摄像头权限、麦克风权限等。 总之,使用WebRTCAndroid上实现用户之间通信需要掌握一定的音视频技术和网络通信知识,同时需要熟悉WebRTC的API和协议。开发者可以参考WebRTC官方文档和Demo应用程序,并结合自己的实际需求进行开发
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值