WebRTCを利用するためには, navigatorオブジェクトのgetUserMediaメソッドを呼び出す必要があります.
第1引数にはデバイスを指定するためのオブジェクト (連想配列), 第2引数にはデバイスへのアクセスが成功した場合に実行されるコールバック関数, 第3引数にはデバイスへのアクセスが失敗した場合 (ユーザーがデバイスへのアクセスを拒否した場合など) に実行されるコールバック関数を指定します.
サンプルコード 01
// Access microphone and camera
var medias = {audio : true, video : true};
/**
* @param {MediaStream|LocalMediaStream} stream
*/
var successCallback = function(stream) {
// do something ....
};
/**
* @param {NavigatorUserMediaError|MediaStreamError} error
*/
var errorCallback = function(error) {
// do something ....
};
navigator.getUserMedia(medias, successCallback, errorCallback);
ただし, 現状ではベンダープレフィックスが必要となるので, サンプルコード 02のように修正します.
サンプルコード 02
navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia;
// Access microphone and camera
var medias = {audio : true, video : true};
/**
* @param {MediaStream|LocalMediaStream} stream
*/
var successCallback = function(stream) {
// do something ....
};
/**
* @param {NavigatorUserMediaError|MediaStreamError} error
*/
var errorCallback = function(error) {
// do something ....
};
navigator.getUserMedia(medias, successCallback, errorCallback);
第1引数のオブジェクト (連想配列) は, マイクにアクセスするのであればaudioプロパティの値をtrueに指定し, カメラにアクセスするのであればvideoプロパティの値をtrueに指定します.
第2引数のコールバック関数には, MediaStreamインスタンス (FirefoxはLocalMediaStreaインスタンス) が渡されます
第3引数のコールバック関数には, NavigatorUserMediaErrorインスタンス (FirefoxはMediaStreamErrorインスタンス) が渡されます.
MediaStreamインスタンスがデバイスからの入力となる重要なオブジェクトです. MediaStreamインスタンスをWeb Audio APIの入力としてあつかう方法は次のセクションで解説します.
とりあえず, デバイス (マイクとカメラ) からの入力を, HTMLVideoElementで再生するには, サンプルコード 03のようにします.
サンプルコード 03
<!-- HTML -->
<video autoplay></video>
navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia;
window.URL = window.URL || window.webkitURL;
var video = document.querySelector('video');
// Access microphone and camera
var medias = {audio : true, video : true};
/**
* @param {MediaStream|LocalMediaStream} stream
*/
var successCallback = function(stream) {
video.src = window.URL.createObjectURL(stream);
};
/**
* @param {NavigatorUserMediaError|MediaStreamError} error
*/
var errorCallback = function(error) {
console.error(error);
};
navigator.getUserMedia(medias, successCallback, errorCallback);
重要なポイントは以下の3つです.
- videoタグにautoplay属性を指定する (これがないと, 最初のフレームしか再生されない)
- createObjectURLメソッドの引数にMediaStreamインスタンスを渡す
- 生成したObject URLをHTMLVideoElementのsrc属性に指定する
ちなみに, getUserMediaメソッドを実行すると, ブラウザがデバイスへアクセスする許可を求めるダイアログを表示します. アクセスしても問題がなければ, 「許可」を選択するようにしてください.

図4 - 2 - a. デバイスへアクセスする許可を求めるダイアログ
それでは, デモ 01で実際に試してみてください.