背景介紹
公司最近在開發一個項目,需求是:
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: 房間已滿
流程圖:
第三方接入:
接入大緻流程:
1.本地流建立與渲染
2.遠端流監聽與渲染
監聽SDK提供的onUserJoined與onUserOffline回調來判斷是否有其他使用者進出目前頻道,若有新使用者加入頻道,就為他建立一個渲染容器并做對應的渲染;若有使用者離開頻道,則去掉他的渲染容器。
視訊通話常用功能:
工具欄(挂斷、靜音、切換攝像頭)
加入通話和離開通話;
靜音和解除靜音;
關閉攝像頭和開啟攝像頭;
切換前置攝像頭和後置攝像頭;
RTC視訊技術大佬:
聲網Agora:
https://www.agora.io/cn/
https://juejin.im/post/5cc2b8426fb9a031ff0d1ea7
聲網詳細開發入門
RTC開發者社群
https://rtcdeveloper.com/
論壇社群資料
anyRTC
https://www.anyrtc.io/
服務很及時,就說費用是最低的,但是部署私有化伺服器,要達到9萬塊
七牛雲
https://www.qiniu.com/