我正在尝试实现一个基于webrtc的聊天室.我在笔记本电脑中遇到了以下问题.如果没有连接到任何其他对等体,只需使用getUserMedia(),我就可以获得本地视频流.
当我取消静音时,回声发生了.
然后我戴上耳机,发现有继续的噪音.我可以清楚地听到我的声音.
我试图调低音量,但它不起作用.
提前致谢.
是否有任何机构知道如何将WebRTC DataChannel API实现到在C#中构建的Windows应用程序,以便在NAT后面的客户端之间发送TCP消息.这不适用于Web应用程序,它仅适用于Windows.
任何意见或想法都非常感谢.
谢谢.
peerConnection.removeStream(streamA) // __o_j_sep... in Screenshots below
peerConnection.addStream(streamB) // SSTREAM in Screenshots below
Run Code Online (Sandbox Code Playgroud)
streamA 是来自我的相机和麦克风的视频/音频流.streamB 是我从我的扩展中获得的屏幕截图.

*1备注
但是,如果我删除streamA从peerConnection和addStream(streamB)喜欢上面好像没有什么改变.
以下按预期工作(两端的流被删除并重新添加)
peerConnection.removeStream(streamA) // __o_j_sep...
peerConnection.addStream(streamA) // __o_j_sep...
Run Code Online (Sandbox Code Playgroud)
我发现这个例子是"反向"(从屏幕截图切换到带摄像头的音频/视频),但无法发现显着差异.
该peerConnection RTCPeerConnection对象实际上是由这创造SIPML库 源可以在这里找到代码.我这样访问它:
var peerConnection = stack.o_stack.o_layer_dialog.ao_dialogs[1].o_msession_mgr.ao_sessions[0].o_pc
Run Code Online (Sandbox Code Playgroud)
(是的,这看起来不正确,但是没有正式的方法来访问Peer Connection,请参阅此处的讨论)和此处.
最初我试图用(视频)改变videoTrack of streamA videoTrack streamB.在这里查看问题.有人向我建议我应该尝试重新协商对等连接(通过删除/添加Streams),因为addTrack不会触发重新协商.
我也在这里寻求帮助,但维护者似乎很忙,没有机会回应.
*1 备注:为什么streamB没有videoTracks财产?流在HTML <video>元素中播放,似乎"有效".我是这样得到的:
navigator.webkitGetUserMedia({
audio: false, …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过webrtc获得一个干净的音频通道.通过getUserMedia mediaconstraints对象,我设置了以下选项:
constraints: {
audio: {
mandatory: {
echoCancellation: false,
googEchoCancellation: false,
googAutoGainControl: false,
googAutoGainControl2: false,
googNoiseSuppression: false,
googHighpassFilter: false,
googTypingNoiseDetection: false,
//googAudioMirroring: false // For some reason setting googAudioMirroring causes a navigator.getUserMedia error: NavigatorUserMediaError
}
},
video: false
},
Run Code Online (Sandbox Code Playgroud)
这极大地改善了音频质量,但是仍然存在音频处理,其导致一些测试样本以高频噪声的形式致残音频.
有一个Chrome标记--use-file-for-fake-audio-capture,如http://peter.sh/experiments/chromium-command-line-switches/#use-file-for-fake-audio-capture所述,它允许通过文件输入进行测试.如标志描述中所述,必须禁用所有音频处理或音频失真 - 因此似乎有其他选项可用于此目的.
我也试过--disable-audio-track-processing --audio-buffer-size=16 --enable-exclusive-audioChrome标志,但似乎还有一些音频处理.
有没有办法禁用仍然存在的音频处理(最好是通过JS API)?
我想知道用户的设备是否有连接的摄像头和麦克风,如果是,则授予权限以使用Javascript获取音频和视频流.我想至少在Chrome和Firefox上进行此项检查.什么是一致的API?
DOMException: Error processing ICE candidate当我尝试添加冰候选人时,我收到此错误.这是候选人:
候选人:1278028030 1 udp 2122260223 10.0.18.123 62694 typ host generation 0 ufrag eGOGlVCnFLZYKTsc network-id 1
而且,它并不总是发生 - 其他时间一切顺利.我无法重现一致的模式,它会抛出此错误.任何想法如何解决这个/调试它将不胜感激!
我试图仅在WebRTC中静音本地音频,更具体地说是在getUserMedia()之后和任何服务器连接之前.我发现的任何选项都没有; Muaz Khan的这个失败了:
var audioTracks = localMediaStream.getAudioTracks();
// if MediaStream has reference to microphone
if (audioTracks[0]) {
audioTracks[0].enabled = false;
}
Run Code Online (Sandbox Code Playgroud)
此技术在此处也称为"工作",但在Chrome版本39.0.2171.95(64位)(Ubuntu 14.04)上失败.
据说通过使用音量增益工作的其他方法:
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var audioContext = new AudioContext();
var source = audioContext.createMediaStreamSource(clientStream);
var volume = audioContext.createGain();
source.connect(volume);
volume.connect(audioContext.destination);
volume.gain.value = 0; //turn off the speakers
Run Code Online (Sandbox Code Playgroud)
tl; dr我不想听到扬声器上麦克风的输入,但我确实希望看到我的视频图像.
解决方法
Benjamin Trent建议这种解决方法,它通过在视频标签上设置静音属性来静音音频,如下所示:
document.getElementById("html5vid").muted = true;
Run Code Online (Sandbox Code Playgroud)
我一直在阅读有关WebRTC的内容,看起来非常有前景.我想制作一个简单的局域网游戏,自动连接同一网络上的人.虽然我可以找到人们询问类似的东西,并且答案告诉他们这是可能的,但我找不到任何关于如何做到的明确教程.
然而,我对WebRTC和Web编程一般都很陌生.所以也许我只是不知道要搜索什么.
那么,如何在本地网络上自动连接使用WebRTC的人,而无需任何人运行单独的服务器或连接到互联网?他们应该能够在他们的计算机上打开一个html文件,并连接到在同一网络上执行该操作的其他人,即使没有互联网.
谢谢!
我正在构建一个React.js应用程序,它与WebRTC apis交互以进行音频/视频调用.成功建立呼叫后,会在RTCPeerConnection实例上触发"onaddstream"事件,该实例包含我作为开发人员应该连接到视频元素以向用户显示远程视频的流.
我遇到的问题是了解从事件流到React组件进行渲染的最佳方法.我通过将流转储到我的redux状态成功地工作,但在另一个答案中,redux Dan Abramov的创建者提到了这一点:
[...]不要在州内使用课程.它们不是可序列化的.[...]只需使用普通对象和数组.
这让我想知道,如果我不应该将这些流置于redux状态,是否有更好的方法来响应'onaddstream'事件并让React组件更新而不将流放入redux状态?
我见过以下内容:
chrome://webrtc-internals
Run Code Online (Sandbox Code Playgroud)
但是,我正在寻找一种方法让用户点击Web应用程序中的按钮,以便下载或 - 最好 - POSTWebRtc日志记录到应用程序中的端点.我的想法是,通过单击UI按钮,我可以让非技术用户与我共享技术日志.
怎么能实现这一目标?
注意:这不应取决于Chrome; Chromium也将被用作应用程序将被包裹在Electron中.