ユーザーのカメラをキャプチャしています。可能な限り最高の解像度で写真を撮りたいので、コードは以下のスニペットのようなものです。
着信ストリームから解像度の詳細を読み取りたいので、スナップショットをクリックするために使用するビデオの高さと幅として設定できます。スナップショットをストリームによって提供される最高の品質にしたいのですが、これは可能です( stream
変数から解像度の詳細を読み取ります)?
EDIT:webrtc
を使用してビデオを送信しているので、送信されたビデオストリームのフレームレートも調べたいと思います。
$(document).ready(function(){
navigator.getUserMedia = ( navigator.getUserMedia ||navigator.mozGetUserMedia ||navigator.webkitGetUserMedia ||navigator.msGetUserMedia);
if(navigator.getUserMedia){
navigator.getUserMedia({ video: true, audio:true}, function(stream) {
var video = $('#video')[0];
video.src = window.URL.createObjectURL(stream);
video.muted=true;
//$('#video').hide();
}, function(){
showMessage('unable to get camera', 'error');
});
}else{
showMessage('no camera access mate.', 'error');
}
function showMessage(msg,type) { // type 'success' or 'error'
$('#msg').text(msg);
}
})
htmlコード:
<div id='msg' class'message'></div>
<div >
<video id='video' autoplay></video>
</div>
navigator.mediaDevices.getUserMedia()
メソッドは、ビデオおよびオーディオストリームとともにMediaStream
オブジェクトを返します。このMediaStream
オブジェクトにはgetVideoTracks()
メソッドとgetAudioTracks()
メソッドがあります。
getVideoTracks()[0]
はローカルWebカメラからのビデオストリームを返します。このビデオトラックオブジェクトには、次のようないくつかの便利なプロパティを返すgetSettings()メソッドがあります。
stream.getVideoTracks()[0].getSettings().deviceId
stream.getVideoTracks()[0].getSettings().frameRate
stream.getVideoTracks()[0].getSettings().height
stream.getVideoTracks()[0].getSettings().width
stream.getVideoTracks()[0].getSettings().frameRate
結果、例:
aspectRatio
:1.3333333333333333
deviceId
: "e85a2bd38cb0896cc6223b47c5d3266169524e43b6ab6043d8dd22d60ec01a2f"
frameRate
:30
height
:480
width
:640
aspectRatio
-4x3(1.3333333333333333)または16x9(フルスクリーンかどうか)、
deviceId
-ウェブカメラID、
framRate
-ビデオストリームのフレームレート、
width
-ビデオ幅、
height
-ビデオの高さ。
Onloadedmetadataを介してストリームがビデオ要素に接続されると、ビデオ要素からビデオストリームのネイティブ解像度を取得できます。これはフレームレート情報を提供しません。
navigator.getUserMedia({ video: true, audio:true}, function(stream) {
var video = $('#video')[0];
video.src = window.URL.createObjectURL(stream);
video.muted=true;
video.onloadedmetadata = function() {
console.log('width is', this.videoWidth);
console.log('height is', this.videoHeight);
}
//$('#video').hide();
}, function(){
showMessage('unable to get camera', 'error');
});
W3Cドラフト によると、ストリーム内のメディアトラックはこの情報を提供する必要がありますが、実際にはブラウザはまだそれを実装していません。
GetCapabilities()メソッドは、オブジェクトがサポートする制約可能なプロパティの名前のディクショナリを返します。