【轉載請註明出處: http://blog.csdn.net/leytton/article/details/76704342】
css
PS:若是本文對您有幫助,請點個贊讓我知道哦~html
《WebRTC實時通訊系列教程》翻譯自《Real time communication with WebRTC》
git
示例代碼下載http://download.csdn.net/detail/leytton/9923708github
WebRTC實時通訊系列教程2 概述
json
WebRTC實時通訊系列教程5 RTCPeerConnection傳輸視頻
網絡
WebRTC實時通訊系列教程6 使用RTCDataChannel傳輸數據app
WebRTC實時通訊系列教程7 使用Socket.IO搭建信令服務器交換信息
在這一節中,你將學會:
此節代碼保存在 step-01 文件夾下.
添加一個video 標籤和一個 script 標籤到 work 目錄下的 index.html 文件中:
<!DOCTYPE html> <html> <head> <title>Realtime communication with WebRTC</title> <link rel="stylesheet" href="css/main.css" /> </head> <body> <h1>Realtime communication with WebRTC</h1> <video autoplay></video> <script src="js/main.js"></script> </body> </html>
添加如下代碼到 js 目錄中的 main.js 文件中:
'use strict'; navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia; var constraints = { audio: false, video: true }; var video = document.querySelector('video'); function successCallback(stream) { window.stream = stream; // stream available to console if (window.URL) { video.src = window.URL.createObjectURL(stream); } else { video.src = stream; } } function errorCallback(error) { console.log('navigator.getUserMedia error: ', error); } navigator.getUserMedia(constraints, successCallback, errorCallback);
全部的JavaScript案例代碼使用 'use strict';
來避免常見代碼錯誤.
詳情閱讀 ECMAScript 5 Strict Mode, JSON, and More.
在瀏覽器打開 index.html 你將看到這個 (展現的是你的攝像頭視圖!):
更好的語法形式
你會感受這些代碼看起來有點舊.
咱們如今使用 getUserMedia()
的回調函數來兼容當前瀏覽器.
能夠查看 github.com/webrtc/samples 上的Promise版示例代碼, 使用的是 MediaDevices API 而且能更好地進行錯誤處理. 咱們後面將會使用它.
getUserMedia()
調用語法爲:
navigator.getUserMedia(constraints, successCallback, errorCallback);
這一接口相對較新, 因此各類瀏覽器在getUserMedia中依然使用的是前綴名,你能夠查看 main.js 文件中的頂部代碼.
constraints 變量的參數能夠指定獲取哪些媒體資源 — 在下面的代碼中, 只獲取視頻而不獲取音頻:
var constraints = { audio: false, video: true };
若是 getUserMedia() 函數執行成功, 攝像頭視頻流能夠設置爲video標籤的src屬性資源:
function successCallback(stream) { window.stream = stream; // stream available to console if (window.URL) { video.src = window.URL.createObjectURL(stream); } else { video.src = stream; } }
video { -webkit-filter: blur(4px) invert(1) opacity(0.5); }
video { filter: hue-rotate(180deg) saturate(200%); -moz-filter: hue-rotate(180deg) saturate(200%); -webkit-filter: hue-rotate(180deg) saturate(200%); }
在這節內容中你學習了:
此節代碼保存在 step-01 文件夾下.
video { max-width: 100%; width: 320px; }
你已經獲取到視頻了, 但如何傳輸視頻呢? 下一節即將揭曉!
摘自https://codelabs.developers.google.com/codelabs/webrtc-web/#3
In this step you'll find out how to:
A complete version of this step is in the step-01 folder.
Add a video
element and a script
element to index.html in your work directory:
<!DOCTYPE html> <html> <head> <title>Realtime communication with WebRTC</title> <link rel="stylesheet" href="css/main.css" /> </head> <body> <h1>Realtime communication with WebRTC</h1> <video autoplay></video> <script src="js/main.js"></script> </body> </html>
Add the following to main.js in your js folder:
'use strict'; navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia; var constraints = { audio: false, video: true }; var video = document.querySelector('video'); function successCallback(stream) { window.stream = stream; // stream available to console if (window.URL) { video.src = window.URL.createObjectURL(stream); } else { video.src = stream; } } function errorCallback(error) { console.log('navigator.getUserMedia error: ', error); } navigator.getUserMedia(constraints, successCallback, errorCallback);
All the JavaScript examples here use 'use strict';
to avoid common coding gotchas.
Find out more about what that means in ECMAScript 5 Strict Mode, JSON, and More.
Open index.html in your browser and you should see something like this (featuring the view from your webcam, of course!):
A better API for gUM
If you think the code looks a little old fashioned, you're right.
We're using the callback version of getUserMedia()
for compatibility with current browsers.
Check out the demo at github.com/webrtc/samples to see the Promise-based version, using the MediaDevices APIand better error handling. Much nicer! We'll be using that later.
getUserMedia()
is called like this:
navigator.getUserMedia(constraints, successCallback, errorCallback);
This technology is still relatively new, so browsers are still using prefixed names for getUserMedia
. Hence the shim code at the top of main.js!
The constraints
argument allows you to specify what media to get — in this example, video and not audio:
var constraints = { audio: false, video: true };
If getUserMedia()
is successful, the video stream from the webcam is set as the source of the video element:
function successCallback(stream) { window.stream = stream; // stream available to console if (window.URL) { video.src = window.URL.createObjectURL(stream); } else { video.src = stream; } }
stream
object passed to getUserMedia()
is in global scope, so you can inspect it from the browser console: open the console, type stream and press Return. (To view the console in Chrome, press Ctrl-Shift-J, or Command-Option-J if you're on a Mac.)stream.getVideoTracks()
return?stream.getVideoTracks()[0].stop()
.{audio: true, video: true}
?video { -webkit-filter: blur(4px) invert(1) opacity(0.5); }
video { filter: hue-rotate(180deg) saturate(200%); -moz-filter: hue-rotate(180deg) saturate(200%); -webkit-filter: hue-rotate(180deg) saturate(200%); }
In this step you learned how to:
A complete version of this step is in the step-01 folder.
autoplay
attribute on the video
element. Without that, you'll only see a single frame!getUserMedia()
constraints. Take a look at the demo atwebrtc.github.io/samples/src/content/peerconnection/constraints. As you'll see, there are lots of interesting WebRTC samples on that site.width
and max-width
to set a preferred size and a maximum size for the video. The browser will calculate the height automatically:video { max-width: 100%; width: 320px; }
You've got video, but how do you stream it? Find out in the next step!