2014-04-01 7 views
3

현재 peerJS를 사용하여 webRTC를 통해 화상 통화를 시작할 수있는 응용 프로그램을 작성 중입니다. 이제는 사용자가 오디오 추가 여부를 결정할 수 있지만 통화를 다시 시작하지 않아도됩니다.webRTC : 나중에 오디오 추가 또는 peerJS를 사용하여 마이크 사용 안 함

내가보기에 - this answer에 따르면 브라우저를 사용하여 마이크를 제어 할 수있는 방법이 없습니다. 비디오 및 오디오가 활성화 된 상태에서 통화를 시작한다고 가정하고 파트너 측에서 비디오 요소를 음소거 할 수 있습니다. 나는 그것을하고 싶지 않다. 왜? 누군가가 브라우저의 개발자 콘솔을 사용하고 비디오 요소의 음소거를 해제하여 자신의 지식없이 발신자를 감시 할 수 있다고 상상합니다.

이제는 파트너에게 다시 전화를 걸어 비디오와 오디오를 모두 활성화해야 할 것 같습니다. 사용자가 비디오 만 원할 경우 다시 통화해야합니다.

내 질문 : 더 좋은 방법이 있습니까? 또한 전화를 받으면 비디오 전용인지, 비디오 및 오디오 전화인지 파악하는 방법이 있습니까?

+0

왜 peerjs 호출의 메타 데이터 매개 변수를 사용하여 오디오 호출인지 화상 호출인지 식별하지 마십시오. 물론 전화를 걸 때이 매개 변수를 설정해야합니다. – thunderbird

답변

3

마이크 나 웹캠에 대한 액세스 권한을 취소하여 데이터 스트림이 중단되고 표시등이 꺼지고 카메라가 다시 활성화되면 사용자에게 메시지가 표시됩니다 다시.

W3C WebRTC Spec에 따르면,이 작업을 수행 할 수 있어야한다 :

스크립트는 트랙이 더 이상 MediaStreamTrack.stop() 방법으로 소스를 필요가 있음을 나타낼 수 있습니다. 소스를 사용하는 모든 트랙이 중단 된 경우 해당 소스에 대한 주어진 권한이 취소되고 소스가 중지됩니다. 데이터가 라이브 소스 (예 : 마이크 또는 카메라)에서 생성되는 경우 사용 도구는 해당 소스에 대한 활성 "온에어"표시기를 제거해야합니다. peerJS API docs에서

는 정지() 메소드의 언급이 없지만, 당신은 내가 전화 할게 peerJS의 call() 함수에 전달 스트림을 사용하여 브라우저의의 WebRTC 구현에 전화를 할 수 있어야한다 stream는 :

var s = function(t) { 
    t.stop(); 
} 
stream.getAudioTracks().map(s); 

이 브라우저가 오디오 액세스를 취소하게한다.

그러나 사용자 브라우저에 열려있는 WebRTC 연결을 유지하는 보안에 대해서는별로 신경 쓰지 않습니다. 누군가 브라우저에서 해킹 당했을 경우 이미 사용자의 암호화되지 않은 암호에 액세스 할 수 있으며 카메라 표시기 (사용 가능한 경우)가 표시됩니다.

행운을 빈다.

+0

답변 해 주셔서 감사합니다. 내가 원했던 것은 아니었지만 (내 잘못). 나를 위해 일하는 해결책에 대한 위의 내 대답을 참조하십시오. 적어도 지금은. 추가 테스트를해야 할 것입니다. –

1

우연한 점은 this blog post from Mozilla입니다. 흥미로운 부분은 "오디오 및 비디오 스트림 음소거"헤드 라인 아래에서 시작됩니다. 여기에 다음 코드 줄이 있습니다.

mediaStream.getVideoTracks()[0].enabled = !(mediaStream.getVideoTracks()[0].enabled); 

기본적으로 비디오 트랙을 비활성화 할 수 있습니다. 밝혀 졌 듯이 다음과 같은 경우도 가능합니다.

mediaStream.getAudioTracks()[0].enabled = false; 

오디오 스트림을 음소거합니다.localStream에 다음과 같이 적용하면 :

Participant.prototype.startCall = function(){ 

    var participant = this; 

    var target = participant.callees[0]; 

    navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia; 

    navigator.getUserMedia({ 
      audio: true, 
      video: true 
    },function(stream){ 
      console.log("called"); 
      //IMPORTANT LINE HERE 
      stream.getAudioTracks()[0].enabled = false; 
      participant.localStream = stream; 
      participant.call = participant.peer.call(target, stream); 
    },function(error){ 
      console.log(error); 
    }); 
}; 

오디오 스트림을 사용하지 않는 것 같습니다. 당신은 내가 내 객체의 속성으로 localStream를 저장하고 난 당신이 remoteStream에서 같은 작업을 할 수 없어 판단 할 수 마찬가지로 지금까지

myObj.localStream.getAudioTracks()[0].enabled = true; 

를 사용하여 오디오 스트림을 활성화 나중에 수 있어요 볼 수 있듯이 . 하지만 추가 테스트를 통해이를 확인해야합니다.

+0

'enable-audio'와'disable-audio'와 같이 연결된 피어로부터 메시지를 보내고 그에 따라'stream.getAudioTracks() [0] .enabled'를 사용하여 원격 스트림의 오디오를 토글합니다. 피어가 비활성화되었을 때 오디오가 피어로 이동하지는 않지만 데이터 전송을 아직 측정 할 수 없었다고 가정합니다. – Bert