最近几天,我尝试使用javascript录制音频流.我发现没有可用的示例代码.
有没有浏览器支持?
这是我的代码
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia || navigator.msGetUserMedia;
navigator.getUserMedia({ audio: true }, gotStream, null);
function gotStream(stream) {
msgStream = stream;
msgStreamRecorder = stream.record(); // no method record :(
}
Run Code Online (Sandbox Code Playgroud) 针对Chrome Canary的http://code.google.com/p/chromium/issues/detail?id=112367阻止获取麦克风输入的错误现已修复.这部分似乎确实有效.我可以将麦克风输入分配给音频元素,并通过扬声器听到结果.
但我想连接分析仪节点以进行FFT.如果我将音频源设置为本地文件,分析器节点可以正常工作.问题是当连接到mic音频流时,分析器节点只返回基值,就好像它根本没有音频流一样.(如果你好奇的话,一遍又一遍-100.)
谁知道怎么了?它还没有实现吗?这是一个铬虫吗?我在Windows 7上运行26.0.1377.0并启用了getUserMedia标志,并通过python的simpleHTTPServer通过localhost服务,因此它可以请求权限.
码:
var aCtx = new webkitAudioContext();
var analyser = aCtx.createAnalyser();
if (navigator.getUserMedia) {
navigator.getUserMedia({audio: true}, function(stream) {
// audio.src = "stupid.wav"
audio.src = window.URL.createObjectURL(stream);
}, onFailure);
}
$('#audio').on("loadeddata",function(){
source = aCtx.createMediaElementSource(audio);
source.connect(analyser);
analyser.connect(aCtx.destination);
process();
});
Run Code Online (Sandbox Code Playgroud)
同样,如果我将audio.src设置为注释版本,它可以工作,但是使用麦克风则不行.流程包含:
FFTData = new Float32Array(analyser.frequencyBinCount);
analyser.getFloatFrequencyData(FFTData);
console.log(FFTData[0]);
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用createMediaStreamSource并绕过音频元素 - 例4 - https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/webrtc-integration.html.也不成功.:(
if (navigator.getUserMedia) {
navigator.getUserMedia({audio: true}, function(stream) {
var microphone = context.createMediaStreamSource(stream);
microphone.connect(analyser);
analyser.connect(aCtx.destination);
process();
}
Run Code Online (Sandbox Code Playgroud)
我想有可能将mediasteam写入缓冲区,然后使用dsp.js或其他东西来做fft,但我想在我走这条路之前先检查一下.
我的问题是:
1 - 是否可以在我的Native App中使用WebView(由Native框架提供)实例,并将其扩展为支持Webrtc,
如果1为是,则可能跟随的是动作项
1 - 在Android上构建一个webrtc,2 - 在Android WebView中扩展Javascript以耦合/绑定Webrtc调用,
请确认..
1 - 我们有基于webrtc的语音/视频聊天应用程序在Chrome和Mozilla桌面浏览器中运行良好,因为它们都带有webrtc ...,即用户需要访问www.xyz.com,它将启动视频/语音会话,
2 - 在移动设备上同样的事情,我们想作为本机应用程序,即我们正在尝试创建一个具有本机WebView实例的应用程序,我们将在其中访问www.xyz.com以进行语音/视频会话
3 - 我尝试了我在2中解释的方式,但似乎在Application框架提供的WebView实例中没有启用webrtc,所以我试图添加它,这就是我的想法,
- WebView实例有一些扩展Javascript的机制,这意味着 http://dev.w3.org/2011/webrtc/editor/webrtc.html 这些API中的一些我需要添加到WebView中,并且它们的实现将会如果我能够在Android和iOS平台上成功集成和构建Webrtc的话
请评论....
我有小型计算机(类似于Arduino或Raspberry pi),上面安装了Linux,摄像头和gstreamer.我需要使用WebRTC技术将h264视频从此设备传输到浏览器.此外,我使用NodeJS作为信令服务器.
简单来说,我需要从我的设备上做一个WebRTC客户端.做这个的最好方式是什么?我可以使用WebRTC Native API实现此目标吗?如何在我的小型设备上安装它?或者,也许,我只需要玩我的gstreamer并为它安装一些webrtc插件?
我正在捕捉用户的相机,我想以最佳分辨率捕捉到图片,所以我的代码就像下面的代码片段,
我想从传入流中读取分辨率详细信息,因此我可以将其设置为视频高度和宽度,我将使用它来点击快照,我希望快照具有流提供的最佳质量,这是可能的(对于从stream变量中读取分辨率细节)?
编辑:我正在使用传输视频,webrtc所以我也想找出传输的视频流的帧速率
$(document).ready(function(){
navigator.getUserMedia = ( navigator.getUserMedia ||navigator.mozGetUserMedia ||navigator.webkitGetUserMedia ||navigator.msGetUserMedia);
if(navigator.getUserMedia){
navigator.getUserMedia({ video: true, audio:true}, function(stream) {
var video = $('#video')[0];
video.src = window.URL.createObjectURL(stream);
video.muted=true;
//$('#video').hide();
}, function(){
showMessage('unable to get camera', 'error');
});
}else{
showMessage('no camera access mate.', 'error');
}
function showMessage(msg,type) { // type 'success' or 'error'
$('#msg').text(msg);
}
})
Run Code Online (Sandbox Code Playgroud)
HTML代码:
<div id='msg' class'message'></div>
<div >
<video id='video' autoplay></video>
</div>
Run Code Online (Sandbox Code Playgroud) 我听说过使用 WebRTC 在桌面上共享屏幕。但是对于Android来说,似乎没有太多的信息。
我的问题是:
谢谢。
现在我在这里使用这个项目.它是一个python脚本,使用webrtc运行服务器,将客户端/浏览器网络摄像头发送到服务器并执行面部识别.我想做的是使用连接到pi的网络摄像头或pi摄像头做同样的事情,但不使用浏览器.有没有办法用当前的设置做到这一点,还是有更好的方法来实现这一目标?
我们的团队正在选择编程语言来开发一个新的iOS应用程序,我们必须编写功能来支持视频对话.
后端是使用WebRTC编写的,现在我们必须决定在iPhone应用程序中使用哪种语言,在这种情况下我们更喜欢Swift.
但是,我不确定Swift是否支持WebRTC.
我最初的研究表明,我们可以使用Objective-C实现这些功能.我找到了一个用Objective-C编写的例子,你可以在这里找到源代码.
但是,我不确定斯威夫特.Swift还支持WebRTC吗?
我需要从1个客户端到服务器到多个侦听器客户端的实时实时音频流.
目前我从客户端进行录音工作,并通过socket.io将音频流传输到服务器.服务器接收此数据,并且必须将音频(也通过socket.io?)传输到想要侦听此流的客户端.它必须尽可能实时(最小化延迟).
我正在使用GetUserMedia来录制麦克风(浏览器兼容性在这里并不重要).我希望客户端使用HTML5音频标签来收听流.在服务器上接收的数据是打包在带有audio/wav类型的blob中的块(当前由700打包).
这是我将代码发送到服务器的代码:
mediaRecorder.ondataavailable = function(e) {
this.chunks.push(e.data);
if (this.chunks.length >= 700)
{
this.sendData(this.chunks);
this.chunks = [];
}
};
mediaRecorder.sendData = function(buffer) {
blob = new Blob(buffer, { 'type' : 'audio/wav' });
socket.emit('voice', blob);
}
Run Code Online (Sandbox Code Playgroud)
在服务器上,我能够以相同的方式将块发送到客户端:
socket.on('voice', function(blob) {
socket.broadcast.emit('voice', blob);
});
Run Code Online (Sandbox Code Playgroud)
在客户端我可以这样玩:
var audio = document.createElement('audio');
socket.on('voice', function(arrayBuffer) {
var blob = new Blob([arrayBuffer], { 'type' : 'audio/wav' });
audio.src = window.URL.createObjectURL(blob);
audio.play();
});
Run Code Online (Sandbox Code Playgroud)
这适用于我发送的第一个块的块,但是你不允许继续更改为audio.src到新的URL源,所以这不是一个有效的解决方案.
我想我必须在服务器上创建某种流,我可以在侦听客户端上放入HTML5的音频标签,但我不知道如何.接收到的带有块的blob应该实时附加到此流.
这样做的最佳方法是什么?我是从客户端麦克风到服务器吗?
我有一个连接到FreePbx的Twilio SIP中继,所有用户都使用FreePBX的webrtc模块拨打电话.他们可以通过双向音频拨打和接听电话,但是对于拨出呼叫,呼叫者听不到铃声(振铃),因为B号码正在响铃,这导致与用户的某种程度的混淆.
我已经检查了出站拨号设置中的r标志,这已启用,但除此之外我有点卡住了.
[SIP设置]
host=hostname
username=username
secret=supersecret
type=peer
Run Code Online (Sandbox Code Playgroud)
在设置 - >星号SIP设置中,我设置了外部和内部网络
要确认,使用带扩展功能的软电话工作正常,只能通过WEBRTC.
我已经打开了wireshark的痕迹,这些都显示了两端的180响
详细的通话记录:https://pastebin.com/s7BfwUMw
webrtc ×10
html5 ×3
javascript ×3
android ×2
getusermedia ×2
ios ×2
asterisk ×1
audio ×1
freepbx ×1
gstreamer ×1
h.264 ×1
html5-audio ×1
iphone ×1
node.js ×1
python ×1
raspberry-pi ×1
sip ×1
socket.io ×1
swift ×1
twilio ×1