我有 webrtc 应用程序,在 Android 手机(针对护士)和平板电脑(针对患者)上运行。基本上我已经实现了一个远程助理系统,护士可以通过该系统进行 webrtc 呼叫并听到(仅音频流)患者一侧发生的情况。由于平板电脑安装在墙上,与病床的距离通常有点远。我想增加 webrtc/android 端的麦克风增益,这样我什至可以听到低电平的声音。我尝试在谷歌上寻找线索,但找不到任何有趣的东西。有人可以告诉我如何提高麦克风灵敏度吗?
-------------------------- 示例代码------------------------
function getLocalStream(successCallback) {
if (localStream && successCallback) {
successCallback(localStream);
return;
}
navigator.getUserMedia(streamOptions, function (str) {
var stream= modifyGain(str);
uiHandler("peer.call.localstream", {payload: stream});
localStream = stream;
if (successCallback) {
successCallback(stream);
}
}, function (err) {
uiHandler("status.error", {payload: "Failed to access local camera", error: err});
});
}
function modifyGain (stream){
var audioTrack = stream.getAudioTracks()[0];
var ctx = new AudioContext();
var src = ctx.createMediaStreamSource(stream);
var dst = ctx.createMediaStreamDestination();
var gainNode = ctx.createGain();
gainNode.gain.value = 50;
[src, gainNode, dst].reduce( function(a, b) { return a && a.connect(b) });
stream.removeTrack(audioTrack);
var newAudioTrack = dst.stream.getAudioTracks()[0];
stream.addTrack(newAudioTrack);
return stream;
};
Run Code Online (Sandbox Code Playgroud)
在调试中,我发现以前和新音轨的差异:这是我从 localstream 获得的原始音轨:
enabled: true
id: "8e4363c2-f1c8-44ec-9bed-f3414f3b943a"
kind: "audio"
label: "Default"
muted: false
onended: null
onmute: null
onunmute: null
readyState: "live"
Run Code Online (Sandbox Code Playgroud)
这是一个新的音轨,获取 dst.stream.getAudioTracks()[0];
enabled: true
id: "cc0c4293-a606-407e-9adb-4caddaa32583"
kind: "audio"
label: "MediaStreamAudioDestinationNode"
muted: false
onended: null
onmute: null
onunmute: null
readyState: "live"
Run Code Online (Sandbox Code Playgroud)
id和标签对播放流重要吗?
我不知道实际的硬件麦克风是否可以控制,但是您可以通过使用WebAudio处理输入信号来增加输入信号的增益。
试试这个(在 Chrome 中使用https fiddle ):
navigator.mediaDevices.getUserMedia({audio: true})
.then(stream => audio.srcObject = modifyGain(stream, 2.5))
.catch(e => console.log(e));
var modifyGain = (stream, gainValue) => {
var ctx = new AudioContext();
var src = ctx.createMediaStreamSource(stream);
var dst = ctx.createMediaStreamDestination();
var gainNode = ctx.createGain();
gainNode.gain.value = gainValue;
[src, gainNode, dst].reduce((a, b) => a && a.connect(b));
return dst.stream;
};Run Code Online (Sandbox Code Playgroud)
<audio id="audio" controls autoplay></audio>Run Code Online (Sandbox Code Playgroud)
某些浏览器(Firefox)也有一个mozAutoGainControl您可以尝试打开的功能。
| 归档时间: |
|
| 查看次数: |
4436 次 |
| 最近记录: |