标签: webrtc

WebRTC vs Websockets:如果WebRTC可以执行视频,音频和数据,为什么我需要Websockets?

因此,我希望建立一个允许视频,音频和文本的聊天应用程序.我花了一些时间研究Websockets和WebRTC来决定使用哪个.由于WebRTC有很多视频和音频应用程序,这听起来是一个合理的选择,但还有其他我应该考虑的事情吗?随意分享您的想法.

像:

  • 由于新的WebRTC仅在某些浏览器上可用,而websockets似乎在更多的浏览器中.

  • 可伸缩性 - Websockets使用服务器进行会话,而WebRTC似乎是p2p

  • 多路复用/多个聊天室 - 用于Google+环聊,我仍然可以查看有关如何实施的演示应用

  • 服务器 - Websockets需要RedisSessionStore或RabbitMQ来扩展多台计算机

websocket webrtc

196
推荐指数
8
解决办法
9万
查看次数

如何在iOS11主屏幕Web应用程序上访问相机?

摘要

我们无法使用WebRTC或文件输入从iOS11(公开发布)主屏幕Web应用程序访问相机,详情如下.我们的用户如何继续访问相机?

我们通过https提供网络应用页面.

4月更新

iOS 11.3的公开发布似乎解决了问题,文件输入摄像头访问再次正常工作!

3月更新

正如这里的人们所说,Apple docs建议网络应用程序相机功能在11.3与服务工作者一起返回.这很好,但我们还不确定是否我们希望每个人都重新安装,直到我们可以对11.3GM进行彻底测试.

解决方案,11月

我们失去了希望,苹果希望解决这个问题并向前迈进.修改了我们的网络应用程序以删除iOS"添加到主屏幕"功能,并要求受影响的用户删除任何以前的主屏幕图标.

12月6日更新

iOS 11.2和iOS 11.1.2无法修复.

解决方法,9月21日

似乎我们可以向Web应用程序的现有客户询问

  • 不升级到iOS11 - 祝你好运:)
  • 在iOS相机中拍照,然后在网络应用中选择它们
  • 等待下一个ios beta
  • 重新安装为Safari浏览器页面(删除ATHS逻辑后)
  • 切换到Android

文件输入

我们当前的生产代码使用的文件输入在iOS 10及更早版本中运行良好多年.在iOS11上,它可用作Safari选项卡,但不能用于主屏幕应用程序.在后一种情况下,相机被打开并且仅显示黑色屏幕,因此它是不可用的.

   <meta name="apple-mobile-web-app-capable" content="yes">
   ...
   <input type="file" accept="image/*">
Run Code Online (Sandbox Code Playgroud)

的WebRTC

iOS11上的Safari 11提供WebRTC媒体捕获功能,非常棒.

我们可以使用navigator.mediaDevices.getUserMedia根据此处链接的示例代码,在桌面和移动设备上的普通网页上捕捉相机图像到画布.

当我们将页面添加到iPad或iPhone主屏幕时,navigator.mediaDevices变得undefined无法使用.

    <meta name="apple-mobile-web-app-capable" content="yes">
    ...
    // for some reason safari on mac can debug ios safari page but not ios home screen web apps 
    var d = 'typeof navigator : ' + typeof …
Run Code Online (Sandbox Code Playgroud)

javascript html5 camera webrtc ios11

117
推荐指数
3
解决办法
3万
查看次数

停止/关闭由navigator.getUserMedia打开的网络摄像头

我使用以下JavaScript代码打开了一个网络摄像头: navigator.getUserMedia

是否有任何JavaScript代码可以停止或关闭网络摄像头?感谢大家.

javascript html5 html5-video webrtc

107
推荐指数
8
解决办法
10万
查看次数

WebRTC - 可扩展的直播流广播/多播

问题:

WebRTC为我们提供点对点视频/音频连接.它非常适合p2p通话,环聊.但是广播怎么样(一对多,例如,1到10000)?

假设我们有一个广播员"B"和两个参加者"A1","A2".当然它似乎是可以解决的:我们只用B连接B,然后用A2连接B. 因此B将视频/音频流直接发送到A1,将另一个流发送到A2.B发送两次流.

现在让我们想象有10000名与会者:A1,A2,...,A10000.这意味着B必须发送10000个流.每个流约为40KB/s,这意味着B需要400MB/s的外出网速来维持这种广播.不能接受的.

原始问题(已废除)

是否有可能以某种方式解决这个问题,所以B只在某个服务器上发送一个流,而与会者只是从这个服务器中提取这个流?是的,这意味着此服务器上的传出速度必须很高,但我可以保持它.

或者这可能意味着毁掉WebRTC的想法?

笔记

根据最终客户的不良用户体验,Flash无法满足我的需求.

解决方案(不是真的)

26.05.2015 - 目前没有针对WebRTC的可扩展广播的解决方案,您根本不使用媒体服务器.市场上有服务器端解决方案以及混合(p2p +服务器端,具体取决于不同的条件).

虽然有一些有前途的技术,如https://github.com/muaz-khan/WebRTC-Scalable-Broadcast,但他们需要回答这些可能的问题:延迟,整体网络连接稳定性,可扩展性公式(它们不是无限可扩展的).

几点建议

  1. 通过调整音频和视频编解码器来降低CPU /带宽;
  2. 获取媒体服务器.

javascript video scalability broadcast webrtc

107
推荐指数
6
解决办法
4万
查看次数

如何使用webRTC和基于服务器的Peer连接记录网络摄像头和音频

我想记录用户网络摄像头和音频,并将其保存到服务器上的文件中.然后,这些文件可以提供给其他用户.

我没有播放问题,但是我在录制内容方面遇到了问题.

我的理解是.record()还没有编写getUserMedia 函数 - 到目前为止只提出了一个提议.

我想使用PeerConnectionAPI在我的服务器上创建一个对等连接.我知道这有点hacky,但我认为应该可以在服务器上创建一个peer并记录client-peer发送的内容.

如果可以,我应该能够将此数据保存为flv或任何其他视频格式.

我的偏好实际上是记录网络摄像头+音频客户端,以允许客户端在上传前不喜欢他们的第一次尝试时重新录制视频.这也将允许网络连接中断.我已经看到一些代码允许通过将数据发送到画布来记录网络摄像头中的各个"图像" - 这很酷,但我也需要音频.

这是我到目前为止的客户端代码:

  <video autoplay></video>

<script language="javascript" type="text/javascript">
function onVideoFail(e) {
    console.log('webcam fail!', e);
  };

function hasGetUserMedia() {
  // Note: Opera is unprefixed.
  return !!(navigator.getUserMedia || navigator.webkitGetUserMedia ||
            navigator.mozGetUserMedia || navigator.msGetUserMedia);
}

if (hasGetUserMedia()) {
  // Good to go!
} else {
  alert('getUserMedia() is not supported in your browser');
}

window.URL = window.URL || window.webkitURL;
navigator.getUserMedia  = navigator.getUserMedia || navigator.webkitGetUserMedia ||
                          navigator.mozGetUserMedia || navigator.msGetUserMedia;

var video = document.querySelector('video');
var …
Run Code Online (Sandbox Code Playgroud)

javascript c++ video-streaming audio-streaming webrtc

81
推荐指数
4
解决办法
7万
查看次数

WebRTC使用TCP还是UDP?

这听起来像一个非常基本的问题,但我需要确认

  1. WebRTC是否使用TCP或UDP作为其对等传输?我怎么知道 ?
  2. 我看到有可靠性模式和DTLS协议,它们如何影响?
  3. Media和DataChannel的传输方式是否相同?
  4. 如何在TCP和UDP之间切换?

我问这个是因为我知道浏览器对并行连接的数量有限制(我认为他们谈论TCP),并且UDP连接可能不受限制.

udp tcp channel transport webrtc

64
推荐指数
1
解决办法
3万
查看次数

WebRTC AGC(自动增益控制)

我正在测试WebRTC AGC,但我必须做错了,因为信号只是通过未经修改的.

以下是我创建和初始化AGC的方法:

agcConfig.compressionGaindB = 9;
agcConfig.limiterEnable = 1;
agcConfig.targetLevelDbfs = 9;   /* 9dB below full scale */

WebRtcAgc_Create(&agc);
WebRtcAgc_Init(agc, minLevel, maxLevel, kAgcModeFixedDigital, 8000);
WebRtcAgc_set_config(agc, agcConfig);
Run Code Online (Sandbox Code Playgroud)

然后对于每个10ms样本块,我执行以下操作:

WebRtcAgc_Process(agc, micData, NULL, 80, micData, NULL, micLevelIn, &micLevelOut, 0, &saturationWarning);
Run Code Online (Sandbox Code Playgroud)

其中micLevelIn设置为0.

谁能告诉我我做错了什么?

我预计全量级正弦音将衰减到目标DBFS级别; 并且将放大低电平正弦音(即-30dBFS)以匹配目标DBFS电平.但那不是我所看到的.

c++ signal-processing webrtc

64
推荐指数
1
解决办法
4730
查看次数

NodeJS和RED 5媒体服务器通过RTMP

这更像是一个概念性问题而不是直接"如何做到这一点".

通常是否可以实现类似flash的解决方案来流式传输音频(独立于我们从HTMLR和nodeJS/binaryJS中获取流数据的位置,例如webRTC或其他).如果是这样,你会怎么做?

从2010年开始,这里发现了一个关于stackoverflow的问题.从那时起,NodeJS和HTML5已经发展壮大.

人们通常做什么: 当使用多媒体流(即视频或音频)到服务器时,在当前时间点肯定没有任何东西可以击败闪存,直到getUserMedia()完全到达- 这可能需要一段时间直到99浏览器用户的百分比将完全使用它.

将数据流式传输到服务器的一般做法是使用客户端Flash或Flex应用程序,然后连接到RT5协议驱动的介质服务器,如RED5,FMSWowza.例如,通过RTMP发送麦克风输入的客户端应用程序可能看起来像(简化版)

import flash.net.NetStream;

private var myMic:Microphone;
private var nc:NetConnection;
private var ns:NetStream

nc = new NetConnection();    
ns = new NetStream(nc);
nc.connect(rtmp://localhost/serverApp);
myMic = Microphone.getMicrophone();
ns.attachAudio(myMic);
Run Code Online (Sandbox Code Playgroud)

与服务器应用程序一起,可以轻松地将数据流式传输到服务器.

我想做什么:nodeJS上运行一个app服务器(可能实现socketIObinaryJS),捕获传入的RTMP流.就像是

//require
var rtmp = require('node-rtmp'),
var fs = require('fs');

//rtmp server address
var rtmpServer = 'rtmp://localhost';

//create a binary server listening that receives stream data
var …
Run Code Online (Sandbox Code Playgroud)

red5 rtmp audio-streaming node.js webrtc

59
推荐指数
1
解决办法
9690
查看次数

什么是ICE候选人以及对等连接如何在他们之间做出选择?

我新写了一个简单的聊天应用程序,但我并不真正了解ICE候选人的背景.

当对等方创建连接时,它们会获得ICE候选者并且他们交换它们并最终将它们设置为对等连接.

所以我的问题是,ICE候选人来自哪里,他们如何使用,他们都真的使用过?

我注意到我的同事在他的机器上执行应用程序时得到的候选人较少,这可能是不同候选人数量的原因?

candidate webrtc ice-protocol

59
推荐指数
3
解决办法
3万
查看次数

初始拒绝后,使用getUserMedia()重新授予权限

一旦被拒绝,我们如何使用getUserMedia()请求摄像头/麦克风访问?

我正在使用getUserMedia访问用户的摄像头并将数据传输到画布.这一切都很好.

在测试中,我打了一次否认.此时在Chrome和Firefox中,任何带有getUserMedia()的后续请求都默认为拒绝状态.

我们显然不希望通过在拒绝后的每个页面加载上请求相机/麦克风的权限来惹恼我们的用户.对地理位置api来说已经足够烦人了.

但是,必须有一种方法再次请求它.仅仅因为用户点击拒绝一次并不意味着他们想要一直拒绝网络摄像头访问.

我一直在阅读有关规范和谷歌搜索一段时间,但我没有找到任何明确的问题.

编辑:进一步研究,似乎在Chrome中点击Deny会将当前网站添加到阻止列表中.这可以通过chrome:// settings/content手动访问.滚动到媒体.管理例外,删除被阻止的网站.

链接到chrome:// settings/content不起作用(在我们想要添加有用链接以让人们重新启用权限的情况下).

用于处理getUserMedia周围权限的整个UX很糟糕.=(

javascript webrtc getusermedia

56
推荐指数
5
解决办法
4万
查看次数