getUserMedia を使用して Web カメラから取得した画像のサイズを調べようとしています。
現在、私の Macbook にはおそらく 720p のカメラがありますが、得られる画像は 640x480 です。ただし、これが常に当てはまるとは限らないと思います。できるだけ多くのカメラを処理できるようにしたいと考えています。(サイズ自体よりも縦横比の方が気になります。写真が引き伸ばされないようにしたいだけです)
これを行うことは可能ですか?
ありがとうございました!
ダニエル
getUserMedia を使用して Web カメラから取得した画像のサイズを調べようとしています。
現在、私の Macbook にはおそらく 720p のカメラがありますが、得られる画像は 640x480 です。ただし、これが常に当てはまるとは限らないと思います。できるだけ多くのカメラを処理できるようにしたいと考えています。(サイズ自体よりも縦横比の方が気になります。写真が引き伸ばされないようにしたいだけです)
これを行うことは可能ですか?
ありがとうございました!
ダニエル
videoWidth
次のように、videoHeight
属性を使用できるはずです。
// Check camera stream is playing by getting its width
video.addEventListener('playing', function() {
if (this.videoWidth === 0) {
console.error('videoWidth is 0. Camera not connected?');
}
}, false);
更新: 実際、これは Opera で動作しますが、Chrome ではサポートされていないようで、Firefox では実装されていません (少なくともビデオ ストリームでは)。ただし、これはHTML5 仕様に含まれているため、これらのブラウザーのロードマップに含まれることを願っています。
更新 2: これは機能しますが、リッスンするイベントは「再生」ではなく「再生」です (上記のコードで修正されています)。「再生」イベントはplay()
メソッドが返されたときに発生しますが、「再生中」イベントは再生が実際に開始されたときに発生します。Opera、Chrome、Firefox でテスト済み。
更新 3: Firefox 18 は「再生中」イベントを繰り返し発生させるようです。つまり、リスナー内で多くのコードを実行している場合、ブラウザーが停止する可能性があります。次のように、起動後にリスナーを削除することをお勧めします。
var videoWidth, videoHeight;
var getVideoSize = function() {
videoWidth = video.videoWidth;
videoHeight = video.videoHeight;
video.removeEventListener('playing', getVideoSize, false);
};
video.addEventListener('playing', getVideoSize, false);