2013-01-24 18 views
8

Uygulamamda, kullanıcının kamerasından bir video görüntülemek için getUserMedia'u kullanan kalıcı bir iletişim kutusu var. Bu, "Reddet/İzin Ver" çubuğunun görünmesine neden olur. Kullanıcının "Reddet" veya "İzin Ver" i tıklamadan önce iletişim kutusunu kapattığını varsayalım. Çubuk, onu kullanan elemanlar ortadan kalkmış olsa bile kalır.Bir getUserMedia isteğini iptal etme

Tarayıcı, kullanıcı etkileşimde bulunmasa bile izin isteğini gizleyebileceğini tarayıcıya bildirmenin bir yolu var mı? Üzerinde stop() çağırır,

$("body").on('click', "#stop_button", function(e) { 
     e.preventDefault(); 
     mediaStream.stop(); 
    }); 

MediaStream senin örnekte Yani

 navigator.getUserMedia(
      { 
       video: true, 
       audio: false 
      }, 
      function(stream) { 
       if (navigator.mozGetUserMedia) { 
       video.mozSrcObject = stream; 
       } else { 
       var url = window.URL || window.webkitURL; 
       video.src = url ? url.createObjectURL(stream) : stream; 
       } 
       mediaStream = stream; 
       video.play(); 
      }, 
      function(error) { 
       console.log("ERROR: " + error); 
      } 
     ); 

getUserMedia

çağrıldığında tanımlandı benim küresel değişkendir:

+0

Hayır ve bunun için güvenlik nedenleri var. Alan, etki alanı izin verilenler listesinde yoksa, alan her zaman medyaya erişmeyi dener. –

+0

Sorunun yanlış yazılmış olduğunu fark ettim. Gerçekten sorduğumdan başka bir şey soruyormuş gibi geldi. Umarım benim düzenim soruyu yeterince açıklığa kavuşturmuştur. –

+0

Umarım sakıncası yoktur, ama birilerinin cevap verme ihtimalinin daha yüksek olduğu umuduyla soruyu daha basit bir forma indirdim. Birden fazla istek almayla ilgili alt probleminiz, daha geniş kapsamı olan değişkenler, örneğin genel bir akış nesnesi ve erişim verildiğinde çağrılan global bir işlev kullanılarak çözülebilir. O zaman hangi geri dönüşlerin patlaması önemli değil, çünkü her ikisinin de aynı etkiye sahip olacaklar. – Dave

cevap

-4

Ben böyle bir şey istiyorum düşünüyorum iletişim kutusu kapatıldığında medya akışınız - bunun için bir etkinlik işleyicisi oluşturmanız gerekir.

Tam çalışmış örnek ve canlı demo için bu Tutorial on getUserMedia'a bir göz atın.

+3

Test etmek için bilgisayar başında elimde yok, ancak kullanıcının henüz izin vermediği/reddedilmesi durumunda bu izin afişinin kaybolmadığına inanıyorum. En azından birkaç ay önce bunu denediğimde durum buydu. – Dave

2

kullanıcı iletişim kutusunu kapattığında ile izin isteğini temizlemek için sayfayı yeniden:

location.reload(); 

Firefox ve Chrome 41 (Kanarya) bu test ettik ve onu orada çalışıyor.

Uyarı: Chrome 39 (bu yazının şu anki sürümü), bunun iyi çalışmadığı bir hatayı görüyor. Sayfaya ilk gittiğimde çalışmaz, ancak sayfayı bir kez manuel olarak yeniledikten sonra çalışmaya başlar.

Bu cevabın hemen işe yaramayacağını anlıyorum, ancak Chrome 41'in gönderilmesi gereken bir kez çalışması gerekiyor.

Şu anda sayfayı yeniden yüklemeden izin istemini temizleme yolu yoktur.