欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    概述

    (Web Real-Time ) 是一項(xiàng)實(shí)時(shí)通訊技術(shù),它允許網(wǎng)絡(luò)應(yīng)用或者站點(diǎn),在不借助中間媒介的情況下,建立瀏覽器之間點(diǎn)對(duì)點(diǎn)(Peer-to-Peer)的連接,實(shí)現(xiàn)視頻流和(或)音頻流或者其他任意數(shù)據(jù)的傳輸。包含的這些標(biāo)準(zhǔn)使用戶在無需安裝任何插件或者第三方的軟件的情況下,創(chuàng)建點(diǎn)對(duì)點(diǎn)(Peer-to-Peer)的數(shù)據(jù)分享和電話會(huì)議成為可能。

    協(xié)議介紹ice

    交互式連接機(jī)構(gòu) (ICE)是一個(gè)框架,允許您的網(wǎng)絡(luò)瀏覽器與同行連接。有許多原因,為什么從對(duì)等A到同行B的直升連接將不起作用。它需要繞過防火墻,防止打開連接,給您一個(gè)獨(dú)特的地址,如果像大多數(shù)情況下,您的設(shè)備沒有公共 IP 地址,并通過服務(wù)器中繼數(shù)據(jù),如果你的路由器不允許您直接與對(duì)等連接。ICE 使用 STUN 和/或 TURN 服務(wù)器來實(shí)現(xiàn)此目的,如下所述。

    C++音視頻開發(fā)學(xué)習(xí)資料:點(diǎn)擊領(lǐng)取→音視頻開發(fā)(資料文檔+視頻教程+面試題)(++RTMP+RTSP+HLS+RTP)

    STUN

    NAT 的會(huì)話橫向公用設(shè)施 (STUN)是一個(gè)協(xié)議,以發(fā)現(xiàn)您的公共地址,并確定任何限制,在你的路由器,將阻止與同行的直接連接。

    客戶端將向 上的 STUN 服務(wù)器發(fā)送請(qǐng)求,該服務(wù)器將回復(fù)客戶的公共地址,以及路由器 NAT 后面是否訪問客戶端。

    NAT

    網(wǎng)絡(luò)地址翻譯 (NAT)用于為您的設(shè)備提供公共 IP 地址。路由器將具有公共 IP 地址,連接到路由器的每個(gè)設(shè)備都將有一個(gè)私有 IP 地址。請(qǐng)求將從設(shè)備的私有 IP 轉(zhuǎn)換為路由器的公共 IP,并具有獨(dú)特的端口。這樣,您不需要每個(gè)設(shè)備都有獨(dú)特的公共 IP,但仍可以在互聯(lián)網(wǎng)上發(fā)現(xiàn)。

    某些路由器將限制誰可以連接到網(wǎng)絡(luò)上的設(shè)備。這可能意味著,即使我們有 STUN 服務(wù)器找到的公共 IP 地址,也沒有人能夠創(chuàng)建連接。在這種情況下,我們需要轉(zhuǎn)向轉(zhuǎn)向。

    TURN

    一些使用 NAT 的路由器采用一種稱為"對(duì)稱 NAT"的限制。這意味著路由器將只接受您以前連接過的對(duì)等的連接。

    使用 NAT 周圍的中繼進(jìn)行橫向(轉(zhuǎn))旨在通過打開與 TURN 服務(wù)器的連接并通過該服務(wù)器中繼所有信息來繞過對(duì)稱 NAT 限制。您將創(chuàng)建與 TURN 服務(wù)器的連接,并告訴所有對(duì)應(yīng)方將數(shù)據(jù)包發(fā)送到服務(wù)器瀏覽器網(wǎng)頁沒聲音,然后轉(zhuǎn)發(fā)給服務(wù)器。這顯然伴隨著一些開銷,所以它只使用,如果沒有其他選擇。

    SDP

    會(huì)話描述協(xié)議 (SDP)是描述連接的多媒體內(nèi)容的標(biāo)準(zhǔn),如分辨率、格式、編解碼器、加密等,以便在數(shù)據(jù)傳輸時(shí)兩個(gè)對(duì)等可以相互理解。這在本質(zhì)上是描述內(nèi)容而不是媒體內(nèi)容本身的元數(shù)據(jù)。

    因此,從技術(shù)上講,SDP 并不是真正的協(xié)議,而是用于描述設(shè)備之間共享介質(zhì)連接的數(shù)據(jù)格式。

    記錄 SDP 遠(yuǎn)遠(yuǎn)超出了此文檔的范圍;然而,這里有一些值得注意的事情。

    C++音視頻開發(fā)學(xué)習(xí)資料:點(diǎn)擊領(lǐng)取→音視頻開發(fā)(資料文檔+視頻教程+面試題)(++RTMP+RTSP+HLS+RTP)

    API

    主要讓瀏覽器具備三個(gè)作用。

    共分成三個(gè)API,分別對(duì)應(yīng)上面三個(gè)作用。

    概述

    .方法目前主要用于,在瀏覽器中獲取音頻(通過麥克風(fēng))和視頻(通過攝像頭),將來可以用于獲取任意數(shù)據(jù)流,比如光盤和傳感器。

    下面的代碼用于檢查瀏覽器是否支持方法。

    navigator.getUserMedia  = navigator.getUserMedia ||
                              navigator.webkitGetUserMedia ||
                              navigator.mozGetUserMedia ||
                              navigator.msGetUserMedia;
    if (navigator.getUserMedia) {
    ? ? // 支持
    } else {
    ? ? // 不支持
    }

    21, Opera 18和 17,支持該方法。目前,IE還不支持,上面代碼中的,只是為了確保將來的兼容。

    方法接受三個(gè)參數(shù)。

    navigator.getUserMedia({
    ? ? video: true, 
    ? ? audio: true
    }, onSuccess, onError);

    的第一個(gè)參數(shù)是一個(gè)對(duì)象,表示要獲取哪些多媒體設(shè)備,上面的代碼表示獲取攝像頭和麥克風(fēng);是一個(gè)回調(diào)函數(shù),在獲取多媒體設(shè)備成功時(shí)調(diào)用;也是一個(gè)回調(diào)函數(shù),在取多媒體設(shè)備失敗時(shí)調(diào)用。

    下面是一個(gè)例子。

    
    var constraints = {video: true};
    function onSuccess(stream) {
    

    手機(jī)瀏覽如何器登錄用友nc_瀏覽器網(wǎng)頁沒聲音_瀏覽不該瀏覽的網(wǎng)頁中木馬,360殺毒后電腦安全了嗎

    var video = document.querySelector("video"); video.src = window.URL.createObjectURL(stream); } function onError(error) { console.log("navigator.getUserMedia error: ", error); } navigator.getUserMedia(constraints, onSuccess, onError);

    如果網(wǎng)頁使用了方法,瀏覽器就會(huì)詢問用戶,是否同意瀏覽器調(diào)用麥克風(fēng)或攝像頭。如果用戶同意,就調(diào)用回調(diào)函數(shù);如果用戶拒絕,就調(diào)用回調(diào)函數(shù)。

    回調(diào)函數(shù)的參數(shù)是一個(gè)數(shù)據(jù)流對(duì)象。.方法和.方法瀏覽器網(wǎng)頁沒聲音,分別返回一個(gè)數(shù)組,其成員是數(shù)據(jù)流包含的音軌和視軌(track)。使用的聲音源和攝影頭的數(shù)量,決定音軌和視軌的數(shù)量。比如,如果只使用一個(gè)攝像頭獲取視頻,且不獲取音頻,那么視軌的數(shù)量為1,音軌的數(shù)量為0。每個(gè)音軌和視軌,有一個(gè)kind屬性,表示種類(video或者audio),和一個(gè)label屬性(比如 HD (Built-in))。

    回調(diào)函數(shù)接受一個(gè)Error對(duì)象作為參數(shù)。Error對(duì)象的code屬性有如下取值,說明錯(cuò)誤的類型。

    C++音視頻開發(fā)學(xué)習(xí)資料:點(diǎn)擊領(lǐng)取→音視頻開發(fā)(資料文檔+視頻教程+面試題)(++RTMP+RTSP+HLS+RTP)

    范例:獲取攝像頭

    下面通過方法,將攝像頭拍攝的圖像展示在網(wǎng)頁上。

    首先,需要先在網(wǎng)頁上放置一個(gè)video元素。圖像就展示在這個(gè)元素中。

    然后,用代碼獲取這個(gè)元素。

    function onSuccess(stream) {
        var video = document.getElementById('webcam');
    }
    

    接著,將這個(gè)元素的src屬性綁定數(shù)據(jù)流,攝影頭拍攝的圖像就可以顯示了。

    function onSuccess(stream) {
    ? ? var video = document.getElementById('webcam');
    ? ? if (window.URL) {
    	    video.src = window.URL.createObjectURL(stream);
    	} else {
    		video.src = stream;
    	}
    	video.autoplay = true; 
    	// 或者 video.play();
    }
    if (navigator.getUserMedia) {
    	navigator.getUserMedia({video:true}, onSuccess);
    } else {
    	document.getElementById('webcam').src = 'somevideo.mp4';
    }

    在和Opera中,URL.方法將媒體數(shù)據(jù)流()轉(zhuǎn)為一個(gè)二進(jìn)制對(duì)象的URL(Blob URL),該URL可以作為video元素的src屬性的值。 在中,媒體數(shù)據(jù)流可以直接作為src屬性的值。和Opera還允許獲取的音頻數(shù)據(jù),直接作為audio或者video元素的值,也就是說如果還獲取了音頻,上面代碼播放出來的視頻是有聲音的。

    獲取攝像頭的主要用途之一,是讓用戶使用攝影頭為自己拍照。 API有一個(gè)ctx.(video, 0, 0)方法,可以將視頻的一個(gè)幀轉(zhuǎn)為元素。這使得截屏變得非常容易。

    
    
    
    

    手機(jī)瀏覽如何器登錄用友nc_瀏覽不該瀏覽的網(wǎng)頁中木馬,360殺毒后電腦安全了嗎_瀏覽器網(wǎng)頁沒聲音

    <script> var video = document.querySelector('video'); var canvas = document.querySelector('canvas'); var ctx = canvas.getContext('2d'); var localMediaStream = null; function snapshot() { if (localMediaStream) { ctx.drawImage(video, 0, 0); // “image/webp”對(duì)Chrome有效, // 其他瀏覽器自動(dòng)降為image/png document.querySelector('img').src = canvas.toDataURL('image/webp'); } } video.addEventListener('click', snapshot, false); navigator.getUserMedia({video: true}, function(stream) { video.src = window.URL.createObjectURL(stream); localMediaStream = stream; }, errorCallback); </script>

    范例:捕獲麥克風(fēng)聲音

    通過瀏覽器捕獲聲音,需要借助Web Audio API。

    
    window.AudioContext = window.AudioContext ||
                          window.webkitAudioContext;
    var context = new AudioContext();
    function onSuccess(stream) {
    	var audioInput = context.createMediaStreamSource(stream);
    	audioInput.connect(context.destination);
    }
    navigator.getUserMedia({audio:true}, onSuccess);

    捕獲的限定條件

    方法的第一個(gè)參數(shù),除了指定捕獲對(duì)象之外,還可以指定一些限制條件,比如限定只能錄制高清(或者VGA標(biāo)準(zhǔn))的視頻。

    
    var hdConstraints = {
      video: {
        mandatory: {
          minWidth: 1280,
          minHeight: 720
        }
      }
    };
    

    瀏覽器網(wǎng)頁沒聲音_瀏覽不該瀏覽的網(wǎng)頁中木馬,360殺毒后電腦安全了嗎_手機(jī)瀏覽如何器登錄用友nc

    navigator.getUserMedia(hdConstraints, onSuccess, onError); var vgaConstraints = { video: { mandatory: { maxWidth: 640, maxHeight: 360 } } }; navigator.getUserMedia(vgaConstraints, onSuccess, onError);

    C++音視頻開發(fā)學(xué)習(xí)資料:點(diǎn)擊領(lǐng)取→音視頻開發(fā)(資料文檔+視頻教程+面試題)(++RTMP+RTSP+HLS+RTP)

    .()

    如果本機(jī)有多個(gè)攝像頭/麥克風(fēng),這時(shí)就需要使用.方法指定,到底使用哪一個(gè)攝像頭/麥克風(fēng)。

    
    MediaStreamTrack.getSources(function(sourceInfos) {
      var audioSource = null;
      var videoSource = null;
      for (var i = 0; i != sourceInfos.length; ++i) {
        var sourceInfo = sourceInfos[i];
        if (sourceInfo.kind === 'audio') {
          console.log(sourceInfo.id, sourceInfo.label || 'microphone');
          audioSource = sourceInfo.id;
        } else if (sourceInfo.kind === 'video') {
          console.log(sourceInfo.id, sourceInfo.label || 'camera');
          videoSource = sourceInfo.id;
        } else {
          console.log('Some other kind of source: ', sourceInfo);
        }
      }
      sourceSelected(audioSource, videoSource);
    });
    function sourceSelected(audioSource, videoSource) {
      var constraints = {
        audio: {
          optional: [{sourceId: audioSource}]
        },
        video: {
          optional: [{sourceId: videoSource}]
        }
    

    瀏覽器網(wǎng)頁沒聲音_手機(jī)瀏覽如何器登錄用友nc_瀏覽不該瀏覽的網(wǎng)頁中木馬,360殺毒后電腦安全了嗎

    }; navigator.getUserMedia(constraints, onSuccess, onError); }

    上面代碼表示,.方法的回調(diào)函數(shù),可以得到一個(gè)本機(jī)的攝像頭和麥克風(fēng)的列表,然后指定使用最后一個(gè)攝像頭和麥克風(fēng)。

    的作用是在瀏覽器之間建立數(shù)據(jù)的“點(diǎn)對(duì)點(diǎn)”(peer to peer)通信,也就是將瀏覽器獲取的麥克風(fēng)或攝像頭數(shù)據(jù),傳播給另一個(gè)瀏覽器。這里面包含了很多復(fù)雜的工作,比如信號(hào)處理、多媒體編碼/解碼、點(diǎn)對(duì)點(diǎn)通信、數(shù)據(jù)安全、帶寬管理等等。

    不同客戶端之間的音頻/視頻傳遞,是不用通過服務(wù)器的。但是,兩個(gè)客戶端之間建立聯(lián)系,需要通過服務(wù)器。服務(wù)器主要轉(zhuǎn)遞兩種數(shù)據(jù)。

    協(xié)議沒有規(guī)定與服務(wù)器的通信方式,因此可以采用各種方式,比如。通過服務(wù)器,兩個(gè)客戶端按照 (SDP協(xié)議)交換雙方的元數(shù)據(jù)。

    下面是一個(gè)示例。

    
    var signalingChannel = createSignalingChannel();
    var pc;
    var configuration = ...;
    // run start(true) to initiate a call
    function start(isCaller) {
        pc = new RTCPeerConnection(configuration);
        // send any ice candidates to the other peer
        pc.onicecandidate = function (evt) {
            signalingChannel.send(JSON.stringify({ "candidate": evt.candidate }));
        };
        // once remote stream arrives, show it in the remote video element
        pc.onaddstream = function (evt) {
            remoteView.src = URL.createObjectURL(evt.stream);
        };
        // get the local stream, show it in the local video element and send it
        navigator.getUserMedia({ "audio": true, "video": true }, function (stream) {
            selfView.src = URL.createObjectURL(stream);
            pc.addStream(stream);
            if (isCaller)
                pc.createOffer(gotDescription);
            else
                pc.createAnswer(pc.remoteDescription, gotDescription);
            function gotDescription(desc) {
                pc.setLocalDescription(desc);
                signalingChannel.send(JSON.stringify({ "sdp": desc }));
            }
        });
    }
    signalingChannel.onmessage = function (evt) {
    

    手機(jī)瀏覽如何器登錄用友nc_瀏覽不該瀏覽的網(wǎng)頁中木馬,360殺毒后電腦安全了嗎_瀏覽器網(wǎng)頁沒聲音

    if (!pc) start(false); var signal = JSON.parse(evt.data); if (signal.sdp) pc.setRemoteDescription(new RTCSessionDescription(signal.sdp)); else pc.addIceCandidate(new RTCIceCandidate(signal.candidate)); };

    帶有瀏覽器前綴,瀏覽器中為ion,瀏覽器中為。維護(hù)一個(gè)函數(shù)庫.js,用來抽象掉瀏覽器之間的差異。

    的作用是在點(diǎn)對(duì)點(diǎn)之間,傳播任意數(shù)據(jù)。它的API與的API相同。

    下面是一個(gè)示例。

    RTCPeerConnection帶有瀏覽器前綴,Chrome瀏覽器中為webkitRTCPeerConnection,F(xiàn)irefox瀏覽器中為mozRTCPeerConnection。Google維護(hù)一個(gè)函數(shù)庫adapter.js,用來抽象掉瀏覽器之間的差異。
    RTCDataChannel
    RTCDataChannel的作用是在點(diǎn)對(duì)點(diǎn)之間,傳播任意數(shù)據(jù)。它的API與WebSockets的API相同。
    下面是一個(gè)示例。

    25、Opera 18和 22支持。

    外部函數(shù)庫

    由于這兩個(gè)API比較復(fù)雜,一般采用外部函數(shù)庫進(jìn)行操作。目前,視頻聊天的函數(shù)庫有、、.io,點(diǎn)對(duì)點(diǎn)通信的函數(shù)庫有、。

    下面是的示例。

    
    var webrtc = new WebRTC({
      localVideoEl: 'localVideo',
      remoteVideosEl: 'remoteVideos',
      autoRequestMedia: true
    });
    webrtc.on('readyToCall', function () {
        webrtc.joinRoom('My room name');
    });

    下面是的示例。

    
    var peer = new Peer('someid', {key: 'apikey'});
    peer.on('connection', function(conn) {
      conn.on('data', function(data){
        // Will print 'hi!'
        console.log(data);
      });
    });
    // Connecting peer
    var peer = new Peer('anotherid', {key: 'apikey'});
    var conn = peer.connect('someid');
    conn.on('open', function(){
      conn.send('hi!');
    });

網(wǎng)站首頁   |    關(guān)于我們   |    公司新聞   |    產(chǎn)品方案   |    用戶案例   |    售后服務(wù)   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區(qū)    電話:010-     郵箱:@126.com

備案號(hào):冀ICP備2024067069號(hào)-3 北京科技有限公司版權(quán)所有