大约六个月前,我能够用PHP成功编写自己的WebSocket服务器脚本.通过这些,我能够在我的本地主机上设置WebRTC视频聊天服务.我很高兴,直到我意识到为了部署它,我需要一个让我可以访问套接字的Web服务器.
不幸的是,没有共享的虚拟主机允许套接字和所有提供套接字的Web服务器都很昂贵.虽然不是大规模的有效解决方案,但为了设置演示以向人们展示,我想将信令方法从WebSocket更改为Ajax,以便我可以展示我制作的WebRTC视频聊天服务.
为此,我一直在努力编写过去几天的代码,但是没有成功让WebRTC对等方捕获彼此的视频.
目前,当一个客户端连接到脚本时,我正在使用Ajax向PHP脚本发送请求,该脚本检查数据库中是否还有其他活动用户.如果没有,则脚本会创建商品,并将商品放入数据库中.之后,客户端每秒轮询一个单独的PHP脚本,以检查连接到该脚本的另一个客户端的答案.
之后,我从另一个客户端连接到该脚本,该客户端查询相同的PHP脚本和DB,然后实现活动用户(第一个连接)已经发布了一个商品,第二个客户端获取并设置了该商品.描述.然后,第二个客户端创建一个答案,该答案放在DB中.
此时,第一个客户端(每秒轮询数据库)检测到答案存在并将该答案设置为第一个客户端的远程描述.不幸的是,即使在成功完成所有这些操作之后,其他客户端的视频也没有弹出.
所以这里是我困惑的地方,有三个(多部分)问题:
1)我认为在两个客户端设置了本地描述然后将该本地描述发送到另一个客户端和接收描述的另一个客户端集作为onaddstream事件应该触发的远程描述,从而允许我显示远程视频.但是,这种情况并没有发生.这在我使用WebSocket之前工作正常,但它与纯Ajax完全不兼容.有什么特别的东西我不见了吗?WebRTC规范在过去六个月中是否发生了根本变化?我曾尝试查看WebRTC规范,但我没有看到任何重大变化.
2)在没有使用Ajax工作的沮丧之后,我回到了我的WebSocket版本并将其加载到我的本地主机上.自从上次使用它以来(我六个月前工作正常),我根本没有更改过代码,但是现在,当我尝试使用它时,有时它会起作用,有时它不起作用.有时我会收到与无法设置本地和/或远程描述相关的错误.怎么了?那些会导致这种情况发生变化的规格有变化吗?与此相关,即使我无法使用Ajax版本弹出远程视频,我也一直在向控制台发出很多东西,而且看起来像是Ajax版本,有时是本地和成功设置了两个客户端的远程描述,有时在尝试设置本地/远程描述时出现错误,即使我每次运行完全相同的脚本而没有任何更改.我正在使用最新版本的Chrome,我开始怀疑它是否存在错误.
3)是否需要onicecandidate事件处理程序来建立连接?我的假设是,对等体可以通过简单的有效提供和回答建立连接,并且onicecandidate事件用于提供备用路由等,这可以导致更好的连接(但不是必需的).我错了吗?如果需要onicecandidate信息,你如何建议我用Ajax作为信令方法来处理它?
我知道这是很多信息和很多问题,但任何人都可以提供的任何信息/见解都将非常感激.在过去的几天里,我一直在敲我的桌子试图解决这个问题,没有任何意义.
我想访问一些已记录的变量chrome://webrtc-internals/,但我没有在谷歌上找到任何东西 - 甚至没有我能看到的图表的描述.
我特别感兴趣packetsLost,googCurrentDelayMs并且googNacksSent.
为什么我要访问webrtc-internals
我正在编写一个共享视频流的谷歌浏览器应用程序(p2p).它使用peerjs与其他对等体共享流,后者又使用googles webrtc实现.为了使我的应用程序完美,我需要知道何时发生大的延迟.由于我可以看到记录的延迟,chrome://webrtc-internals/我想知道我是否可以通过javascript访问它.
我的猜测是chrome://webrtc-internals/-menu 没有API .
我一直在谷歌搜索改变Chrome的WebRTC实现中的编解码器的方法,但似乎没有办法.
如何更改Chrome中WebRTCpeer连接中使用的默认编解码器(音频或视频)?
我正在尝试使用WebRTC构建一个Web应用程序,当某些事件触发时,需要暂停/恢复视频/音频流.我试过了,getTracks()[0].stop()但我不知道如何恢复流.
我已成功连接客户端A和B.问题是我想添加新客户端,C和D来构建群聊.我是否需要为每个客户生成新的RTC连接并交换报价/答案/ ICE候选人?例如:
A连接到B A连接到C A连接到D B连接到C B连接到D C连接到D.
上述每个客户端组合产生自己的RTCPeerConnection并通过webrtc握手(offer,icecandidate,answer)
我在安装了openfire会议的EC2 ubuntu服务器上设置了openfire.使用管理控制台http:// myserver:9090 /配置焦点用户,测试用户,群聊和内容.
多用户视频会议使用https:// myserver:7443/ofmeet /?r = testroom在Chrome浏览器上正常运行.
现在我想在iOS应用程序中实现这一点,我不知道从哪里开始.我确实调查了一些演示项目,但仍然无法弄明白.
有人可以帮忙吗?如果有人使用过这样的东西,请告诉我.谢谢
我所能找到的所有Twilio的可编程视频服务示例都演示了屏幕共享或网络摄像头媒体流.有人能指出我从IP Camera提供的RTSP流中传输视频的示例吗?
我已经能够使用Kurento找到并尝试这种行为的示例,所以我认为Twilio-Video可能会暴露相同的行为.请参阅https://github.com/lulop-k/kurento-rtsp2webrtc
我正在开发具有视频聊天功能的移动应用.我为webrtc找到了一个不错的javascript库,它似乎加载得很好,QWebView但我需要授予它访问摄像头和麦克风的权限,我无法弄清楚如何做到这一点.可能吗?QWebEngineView有一个方便的信号和插槽,但它不支持移动.
所描述的清单权限不工作在这里.
相应的Qt bug:无法通过QML WebView访问摄像头和麦克风
有任何想法吗?
我需要使用WebRTC for android将特定的裁剪(面部)视频发送到videoChannel.我能够操作CameraRession类WebRTC来裁剪面部.现在我将它设置为ImageView.
listenForBytebufferFrames()的Camera1Session.java
private void listenForBytebufferFrames() {
this.camera.setPreviewCallbackWithBuffer(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera callbackCamera) {
Camera1Session.this.checkIsOnCameraThread();
if(callbackCamera != Camera1Session.this.camera) {
Logging.e("Camera1Session", "Callback from a different camera. This should never happen.");
} else if(Camera1Session.this.state != Camera1Session.SessionState.RUNNING) {
Logging.d("Camera1Session", "Bytebuffer frame captured but camera is no longer running.");
} else {
mFrameProcessor.setNextFrame(data, callbackCamera);
long captureTimeNs = TimeUnit.MILLISECONDS.toNanos(SystemClock.elapsedRealtime());
if(!Camera1Session.this.firstFrameReported) {
int startTimeMs = (int)TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - Camera1Session.this.constructionTimeNs);
Camera1Session.camera1StartTimeMsHistogram.addSample(startTimeMs);
Camera1Session.this.firstFrameReported = true;
}
ByteBuffer byteBuffer1 = ByteBuffer.wrap(data); …Run Code Online (Sandbox Code Playgroud) 有谁知道用于检测摄像头硬件的通信标准是否与getUserMedia一起使用?
我认为它是MTP或类似的东西,虽然我希望每个浏览器/操作系统的实现都不同,但我已经搜索了两天,我找不到任何有关此问题的可靠信息.