Как добавить аудио / видео кнопки отключения / включения звука в видеочате WebRTC
Я пытаюсь создать видеочат WebRTC. Теперь я застрял на создании кнопок медиа-треков (отключение видео для включения или отключения отправки видео и отключение звука для воспроизведения звука). Вот мой код
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<script type="text/javascript" src="http://cdn.peerjs.com/0.3/peer.min.js"></script>
<script>
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
var myStream;
var peer = new Peer({key: 'PeerJS key'});
var setOthersStream = function(stream){
$('#others-video').prop('src', URL.createObjectURL(stream));
};
var setMyStream = function(stream){
myStream = stream;
$('#video').prop('src', URL.createObjectURL(stream));
};
peer.on('open', function(id){
$('#peer-id').text(id);
});
peer.on('call', function(call){
call.answer(myStream);
call.on('stream', setOthersStream);
});
$(function(){
navigator.getUserMedia({audio: true, video: true}, setMyStream, function(){});
$('#call').on('click', function(){
var call = peer.call($('#others-peer-id').val(), myStream);
call.on('stream', setOthersStream);
});
});
peer.on('error', function(e){
console.log(e.message);
});
Кто-нибудь может направить меня, пожалуйста?
2 ответа
Решение
Наконец то у меня получилось! Первый ответ на вопрос из этого " прекращения обмена видеопотоком webrtc" направил меня в правильном направлении. Я создал две новые функции для отключения звука и видео и привязал их к соответствующим кнопкам в HTML-файле. И вот наконец это стало выглядеть так:
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
var myStream;
var peer = new Peer({key: 'PeerJS key'});
var setOthersStream = function(stream){
$('#others-video').prop('src', URL.createObjectURL(stream));
};
var setMyStream = function(stream){
myStream = stream;
$('#video').prop('src', URL.createObjectURL(stream));
};
peer.on('open', function(id){
$('#peer-id').text(id);
});
peer.on('call', function(call){
call.answer(myStream);
call.on('stream', setOthersStream);
});
$(function(){
navigator.getUserMedia({audio: true, video: true}, setMyStream, function(){});
$('#call').on('click', function(){
var call = peer.call($('#others-peer-id').val(), myStream);
call.on('stream', setOthersStream);
});
});
peer.on('error', function(e){
console.log(e.message);
});
//create button to toggle video
var video_button = document.createElement("video_button");
video_button.appendChild(document.createTextNode("Toggle hold"));
video_button.video_onclick = function(){
myStream.getVideoTracks()[0].enabled = !(myStream.getVideoTracks()[0].enabled);
}
var audio_button = document.createElement("audio_button");
video_button.appendChild(document.createTextNode("Toggle hold"));
audio_button.audio_onclick = function(){
myStream.getAudioTracks()[0].enabled = !(myStream.getAudioTracks()[0].enabled);
}
Надеюсь, это кому-нибудь поможет.
Видео и аудио треки в вашем потоке имеют enabled
атрибут, который вы можете изменить. Например:
function mute() {
myStream.getTracks().forEach(track => track.enabled = !track.enabled);
}
Используйте MediaStreamTrack.enabled.
let mic_switch = true;
let video_switch = true;
function toggleVideo() {
if(localStream != null && localStream.getVideoTracks().length > 0){
video_switch = !video_switch;
localStream.getVideoTracks()[0].enabled = video_switch;
}
}
function toggleMic() {
if(localStream != null && localStream.getAudioTracks().length > 0){
mic_switch = !mic_switch;
localStream.getAudioTracks()[0].enabled = mic_switch;
}
То же самое и для удаленного потока.