2013-01-10 25 views
14

GetUserMedia'yı kullanarak web kamerasından aldığım resmin boyutunun ne olacağını bulmaya çalışıyorum.Web kamerası görüntüsünün boyutunu getUserMedia ile nasıl edinebilirim?

Şu an, Macbook'umda, sözde 720p bir kameram var ama elde ettiğim görüntü 640x480. Her zaman böyle olmayacağımı düşünüyorum ve mümkün olduğunca çok sayıda kamerayla başa çıkmak istiyorum. (Boyutun kendisinden daha büyük bir dikkatle bakıyorum, sadece resimlerin gergin görünmediğinden emin olmak istiyorum)

Bunu yapmak mümkün mü?

Teşekkür ederiz!
Daniel

cevap

17

Bunu, videoWidth ve videoHeight özelliklerini kullanmak mümkün olmalıdır:

GÜNCELLEME
// 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); 

: Aslında bu Opera'da çalışıyor ancak görünmüyor artık ve değişmedi Chrome'da desteklenecek Firefox'ta (en azından video akışları için değil) uygulandı. Yine de, HTML5 spec numaralı telefondan, bu tarayıcıların yol haritasını umarız.

UPDATE 2: Bu işe yarıyor, ancak dinlenecek olay "oynatılıyor" ve "oynatma" değil (yukarıdaki kodda sabitlenmiş). "Çalma" olayı, play() yöntemi döndürüldüğünde tetiklenir, oysa oynatma gerçekten başladığında "oynatma" olayı tetiklenir. Opera, Chrome ve Firefox'ta test edildi.

GÜNCELLEME 3: Firefox 18, "oynatma" olayını art arda ateşliyor gibi görünüyor; bu, tarayıcının dinleyicide çok fazla kod çalıştırıyorsanız durması anlamına gelebilir. o kovulduğunu sonra daha iyi bu yüzden gibi dinleyici kaldırmak için:

var videoWidth, videoHeight; 
var getVideoSize = function() { 
    videoWidth = video.videoWidth; 
    videoHeight = video.videoHeight; 
    video.removeEventListener('playing', getVideoSize, false); 
}; 

video.addEventListener('playing', getVideoSize, false); 
+0

Evet, gördüm, ama ... Chrome veya Firefox Diğer fikirler değil mi? Teşekkürler! –

+1

Afraid değil. Artık Chrome'da çalışmayı bıraktım, kendime bir geçici çözüm arıyorum. Üzgünüm, yardım edemedim. – tagawa

+1

Anladım! Biraz deneme yaptıktan sonra, videoWidth özelliği yalnızca "çalma" olayının ("oynatma" değil) işlendikten sonra var olduğu ortaya çıkar. Bunu göstermek için yukarıdaki cevabı güncelledik. – tagawa

1

(Ubuntu üzerinde en az Firefox 26.0 yılında 12.04 LTS kullandığım) Firefox'ta çalışmıyor playing olayın içine takma. Video oynatılmaya başladıktan sonra playing olay bir veya iki kez patlar. videoWidth ve videoHeight, playing olayının etkinleşmesi durumunda 0'dır veya tanımsızdır. videoWidth ve videoHeight öğelerini algılamanın daha güvenilir bir yolu, her zaman işe yarayacak gibi gözüküyor ve oynatılıyor. Kod parçacığı aşağıda benim için çalıştı:

//Detect camera resolution using pause/play loop. 
var retryCount = 0; 
var retryLimit = 25; 
var video = $('.video')[0]; //Using jquery to get the video element. 
video.onplaying = function(e) { 
    var videoWidth = this.videoWidth; 
    var videoHeight = this.videoHeight; 
    if (!videoWidth || !videoHeight) { 
     if (retryCount < retryLimit) { 
      retryCount++; 
      window.setTimeout(function() { 
       video.pause(); 
       video.play(); 
      }, 100); 
     } 
     else { 
      video.onplaying = undefined; //Remove event handler. 
      console.log('Failed to detect camera resolution after ' + retryCount + ' retries. Giving up!'); 
     } 
    } 
    else { 
     video.onplaying = undefined; //Remove event handler. 
     console.log('Detected camera resolution in ' + retryCount + ' retries.'); 
     console.log('width:' + videoWidth + ', height:' + videoHeight); 
    } 
};