• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當前的位置是:  首頁 > 新聞 > 專家觀點 >
     首頁 > 新聞 > 專家觀點 >

    HTML5進階手冊:音視頻功能開發(fā)探索

    2016-11-28 10:17:36   作者:容聯(lián)云通訊 張文博   來源:CTI論壇   評論:0  點擊:


      自從 2014 年 HTML5 標準正式發(fā)布以后,各項功能如雨后春筍般出現(xiàn),新的 標準也提供了很多新的特性,諸如三維圖形特效、多媒體特性等。得益于 H5 新 特性,網(wǎng)頁也可以調用攝像頭以及麥克風等媒體輸入設備了,于是 IM Plus 的第 一版 H5 SDK 就推出了相應的功能。對客戶而言,這無異于又拓展了一個很大的 平臺,用電腦只需要打開瀏覽器就可以使用視頻通話的功能,甚至借助公司的平 臺可以實現(xiàn)打電話的功能,卻什么都不需要下載,甚至一個插件都不需要安裝, 提供了一個非常便利的平臺去拓展自己的業(yè)務,這無疑對用戶來講是極大的便捷。 H5 音視頻功能經(jīng)過 1 年的發(fā)展,已經(jīng)逐步成為語音及 DID 平臺客戶開發(fā)特定場 景應用的首選方案。而實現(xiàn)這一功能的,正是 H5 新特性之一的 WebRTC。
      WebRTC 是一個支持網(wǎng)頁瀏覽器進行實時語音對話或視頻對話的技術,谷歌 2010 年以 6820 萬美元收購 Global IP Solutions 公司而獲得的一項技術。2011 年 5 月開放了工程的源代碼,在行業(yè)內(nèi)得到了廣泛的支持和應用,成為下一代視頻通話的標準,該項目的最終目的主要是讓 Web 開發(fā)者能夠基于瀏覽器 (Chrome\FireFox\…)輕易快捷開發(fā)出豐富的實時多媒體應用,而無需下載安裝 任何插件,Web 開發(fā)者也無需關 s 注多媒體的數(shù)字信號處理過程,只需編寫簡單 的 Javascript 程序即可實現(xiàn),W3C 等組織正在制定 Javascript 標準 API,目前是 WebRTC 1.0 版本,Draft 狀態(tài);另外,WebRTC 還希望能夠建立一個多互聯(lián)網(wǎng)瀏 覽器間健壯的實時通信的平臺,形成開發(fā)者與瀏覽器廠商良好的生態(tài)環(huán)境。同時, Google 也希望和致力于讓 WebRTC 的技術成為 HTML5 標準之一。
      介紹完 webRTC 的歷史,那么我們?nèi)绾卧?HTML 頁面中建立一個 RTC 應用呢?
      首先,向瀏覽器申請調用瀏覽器的權限,使用navigator.webkitGetUserMedia()或 MediaDevices.getUserMedia()。比較尷尬的一點是,javascript 接口由 Mozilla 社區(qū)開發(fā)的,所以火狐瀏覽器跟進的比較快,而谷歌還在沿用上一套接口,前者 在 Mozilla 社區(qū)已經(jīng)標記為不建議使用的接口,不過鑒于目前 webkit 內(nèi)核的瀏覽 器比較多,所以本文以前者的接口為主,并且 webkit 內(nèi)核版本要在 36 以上,但 在 webkit47 以上的版本調用媒體設備的時候必須用 https 協(xié)議,用來保證安全, 而 firefox 要求相對沒有那么嚴格,由于 firefox 瀏覽器在國內(nèi)是不需要翻墻更新 的,所以只需要更新到最新版本,那么支持就沒有什么問題。
      navigator.webkitGetUserMedia()方法需要四個參數(shù),第一個參數(shù)直接傳入 navigator 對象,第二個參數(shù)為調用的硬件{audio: true,video:true},如果不需要調用 攝像頭,則 video 為 false,不寫則默認為 false。第三第四個為正確和錯誤回調函數(shù)。
      如: getUserMedia.call(navigator, {audio: true,video:true}, resolve, reject);
      第二個參數(shù)為成功回調函數(shù),第三個參數(shù)為失敗回調函數(shù)。失敗回調會傳入 一個參數(shù),為失敗信息。
      成功回調函數(shù)會將一個媒體流作為參數(shù)傳入進來,此時創(chuàng)建一個 RTCPeerConnection 來存放流傳輸?shù)耐ǖ溃瑒?chuàng)建 RTCPeerConnection 時需要兩個參數(shù),一個是 iceServer,即視頻流傳輸?shù)刂罚魶]有特殊的代理則設置為空就可以。 另一個為可選項數(shù)組,這里只需要一個 DtlsSrtpKeyAgreement:true,將這兩個參 數(shù)傳入到 RTCPeerConnection 中,即可得到一個 peerConnection 對象
      var pc = new peerConnection({"iceServers": []}, {optional:[{DtlsSrtpKeyAgreemen t:true}]});
      然后,需要一個來播放此媒體流,
      如:document.getElementById("myVideo").src = windowUrl.createObjectURL(stre am);,用來看到自己的視頻,但同時還需要將媒體流通過 pc.addStrem(stream)傳 給 peerConnection 對象,然后用 pc.createOffer(callback,error)創(chuàng)建一個 offer,創(chuàng) 建成功后,觸發(fā)成功回調,傳入一個 description(簡寫為 desc),將這個 desc 作 為參數(shù)設置為本地描述,此外這個 desc 還有一個作用,它有一個 sdp 對象,存 放的 sdp 串,需要將這個傳發(fā)送到接收方用以作為溝通的協(xié)議。
      如:pc.setLocalDescription(desc,callback,error);
      當 pc.iceGatheringState == "complete"時,設置成功,至此,發(fā)送方的已經(jīng)完成。
      var pc = new peerConnection({"iceServers": []}, {optional:[{DtlsSrtpKeyAgreement:true}]}); getUserMedia.call(navigator,{audio: true,video:true},function(stream){pc.createOffer(function(desc){ pc.setLocalDescription(desc, function() {if(pc.iceGatheringState == "complete") {// 建立成功 }}, error);
      }, error);},error);
      接下來為應答方。
      應答則是需要拿到對方使用的 SDP 串作為協(xié)議,設置遠程描述,也就是發(fā)送 方的信息,需要的參數(shù)則是 RTCSessionDescription 對象,RTCSessionDescription 對象需要一個對象參數(shù),對象包含 type 類型“offer”,另一個就是發(fā)送方發(fā)來的 sdp 串。
      即:var sessionDescription = new RTCSessionDescription({type: "offer",sdp: receiveSdp} pc.setRemoteDescription(sessionDescription,callback,error); 設置完遠程描述后,需要將此消息告訴發(fā)送方,所以在成功回調中發(fā)送一個answer 請求,有些不同的是,pc.createAnswer 的前兩個參數(shù)都是回調函數(shù),第 三個才是參數(shù):{mandatory: {OfferToReceiveAudio: true,OfferToReceiveVideo: isVideo}};表示回復發(fā)送方,接受你的 audio 和 video 流。
      pc.setRemoteDescription(new  sessionDescription({type:  "offer",sdp:  receiveSdp}),  function()  {
      pc.createAnswer(function()  {if(pc.iceGatheringState  ==  "complete"){// 建立功}},error,constraints)},  remoteError)
      至此,一次單程的 webrtc 就完成了,但是作為視頻應用,單方面接通是不行 的,雙方都看到對方的畫面的話,就讓被叫方也完成一次完整的視頻呼叫就可以 了。
      最后關于瀏覽器的兼容性,我們看兩組數(shù)據(jù):
    \

    \
      從市場占有率和技術成熟度來看,前兩名還是分屬 Chrome 和Firefox。因此,基于 H5 規(guī)范的的 RTC 應用目前重點還是以適配這 2 款瀏覽器為主。

    專題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 泗阳县| 扎兰屯市| 桐梓县| 临城县| 安平县| 庆城县| 东丰县| 万年县| 固安县| 黑龙江省| 汤阴县| 浪卡子县| 九龙城区| 吕梁市| 冀州市| 丽江市| 盐亭县| 澄城县| 丁青县| 什邡市| 汾西县| 绵竹市| 东乌| 吉首市| 遂昌县| 牟定县| 镇赉县| 临朐县| 石阡县| 瑞丽市| 镇赉县| 运城市| 兰溪市| 遂平县| 邮箱| 友谊县| 新化县| 榆树市| 宿松县| 公主岭市| 宣武区| http://444 http://444 http://444 http://444 http://444 http://444