2017-01-08 1 views
0

私はウェブカメラをストリーミングしており、ウェブカメラを停止する方法が必要です。私は、コールバック関数の外でトラック変数に到達することはできませんが、ストリーミングトラックでstopを呼び出すことによってそれを停止しようとしています。コールバック関数の外でこの関数内でtrackにアクセスするにはどうすればよいですか?基本的にはこのような:ストリームコールバック関数外の変数にアクセスする - JavaScript、WebRTC

var track; 
      function successCallback(stream) { 
       localstream = stream; // stream available to console 
       track = stream.getTracks()[0]; 
       if (window.URL) { 
        video.src = window.URL.createObjectURL(stream); 
       } else { 
        video.src = stream; 
       } 
      } 
track.stop(); 

完全なインスタンスは、次のようになります。

function media(i) { 
      navigator.getUserMedia = navigator.getUserMedia || 
       navigator.webkitGetUserMedia || navigator.mozGetUserMedia; 

      var constraints = { 
       audio: false, 
       video: true 
      }; 
      var video = document.querySelectorAll("video")[i]; 
      var localstream; 

      function successCallback(stream) { 
       localstream = stream; // stream available to console 
       var track = stream.getTracks()[0]; 
       if (window.URL) { 
        video.src = window.URL.createObjectURL(stream); 
       } else { 
        video.src = stream; 
       } 

       track.stop(); 
      } 

      function errorCallback(error) { 
       console.log('navigator.getUserMedia error: ', error); 
      } 

      navigator.getUserMedia(constraints, successCallback, errorCallback); 
     } 
+1

場合は、 'successCallback'は、非同期操作で呼び出されることはできません。コールバックの使用に関連するより多くのコード・コンテキストを提供し、達成する必要があるもののより良い説明を提供してください。 [ask]と[mcve]を参照してください – charlietfl

+0

'track.stop()'を呼び出すとどうなるでしょうか? – guest271314

+0

ウェブカメラのストリーミングを停止する。質問が更新されます! – Jesper

答えて

1

media機能のtrack外範囲を定義します。また、track.stop()が呼び出されたときにBlob URLvideosrcに設定することを検討してください。

window.onload = function() { 
    let track, url; 

    function media(i) { 
    navigator.getUserMedia = navigator.getUserMedia || 
     navigator.webkitGetUserMedia || navigator.mozGetUserMedia; 

    var constraints = { 
     audio: false, 
     video: true 
    }; 
    var video = document.querySelectorAll("video")[i]; 
    var localstream; 

    function successCallback(stream) { 
     localstream = stream; // stream available to console 
     track = stream.getTracks()[0]; 
     if (window.URL) { 
     url = window.URL.createObjectURL(stream); 
     video.src = url; 
     } else { 
     video.src = stream; 
     } 

     // track.stop(); 
    } 

    function errorCallback(error) { 
     console.log('navigator.getUserMedia error: ', error); 
    } 

    navigator.getUserMedia(constraints, successCallback, errorCallback); 
    } 

    var button = document.querySelector("button"); 
    button.onclick = function() { 
    track.stop(); 
    URL.revokeObjectURL(url); 
    // document.querySelectorAll("video")[i].src = ""; 
    } 
    media(0) 
} 

plnkr https://plnkr.co/edit/FJhEBOCTRcE5NUUaEI7B?p=preview

関連する問題