我刚刚下载了一个视频聊天项目.它使用STUN服务器并指定URL stun:23.21.150.121.如何使用自己的服务器而不是STUN服务器?我需要输入什么而不是此URL?
我正在开发一个聊天应用程序并完成它.现在我也想实现视频聊天.经过研究很多,我决定选择"WebRTC"库.
我做了什么?
1)能够在本地服务器上运行AppRtcDemo,并且它在浏览器之间正常工作.
参考:http://www.webrtc.org/reference/getting-started
2)能够构建Android AppRtcDemo.But当我运行时说"Cross origin not support".
经过研究,我在webrtc讨论中发现,为了解决这个问题,我需要设置自己的转向服务器.
3)所以我安装了webrtc推荐的最新rfc5766TurnServer.我成功运行了转向服务器.
参考:http://code.google.com/p/rfc5766-turn-server/
我对ApprtcDemo(web)和(Android)进行了以下更改,以便与我的Turn服务器一起使用
1)apprtc.py
更换:
turn_url = 'https://computeengineondemand.appspot.com/'
turn_url = turn_url + 'turn?' + 'username=' + user + '&key=4080218913'
Run Code Online (Sandbox Code Playgroud)
指向我的转弯服务器:
turn_url = 'http://192.168.5.85:3478/?service=turn&username=biraj'
Run Code Online (Sandbox Code Playgroud)
2)index.html
更换:
var pcConfig = {{ pc_config|safe }};
Run Code Online (Sandbox Code Playgroud)
附:
var pcConfig = {"iceServers": [{"url": "stun:stun.l.google.com:19302"}, {"url":"turn:biraj@192.168.5.85:3479", "credential":"0x5b04123c3eec4cf0be64ab909bb2ff5b"}]};
Run Code Online (Sandbox Code Playgroud)
Android的
1)AppRTCDemoActivity.java
更换:
roomInput.setText("https://apprtc.appspot.com/?r=");
Run Code Online (Sandbox Code Playgroud)
使用我的本地apprtc服务器:
roomInput.setText("http://192.168.5.86:8080/?r=");
Run Code Online (Sandbox Code Playgroud)
2)AppRTCClient.java
在private PeerConnection.IceServer requestTurnServer(String url){}功能上
更换:
connection.addRequestProperty("origin", "https://apprtc.appspot.com");
Run Code Online (Sandbox Code Playgroud)
附:
connection.addRequestProperty("origin", "http://192.168.5.86:8080");
Run Code Online (Sandbox Code Playgroud)
3)/assets/channel.html
更换:
<script src="https://apprtc.appspot.com/_ah/channel/jsapi"></script>
Run Code Online (Sandbox Code Playgroud)
附: …
我正在使用WebRTC从服务器向客户端浏览器发送视频(使用本机WebRTC API和MCU WebRTC像Kurento这样的服务器).
在将其发送给客户端之前,视频的每个帧都包含元数据(如字幕或任何其他应用内容).我正在寻找一种方法将这些元数据发送到客户端,使其保持同步(到实际呈现的时间).此外,我希望能够从客户端(通过Javascript)访问此数据.
我想到的一些选项:
timeupdate事件,但我不知道它是否适用于帧的精确级别,我不确定它在实时视频中的含义与WebRTC中的相同.TextTrack.然后使用onenter和onexit同步读取它:http://www.html5rocks.com/en/tutorials/track/basics/.它仍然需要精确的时间戳,我不知道如何知道什么是时间戳,以及Kurento是否按原样传递它们.getstats),并希望此API提供的信息是准确的.最好的方法是什么,以及如何解决我提到的问题?
编辑:需要具有适当帧的元数据的精确同步(在不超过单帧的分辨率下).
我正在尝试将Jitsi Videobridge集成到我现有的WebRTC应用程序中.
现在信号是相对简单的,提供,答案,候选人,我们正在运行.
我找不到关于如何集成像Jitsi这样的选择性转发解决方案的简单文档或教程,一切似乎都说得太高了(见这里).
有人可以具体地向我解释提供,答案,候选模型如何与Jitsi一起改变,我怎样才能通过视频桥建立一对一的呼叫?
我目前的分析,我认为我应该打Jitsi通过REST接口来获得候选人和换出host,srvflx以及relay从视频桥的那些候选人我产生当前.这甚至是在正确的轨道上?
我想了解如何最好地获取MediaStreamTrackChrome/Canary中音频javascript对象的麦克风活动级别.该MediaStreamTrack对象是MediaStream返回的音轨getUserMedia,作为WebRTC javascript API的一部分.
我正在尝试实现一个基于webrtc的聊天室.我在笔记本电脑中遇到了以下问题.如果没有连接到任何其他对等体,只需使用getUserMedia(),我就可以获得本地视频流.
当我取消静音时,回声发生了.
然后我戴上耳机,发现有继续的噪音.我可以清楚地听到我的声音.
我试图调低音量,但它不起作用.
提前致谢.
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)?
DOMException: Error processing ICE candidate当我尝试添加冰候选人时,我收到此错误.这是候选人:
候选人:1278028030 1 udp 2122260223 10.0.18.123 62694 typ host generation 0 ufrag eGOGlVCnFLZYKTsc network-id 1
而且,它并不总是发生 - 其他时间一切顺利.我无法重现一致的模式,它会抛出此错误.任何想法如何解决这个/调试它将不胜感激!
我有一个在iOS11(Beta)上使用Safari工作正常的网址音频/视频工作正常.但是当我用WKWebView加载这个URL时,它给我一个错误"不兼容的浏览器",当我在WebKit中检查我的浏览器版本时,它显示"iOS 11上的基于WebKit的浏览器"
所以真正的问题是,Apple是否已将此更改包含在iOS 11开发人员BETA的WKWebview webkit(应该与Safari相同)中?
webrtc ×10
audio ×3
javascript ×3
html5 ×2
video ×2
android ×1
apprtcdemo ×1
chat ×1
firefox ×1
getusermedia ×1
ios ×1
jitsi ×1
microphone ×1
node.js ×1
rest ×1
safari ×1
sipml ×1
stun ×1
webkit ×1
wkwebview ×1