webrtc是html5的新特性,當然是js了。要最新的瀏覽器支持。可以很簡單的訪問本地的攝像頭和mic,但要訪問別人的攝像頭就麻煩很多了,需要用到websocket、后臺語言(java, php)等技術。【點擊免費試用,0成本啟動】
創新互聯建站是一家專業提供任城企業網站建設,專注與成都做網站、成都網站制作、成都外貿網站建設、H5響應式網站、小程序制作等業務。10年已為任城眾多企業、政府機構等服務。創新互聯專業網絡公司優惠進行中。
webrtc是一個建議標準——當前正在被W3C完善——用于提供一系列基于網絡的工具,任何設備都可以用它來實時共享音頻、視頻和數據。當然,它仍在早起階段,但是webrtc有可能取代在任何設備上工作的Skype、Flash和很多基于Web的本地應用程序。
想要了解更多關于webrtc的相關信息,推薦咨詢ZEGO即構科技。公司自成立伊始,就專注自研音視頻引擎,在音頻前處理、網絡自適應和跨平臺兼容性等方面,達到國際一流水平,同時充分利用基礎云服務商的能力,構建了MSDN海量有序自學習數據網絡,服務覆蓋全球,涵蓋上百個音視頻互動業務場景。
webrtc多人視頻直播會議推薦ZEGO即構科技。只需4行代碼,30分鐘在APP、Web和小程序等應用內實現視頻通話、語音通話,互動直播功能。【點擊免費試用,0成本啟動】
webrtc多人視頻直播會議實現原理:
1、服務端是用C++配合實現的,主要作用就是信令控制與轉發。
2、因為有在WEBRTC里面注冊自己的傳輸模塊,所以在這個基礎上實現多人就很容易了,主要就是讓服務端轉發的時候知道往哪里轉發。
3、WEBRTC里面有channel機制,每個會話對應一個channel,如果要實現多個會話,就注冊多個channel。
想要了解更多關于多人視頻直播會議的信息,推薦咨詢ZEGO即構科技。即構科技有限公司是為開發者提供高品質實時音視頻、實時語音、互動直播和IM即時通訊等服務的公司。核心團隊成員均來自QQ,有超過20年的互聯網和音視頻技術開發經驗,以及億量級海內外用戶運營服務能力。專注于實時音視頻領域,致力提供全世界范圍內最清晰穩定實時的語音視頻服務,已服務4000+企業,適用于游戲、娛樂社交、在線教育、在線醫療、遠程會議、智能硬件等多種用戶場景。
1、可以使用WebRTC庫-PeerJS來實現點對點視頻聊天。 官網有詳細的API文檔,以及簡單的視頻聊天示例,隨機算法得自己寫了。
2、還可以學習下canvas,有選擇性的把視頻流畫到canvas上,可以或許可以減少帶寬壓力。
基于STRATUS +FLEX+MYSQL的簡易在線隨機視頻聊天室的開發:
1.Flash Builder 4開發的,默認用的是Flex SDK4.0
2.開發最好用flash payer 10 debug version(可以進行調試)
3.申請一個 Stratus develper key:8b0f114ef5a20c433d5c2a33-201aeea5601b
WebRTC給我們帶來了瀏覽器中的視頻、音頻聊天體驗。但個人認為,它最實用的特性莫過于DataChannel——在瀏覽器之間建立一個點對點的數據通道。在DataChannel之前,瀏覽器到瀏覽器的數據傳遞通常是這樣一個流程:瀏覽器1發送數據給服務器,服務器處理,服務器再轉發給瀏覽器2。這三個過程都會帶來相應的消耗,占用服務器帶寬不說,還減緩了消息從發送到接收的時間。其實最理想的方式就是瀏覽器1直接與瀏覽2進行通信,服務器不需要參與其中。WebRTC DataChannel就提供了這樣一種方式。
如果對WebRTC和DataChannel不太了解的同學,可以先閱讀如下文章:
- WebRTC的RTCDataChannel
- 使用WebRTC搭建前端視頻聊天室——信令篇
- 使用WebRTC搭建前端視頻聊天室——入門篇
當然服務器完全不參與其中,顯然是不可能的,用戶需要通過服務器上存儲的信息,才能確定需要和誰建立連接。這里通過一個故事來講述建立連接的過程:
不如釣魚去
一些背景:
現在,老劉聽說老姚釣魚技術高超,想和老姚討論釣魚技巧。只要老劉和老姚相互之間知道對方的門牌號以及憑證,就可以串門了:
老劉和老姚相互之間知道了對方的門牌號和小區出入憑證,他們相互之間有什么需要交流的直接串門就行了,消息不再需要門衛老大爺來代為傳達了
換個角度
我們把角色做一個映射:
于是乎故事就變成了這樣:
這樣,就建立了一個點對點的信道,流程如下所示:
故事
老劉和老姚已經可以相互串門了,經過一段時間的交流感情越來越深。老姚的親友送了20斤葡萄給老姚,老姚決定送10斤給老劉。老姚畢竟年事已高,不可能一次帶10斤。于是乎,老姚將葡萄分成了10份,每次去老劉家串門就送一份過去。
這里可以做如下類比:
這其實就是通過datachannel傳輸文件的方式,首先將文件分片,然后逐個發送,最后再統一的進行組合成一個新的文件
分片
通過HTML5的File API可以將type為file的input選中的文件讀取出來,并轉換成data url字符串。這也就為我們提供了很方便的分片方式:
組合
通過datachannel發送的分片數據,我們需要將其進行組合,由于是data url字符串,在接收到所有包之后進行拼接就可以了。拼接完成后就得到了一個文件完整的data url字符串,那么我們如何將這個字符串轉換成文件呢?
方案一:直接跳轉下載
既然是個dataurl,我們直接將其賦值給window.location.href自然可以下載,但是這樣下載是沒法設定下載后的文件名的,這想一想都蛋疼
方案二:通過a標簽下載
這個原理和跳轉下載類似,都是使用dataurl本身的特性,通過創建一個a標簽,將dataurl字符串賦值給href屬性,然后使用download確定下載后的文件名,就可以完成下載了。但是很快又有新問題了,稍微大一點的文件下載的時候頁面崩潰了。這是因為dataurl有大小限制
方案三:blob
其實可以通過給a標簽創建blob url的方式來進行下載,這個沒有大小限制。但是我們手上是dataurl,所以需要先進行轉換:
獲得blob后,我們就可以通過URL API來下載了:
這里有幾個點:
1. datachannel其實是可以直接傳送blob的,但是只有ff支持,所以傳data url
2. chrome下載是直接觸發的,不會進行詢問,firefox會先詢問后下載,在詢問過程中如果執行了revokeObjectURL,下載就會取消,囧
升級
如我們所知,WebRTC最有特點的地方其實是可以傳輸getUserMedia獲得的視頻、音頻流,來實現視頻聊天。但事實上我們的使用習慣來看,一般人不會一開始就打開視頻聊天,而且視頻聊天時很消耗內存的(32位機上一個連接至少20M左右好像,也有可能有出入)。所以常見的需求是,先建立一個包含datachannel的連接用于傳輸數據,然后在需要時升級成可以傳輸視頻、音頻。
看看我們之前傳輸的session description,它其實來自Session Description Protocol。可以看到wiki上的介紹:
這意味著什么呢?我們之前建立datachannel是沒有加視頻、音頻流的,而這個流的描述是寫在SDP里面的。現在我們需要傳輸視頻、音頻,就需要添加這些描述。所以就得重新獲得SDP,然后構建offer和answer再傳輸一次。傳輸的流程和之前一樣,沒什么區別。但這一次,我們不需要傳輸任何的ice candidate,這里我曾經遇到了坑,經過國外大大的點撥才明白過來。
Peertc
我將datachannel和websocket組合,實現了一個構建點對點連接的庫Peertc,它提供非常簡潔的方式來建立連接和發送數據、文件和視頻/音頻流,詳情見github。走過路過的記得star一下哦,有什么bug也非常希望能夠提出來。
最后
WebRTC的點對點方式能夠運用在很多場景:
- 如web qq這種Web IM工具,這就不說了
- 如象棋這種雙人對戰 游戲 ,每一步的數據服務器時不關心的,所以完全可以點對點發送
- 一對一在線面試、在線教育,這其實是即時通信的一個業務方向
目前基于WebRTC的開發其實有兩個方向,
一個是基于瀏覽器的WebRTC應用開發,編程語言主要是JavaScript、HTML等,
這也是WebRTC作為HTML5標準的組成部分原本的目的;
另一個是C層面的移植和開發,作為一款非常強大的開源軟件,
很多領域的軟件項目都可以利用到WebRTC的音視頻通信和處理能力,
這些場合的應用程序可能是C語言寫的,也不一定與瀏覽器有關。
轉自:網頁鏈接
本文名稱:webrtchtml5,webrtc html
本文鏈接:http://vcdvsql.cn/article32/dsdippc.html
成都網站建設公司_創新互聯,為您提供網站內鏈、品牌網站建設、虛擬主機、、ChatGPT、網站收錄
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯