簡體   English   中英

使用Socket.io傳輸實時音頻

[英]Stream live audio using Socket.io

我創建了一個小項目來使用Socket.io來傳輸實時音頻。 問題是這只有在我在同一個chrome窗口中測試時才有效。 當另一台計算機試圖收聽或廣播它不能。 這是另一台計算機中顯示的消息:

GET blob:https://server/ce74cfe7-bb9c-40b0-9cb0-1138b22b1b11 404 (Not Found)

這是main.js(網站)中的代碼:

$(document).ready(function(){
    var socket = io("https://server:4000", verify=false);
    socket.on('audio stream', function(name, blob){
        var video = document.querySelector('video');
        video.src = blob;
    });
    $('#ptt').click(function(){
        micOn();
        document.getElementById("ptt").disabled = true;
        document.getElementById("ptt-off").disabled = false;
    });
    $('#ptt-off').click(function(){
        stream.getAudioTracks()[0].stop();
        document.getElementById("ptt").disabled = false;
        document.getElementById("ptt-off").disabled = true;
    });
    function micOn(){
        navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;

        var constraints = {
            audio: true,
            video: false
        };
        var video = document.querySelector('video');

        function successCallback(stream) {
            window.stream = stream; // stream available to console
            var blob = window.URL.createObjectURL(stream);
            socket.emit('audio stream', myName, blob);
        }

        function errorCallback(error) {
            console.log('navigator.getUserMedia error: ', error);
        }

        navigator.getUserMedia(constraints, successCallback, errorCallback);
    }
});

這是服務器上的代碼(index.js):

socket.on('audio stream', function(name, blob){
    console.log(name + ' is broadcasting audio');
    socket.broadcast.emit('audio stream', name, blob);
});

要使用Socket.io進行流式傳輸,您需要使用socket.io-stream庫。

根據官方文檔: socket.io-stream

使用下面的文件從socket.io-stream站點的一個簡單示例。

//For streaming between server and client, you will send stream instances first. To receive streams, you just wrap socket with socket.io-stream, then listen any events as usual.

//SERVER:

var io = require('socket.io').listen(80);
var ss = require('socket.io-stream');
var path = require('path');

io.of('/user').on('connection', function(socket) {
  ss(socket).on('profile-image', function(stream, data) {
    var filename = path.basename(data.name);
    stream.pipe(fs.createWriteStream(filename));
  });
});
//The function createStream() returns a new stream which can be sent by emit().

//CLIENT:

var io = require('socket.io-client');
var ss = require('socket.io-stream');

var socket = io.connect('http://example.com/user');
var stream = ss.createStream();
var filename = 'profile.jpg';

ss(socket).emit('profile-image', stream, {name: filename});
fs.createReadStream(filename).pipe(stream);
//You can stream data from a client to server, and vice versa.

// send data 
ss(socket).on('file', function(stream) {
  fs.createReadStream('/path/to/file').pipe(stream);
});

// receive data 
ss(socket).emit('file', stream);
stream.pipe(fs.createWriteStream('file.txt'));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM