背景介绍

公司最近在开发一个项目,需求是:

1.两个android设备实现视频对讲功能,一对一

2.由于客户环境,只能使用局域网网络

3.清晰度无要求

4.部署点大概在30个左右

5.不需要连麦

 

视频通话实现有重要参数:

1.清晰度要求 720p,1080p

2.连网时长

3.部署点,可能的同时接入点数,有一对一,多人视频通话,开直播

4.连麦技术

 

实现途径:

两种途径,一种是找开源项目,一种是花钱找第三方集成。

由于我们的客户只能使用局域网,无法使用第三方的云服务,私有化服务器收费至少9万,远超我们的预算,

所以选择找开源项目集成。

 

开源项目:开源项目介绍:

找到三种

1.easydarwin免费开源视频直播技术    

 http://www.easydarwin.org/

实际情况:有视频推送,播放功能,但是没有信令服务器,来电提醒和对话挂断电话无法立即获知

 

2.webRTC google收购开源

WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,简而言之它是一个支持网页浏览器进行实时语音对话或视频对话的技术。 它为我们提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android,iOS。 它在2011年5月开放了工程的源代码,在行业内得到了广泛的支持和应用,成为下一代视频通话的标准

实际情况:网上使用该技术的人很多,可以很方便的找到别人的demo,包含信令服务器,降噪回声技术

项目demo:

https://github.com/Jhuster/RTCStartupDemo 基于webrtc包含信令服务器,android,ios,pc客户端demo的开源项目

https://www.jianshu.com/p/2a760b56e3a9?from=groupmessage 讲解webrtc视频搭建,包含信令服务器,android demo

https://www.jianshu.com/p/cdb3b0301712 基于webRTC实现的实时聊天应用,包含android ,ios ,server demo,其中有视频通话流程图 github:https://github.com/fengli12321/Socket.io-FLSocketIM-Android

https://www.jianshu.com/p/6eb35ebb7416 基于webRTC的android,pc,服务器demo

 

3.starRTC github开源项目

有源码,有开发文档,有qq群讨论,开发非常好上手

https://docs.starrtc.com/zh-cn/docs/android-7.html

实际情况:包含信令服务器,降噪回声目前版本没有,但是群里回复下个版本即包含,

               有开发文档,有demo,对于小白来说非常好上手。

               由于时间紧,我也选择使用该技术。

 

技术实现分析:

视频对讲实现技术点分析:

这里以webRTC技术为基础做说明,除了api不同,实现流程是差不多的。

android 端视频通话实现步骤     1.申请权限     2.引入库:   

dependencies {
     ...
     implementation 'io.socket:socket.io-client:1.0.0'
     implementation 'org.webrtc:google-webrtc:1.0.+'
     implementation 'pub.devrel:easypermissions:1.1.3'
     }

    3.创建PeerConnectionFactory     4.音视频采集     5.渲染本地视频     6.创建 PeerConnection     7.信令驱动:交换相关信息 offer,answer,发送IceCandidate     在整个 WebRTC 双方交互的过程中,其业务逻辑的核心是信令     node.js搭建信令服务器     客户端使用socket.io实现与信令服务器互联

    8.渲染远端视频

信令服务器中的命令消息:

    客户端命令有:     join: 用户加入房间     leave: 用户离开房间     message: 端到端命令(offer、answer、candidate)          服务端命令:     joined: 用户已加入     leaved: 用户已离开     other_joined:其它用户已加入     bye: 其它用户已离开     full: 房间已满    

流程图:

Android 实现视频会议 android视频聊天_信令

第三方接入:接入大致流程:

1.本地流创建与渲染 2.远端流监听与渲染     监听SDK提供的onUserJoined与onUserOffline回调来判断是否有其他用户进出当前频道,若有新用户加入频道,就为他创建一个渲染容器并做对应的渲染;若有用户离开频道,则去掉他的渲染容器。

视频通话常用功能:

工具栏(挂断、静音、切换摄像头)

加入通话和离开通话; 静音和解除静音; 关闭摄像头和开启摄像头; 切换前置摄像头和后置摄像头;

 

RTC视频技术大佬:

声网Agora:     https://www.agora.io/cn/          声网详细开发入门

RTC开发者社区      https://rtcdeveloper.com/     论坛社区资料 anyRTC     https://www.anyrtc.io/      服务很及时,就说费用是最低的,但是部署私有化服务器,要达到9万块 七牛云     https://www.qiniu.com/