我正在制作一个演示网站,其中包含一个允许用户拨打电话的滑出小部件。
我使用SIPml5工具和webtc2sip后端来处理调用。那部分都设置好了,工作正常。所以现在我在看,如果我可以控制麦克风和音量水平使用滑块的小部件。这可能吗?我在网上找遍了所有地方,但没有找到多少。
我确实找到了几个网站,向我展示了如何在jQuery滑块代码中控制音频标签的音量。所以我试着像下面的代码一样设置它:
$(function() {
$( "#slider-spkr" ).slider({
orientation: "vertical",
range: "min",
min: 0,
max: 100,
value: 60,
slide: function( event, ui ) {
var value = $("#slider-spkr").slider("value");
document.getElementById("audio_remote").volume = (value / 100);
},
change: function() {
var value = $("#slider-spkr").slider("value");
document.getElementById("audio_remote").volume = (value / 100);
}
});
});
不幸的是,这也不起作用。所以我不确定在使用SIPml5时是否允许这样做,或者我的jQuery代码是否需要调整。
还有人有幸添加麦克风/音量控制吗?谢谢你的帮助。
恐怕无法调节麦克风音量。但是你可以通过使用流api来打开/关闭它:
function toggleMic(stream) { // stream is your local WebRTC stream
var audioTracks = stream.getAudioTracks();
for (var i = 0, l = audioTracks.length; i < l; i++) {
audioTracks[i].enabled = !audioTracks[i].enabled;
}
}
这段代码是针对原生的webtc api,而不是sipML5。看来他们还没有实施。这张收据不是很清楚
这是可能的,但目前只在Chrome和一些假设。我不是作者,你可以在这个开源库(SimpleWebRtc)中找到这段代码的灵感。
navigator.webkitGetUserMedia(constraints,
function(webRTCStream){
var context = new window.AudioContext();
var microphone = context.createMediaStreamSource(webRTCStream);
var gainFilter = context.createGain();
var destination = context.createMediaStreamDestination();
var outputStream = destination.stream;
microphone.connect(gainFilter);
gainFilter.connect(destination);
var filteredTrack = outputStream.getAudioTracks()[0];
webRTCStream.addTrack(filteredTrack);
var originalTrack = webRTCStream.getAudioTracks()[0];
webRTCStream.removeTrack(originalTrack);
},
function(err) {
console.log("The following error occured: " + err);
}
);
技巧是修改流,然后用修改后的流(取自MediaStreamDestination流)的音轨替换当前流的音轨。
免责声明:
这在FireFox版本35中不起作用,因为他们只是没有实现MediaStream.addTrack/removeTrack。我当前使用此检查
this.micVolumeIsSupported = function() {
var MediaStream = window.webkitMediaStream || window.MediaStream;
return !!MediaStream.prototype.addTrack && !!MediaStream.prototype.removeTrack;
};
_gainSupported = this.micVolumeIsSupported();
这在Chrome中有一个限制,由于一个错误,停止流与混合轨道。您可能希望在关闭连接之前或连接中断时恢复这些轨道;
this.restoreTracks = function(){
if(_gainSupported && _tracksSubstituted){
webRTCStream.addTrack(originalTrack);
webRTCStream.removeTrack(filteredTrack);
_tracksSubstituted = false;
}
};