【发布时间】:2017-06-30 17:04:58
【问题描述】:
我目前正在使用 socket.io 在 HTML 和 JS 中创建一个聊天应用程序。我能够轻松地在两台计算机之间进行通信,发送书面消息。我的问题是我无法弄清楚如何将录制在一台计算机中的实时语音发送到另一台计算机。我正在使用“navigator.getUserMedia”从麦克风录制音频,效果很好,但我无法通过 Socket.io 将其发送到另一台计算机。
我知道我可以开始录制,然后停止,最后发送结果,但这不是我需要的,我需要的是实时流。
这是服务器的代码:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var path = require('path');
var users = [];
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
socket.on('add user', function(user_id){
users.push(user_id);
});
socket.on('chat message', function(msg){
io.emit('chat message', msg);
});
socket.on('voice sent', function(msg){
io.emit('voice received', msg);
});
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
这是客户端js:
$(function () {
var socket = io();
var user_id = Math.random();
socket.emit('add user', user_id);
$('form').submit(function(){
socket.emit('chat message', {"message": $('#m').val(), "user": user_id});
$('#m').val('');
return false;
});
socket.on('chat message', function(msg){
if(msg.user == user_id){
$('#messages').append($('<li class="mine">').text(msg.message));
}
else{
$('#messages').append($('<li>').text(msg.message));
}
});
socket.on('voice received', function(msg){
var audio = document.querySelector('audio');
audio.src = window.URL.createObjectURL(stream);
});
navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia;
if (navigator.getUserMedia) {
console.log('getUserMedia supported.');
navigator.getUserMedia ({audio: true}, successCallback, errorCallback);
} else {
console.log('getUserMedia not supported on your browser!');
}
function successCallback(stream){
socket.emit('voice sent', stream);
}
function errorCallback(error) {
console.error('An error occurred: [CODE ' + error.code + ']');
}
});
我希望有人可以帮助我。谢谢
【问题讨论】:
-
你可以使用webRTC,看看文档对你有帮助。
-
发送或接收音频需要录制和渲染音频的行为......在您的努力中,我会在您冒险通过网络发送二进制数据之前放置代码来处理这些职责。 .. 我使用套接字来发送音频,但在我看来,这很容易......这就是为什么网络需要 15 年才拥有流式音频
-
非常感谢@PandhiBhaumik,我终于找到了解决方案。效果很好。
-
你用过什么?
-
我使用了 Simple-Peer 和 GetUserMedia:npmjs.com/package/simple-peer && npmjs.com/package/getusermedia 完成项目后我会上传到 github 并分享链接 ;)
标签: javascript node.js audio socket.io streaming