当前位置: 首页 > news >正文

Android音视频探索之旅 | Webrtc 1对1音视频通话核心流程分析

一.前言

  • 使用Webrtc实现1对1的音视频通话,先从Web端进行学习要比直接从Android端进行学习要轻松许多(若没有JS和Html以及Node基础,查找相关基础教程,能梳理代码的逻辑即可)。
  • 本文Android端接入Webrtc是通过引入官方的sdk来实现的。
  • 本文涉及到的Demo代码包含三部分,服务器端、Web端、Android端。服务器端使用的是Node,Web使用的是Html和JS,Android端使用的是Kotlin。
  • 单单通过一篇文章将"Webrtc实现1对1的音视频通话"全面进行讲解是不现实的,本文的目标 梳理端对端的基本流程以及Android端引入Webrtc后所涉及的核心类的讲解

二.效果演示

  • 源码下载地址,包含服务器端,Web端,Android端,仅在本地环境才能测试。需要将项目的IP改成自己所处环境的IP地址,其它保持不变。服务器端运行需要使用node命令。
  • Android端测试效果(Web端略)
    在这里插入图片描述

三.Web端与Web端连接的基本流程

  • 大体分为三部分,媒体协商,candidate交换,传输数据。如下图:
    在这里插入图片描述

  • 场景分析 :现在假设有用户A和用户B(对应上图),两者先后加入同一个房间,用户A先加入,B其次,结合代码来进行流程的梳理。

3.1.媒体协商过程

  • A和B加入房间之后(加入之前已经连接websocket成功),由于A先加入,(根据代码可以知道)A 会收到 new-peer 信令,B 收到 resp-join 信令;
  • A 会执行 createPeerConnection 函数( 内部创建 RTCPeerConnection 对象,设置多个回调RTCPeerConnection 的 onicecandidate、ontrack、onconnectionstatechange 和 oniceconnectionstatechange) & 调用 RTCPeerConnection 的 createOffer & RTCPeerConnection 的 setLocalDescription & send offer 信令
  • B 那边那边是设置了监听的,当有offer信令传递过来是,B会执行 createPeerConnection(& 设置多个回调-同A) & setRemoteDescription & setLocalDescription & 发送answer信令
  • A 收到 B 发送过来的 answer信令,会调用 RTCPeerConnection的 setRemoteDescription
  • 到此,媒体协商阶段结束;

3.2.candidate 的交互

  • 经过媒体协商阶段,设置的 RTCPeerConnection 的 onicecandidate回调会被触发,A | B 会给彼此发送 candidate 信令,当收到彼此的 candidate 信令,会调用 RTCPeerConnection 的 addIceCandidate;

3.3.传输数据

  • 通道打通了,开始传输数据。

四.Android端引入Webrtc所涉及的核心类

  • Android引入Webrtc的sdk之后,Api调用方面相对web端要复杂些,涉及的类比较多,有:VideoCapturer、VideoTrack、AudioTrack、VideoSource、MediaStream、VideoSink,PeerConnectionFactory、PeerConnection、PeerConnection.Observer、SdpObserver,我们重点关注后面四个,其它的我们可以直接看项目代码注释来辅助理解。
  • PeerConnectionFactory:创建PeerConnection、MediaStream、VideoSource、VideoTrack、AudioSource、AudioTrack等工作;
  • PeerConnection:通过PeerConnectionFactory来创建,要注入PeerConnection.Observer观察者;
  • PeerConnection.Observer:主要关注 onIceCandidate 和 onAddTrack回调。
    • onIceCandidate :回调时机同web端,内部所指定的逻辑是,做信令服务器的转发;
    • onAddTrack:执行远端显示的关联操作
  • SdpObserver:可以用来用来观察 createOffer 和 createAnswer 是否操作成功,在回调中做设置本地 sdp,以及发送offfer或answer的信令;

五.总结

  • 本文重点梳理了使用WebRTC实现1对1音视频通话端对端的基本流程,流程分为三部分:媒体协商(交换SDP信息)、candidate交换(建立网络连接)、数据传输。同时对Android端引入Webrtc,其核心类的讲解。
http://www.lryc.cn/news/592230.html

相关文章:

  • 力扣347:前K个高频元素
  • [AI8051U入门第五步]modbus_RTU主机
  • 《Python Web 框架深度剖析:Django、Flask 与 FastAPI 的选择之道》
  • 数据库防止数组字符串序列化
  • Python暑期学习笔记5
  • C++编程学习(第10天)
  • 近期遇到的问题汇总
  • 微信小程序商品结算功能
  • 【嵌入式硬件实例】-555定时器实现LED追逐效果
  • 后端参数校验
  • LP-MSPM0G3507学习--05管脚中断
  • 网络基础12--可靠性概述及要求
  • postman接口测试,1个参数有好几个值的时候如何测试比较简单快速?
  • Leetcode 04 java
  • 今日行情明日机会——20250718
  • 【Spring WebFlux】什么是响应式编程
  • Linux入门篇学习——借助 U 盘或 TF 卡拷贝程序到开发板上
  • 证券行业 SCRM 落地:企业微信与系统协同的合规技术方案
  • 二进制写入与文本写入的本质区别:系统视角下的文件操作
  • 数据结构:顺序表和链表
  • 【PTA数据结构 | C语言版】我爱背单词
  • 【PTA数据结构 | C语言版】二叉堆的朴素建堆操作
  • HTML 页面禁止缩放功能
  • 深入解析文本分类技术全景:从特征提取到深度学习架构
  • 数据库的基础概操作
  • 计算机视觉与机器视觉
  • 基于物联网的智能农情监测预警系统
  • 深入解析PyQt5信号与槽的高级玩法:解锁GUI开发新姿势
  • Maven学习总结(62)—— Maven 打包瘦身和提速解决方案
  • 电网驱鸟黑科技:鸟类AI识别算法+无人机实现“智慧护线“