我想知道是否有可能从客户端捕获视频输入,如下面的https://apprtc.appspot.com/?r=91737737,并将其显示在另一个上,以便任何查看者都可以看到它,我的问题是我我的第二台计算机上没有网络摄像头,我想使用webrtc接收视频.是否有可能从一端捕获并将其捕获到另一端?也许如果这不可能是websockets最好的方法吗?
我正在尝试配置websocket以使用星号11.但是有一些问题.我遵循的步骤是:在http.conf中启用以下内容
enabled=yes
bindaddr=0.0.0.0
bindport=8088
Run Code Online (Sandbox Code Playgroud)
我还配置了支持DTLS的星号.但是当我尝试连接到websocket的新WebSocket时("ws:// mySeverIp:8088/ws"); .它抛出一个错误
WebSocket connection failed: Error during WebSocket handshake: Unexpected response code: 400
Run Code Online (Sandbox Code Playgroud)
有人请帮忙.
谢谢
我想的WebRTC视频添加到一个基于浏览器的聊天应用程序,我想知道是否有可能在调用getUserMedia当自定义消息框() -看到这个演示的一个例子。我看过html5rocks和Mozilla docs,对此一无所获。因此,是否可以将浏览器的提示替换为jQuery UI对话框小部件?
我在WebRTC中相当新.我正试图在两个对等体之间建立一个简单的数据通道,没有音频和视频; 只是文字数据.最后,它将是一个游戏,2-7个同伴将连接到将成为游戏大师的同伴.
经过几个小时的谷歌搜索和阅读html5rocks,MDN和其他堆栈帖子,我尝试了很多东西,但我仍然无法使其工作.
当我在两个不同的Firefox选项卡上打开页面时,一切正常.我可以看到其中一个标签发送"Hello,world!" 另一个发送"它有效!".DataChannel已经建立,两个选项卡都会获得各自的对等方消息.
但是,在Chrome上运行时,它无效.在我的一个测试中,DataChannel在我能够发送任何内容之前神秘地关闭,而在另一个测试中,似乎根本没有调用RTCPeerConnection.ondatachannel事件(更多详细信息).如果我试图让Firefox使用Chrome的顺序沟通,无论我获得关于setRemoteDescription的失败不同的神秘的错误.
当然,在这些情况下,我都没有在Web/JavaScript控制台中收到任何错误消息; 这本来太容易了.
我的问题不在于信令过程,至少我不这么认为.普通的WebSocket用于与非常简单的Node.js服务器通信.我宁愿避免使用像PeerJS这样的库.首先,因为我们通过手动更好地学习它,其次是因为我想使用信令Node.js服务器来做除信令之外的其他事情.这在Node端本身并不是问题,但它在浏览器端(因为我不会在100 + KB缩小/混淆的源代码的海洋中找到一点雨滴)
基本方案非常简单:页面上每15秒自动刷新一个当前连接的用户列表.通过单击用户名,您可以与他联系,发送"Hello,world!" 而他回答"它有效!" 同时; 那是吃的.一旦我能够建立基本通信,简单的聊天文本框当然是下一个逻辑步骤.
更具体地说,如果我是用户A并单击用户B,则应该发生以下情况:
当A侧的DataChannel打开时,他发送"It works!" 到B; 这可能以相反的顺序发生
我想我应该有最新的Firefox和Crhome:resp.45和49,在Windows 7 64位上.
以下是我的JavaScript代码; 然后输出对应于几个场景,最后一些我通过阅读其他帖子和教程到目前为止.
function log (s) {
$('#log')[0].insertAdjacentHTML('beforeEnd', s+'<br />');
}
function callUser (e) {
var uname = this.href.substring(1+this.href.indexOf('#'));
ws.send({ type: 'RTCCall', to: uname });
log('Calling ' + uname + '...');
e.preventDefault();
return false;
}
function updateUserList (o) {
var div = $('#userlist')[0];
div.innerHTML='';
div.append('p', o.userlist.length + ' connected users'); …Run Code Online (Sandbox Code Playgroud) 我有index.html和app.js-index.html
<!DOCTYPE html>
<html>
<head>
<title>Realtime communication with WebRTC</title>
<link rel="stylesheet" href="css/main.css" />
</head>
<body>
<h1>Realtime communication with WebRTC</h1>
<video autoplay></video>
<script src="js/main.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
app.js =>
'use strict';
navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
var constraints = {
audio: false,
video: true
};
var video = document.querySelector('video');
function successCallback(stream) {
window.stream = stream; // stream available to console
if (window.URL) {
video.src = window.URL.createObjectURL(stream);
} else {
video.src = stream;
}
}
function errorCallback(error) {
console.log('navigator.getUserMedia error: ', …Run Code Online (Sandbox Code Playgroud) 我正在尝试获取不同的MediaStream,同时deviceId在每种情况下指定不同的.
例如:我有3个麦克风(audioinputs)可用,并希望获得每个麦克风的音频流.
deviceId4hYbpq3YGKqNN6RbbLz5HrLfolsmjFDMl8sYdeviceIdMZ0gdxcs1Q0NW0sobM8ri3kfDhmOs1K74e2pstreamC3:with deviceIdiUWqFDfruPGcT6nl9gUxeN6dCM8VfFH5ZmR8
const c1 = { audio: { deviceId: { exact: audioInputs[0].deviceId } } };
const c2 = { audio: { deviceId: { exact: audioInputs[1].deviceId } } };
const c3 = { audio: { deviceId: { exact: audioInputs[2].deviceId } } };
getMedia(c1)
.then(() => getMedia(c2))
.then(() => getMedia(c3));
Run Code Online (Sandbox Code Playgroud)这在Chrome(版本55.0.2883.87)中运行良好,我得到3个不同的流(C1,C2,C3),所有audioTracks都有预期的标签.
但是getUserMedia在Firefox(50.0.2)中第二次和第三次调用(C2,C3)时出现以下错误:
根据该文件为NotReadableErrors:
虽然用户已授予使用匹配设备的权限,但操作系统,浏览器或网页级别发生硬件错误,导致无法访问设备.
(但是我可以使用相同的约束获取多个流,而不会遇到这个问题.)
Firefox是否符合预期?既然文档提到了"硬件错误"?是否有不同的方法来获取多个流(具有不同的设备约束)?或者我是否必须停止流,释放设备然后获取新流?
谢谢你的时间.
在本文档中,它用于URL.createObjectURL设置视频源.(这是接听电话的代码).
var offer = getOfferFromFriend();
navigator.getUserMedia({video: true}, function(stream) {
pc.onaddstream = e => video.src = URL.createObjectURL(e.stream);
pc.addStream(stream);
pc.setRemoteDescription(new RTCSessionDescription(offer), function() {
pc.createAnswer(function(answer) {
pc.setLocalDescription(answer, function() {
// send the answer to a server to be forwarded back to the caller (you)
}, error);
}, error);
}, error);
});
Run Code Online (Sandbox Code Playgroud)
我希望video.src成为检索远程视频的地址.所以它应该由连接的另一端(无论是谁发起呼叫)修复和给出.但价值URL.createObjectURL回答者的一边产生,它的事件取决于函数被调用的时间.如何使用它来获取远程视频流?
编辑:URL.createObjectURL看起来像blob 的结果:http://some.site.com/xxxx-the-token-xxxx.使用此字符串,视频组件如何知道加载远程流的位置?是否存在{url:stream}的哈希映射?如果是这样,视频组件如何访问hashmap?
流对象确实存储了一个令牌字符串,您可以使用该字符串stream.toURL.但它与结果不同URL.createObjectURL.价值URL.createObjectURL取决于时间.如果连续两次调用它,则会得到不同的值.
我正在尝试使用WebRTC(Peer.js)创建游戏。而且我无法通过“ http”进行视频通话...也许只能通过https进行?PS媒体呼叫的所有工作示例(我看到)都使用https!
1) http://cdn.peerjs.com/demo/videochat/ (doesn't work)
2) https://simplewebrtc.com/demo.html (works)
Run Code Online (Sandbox Code Playgroud) 我有一个<audio>元素,并且要更改速度,开始/结束范围和音高。我想看看是否可以在浏览器中录制我听到的音频。但是由于质量较低,我不想只用麦克风录音。
我可以在服务器端执行相同的效果,但我宁愿不这样做,因为我基本上会使用两种不同的技术来复制相同的功能。
由于“我不清楚我要问的是什么”,因此对国旗表决作出回应,我将重新表述。
我<audio>在页面上播放一个元素。我有一些Javascript操作播放率,音量等。然后,我希望浏览器在听到声音时记录下来。这不是麦克风。我想创建一个新的音频文件,该文件与正在播放的音频文件尽可能接近。如果为75%,则新文件的音量为75%。
我一直在使用Pusher一段时间了.我总是认为"实时"意味着"瞬间".最近我进入了这篇文章:https://en.wikipedia.org/wiki/Real-time_computing,一句话引起了我的注意:
"实时程序必须保证在指定的时间限制内响应"
他们举了一个基于音频处理的例子:
"考虑一个音频DSP示例;如果一个过程需要2.01秒来分析,合成或处理2.00秒的声音,那么它不是实时的.但是,如果它需要1.99秒,它是或者可以变为真实的时间DSP过程."
我的问题:1.此定义仅适用于硬件/电子设备或也可应用于软件?2.如果适用于软件,它是否适用于像Pusher这样的远程服务?3.推动者被视为"实时"的时间限制是什么?4. WebRTC,Firebase等其他服务的时间限制是什么?
webrtc ×10
javascript ×6
asterisk ×1
audio ×1
dtls ×1
firefox ×1
getusermedia ×1
html ×1
html5 ×1
html5-audio ×1
html5-video ×1
peerjs ×1
pusher ×1
real-time ×1
rtp ×1
websocket ×1