【问题标题】:How can I make a living audio streaming with node server?如何使用节点服务器制作实时音频流?
【发布时间】:2018-08-29 09:17:09
【问题描述】:

我想以音频流媒体为生。我从节点服务器通过管道传输我的 mp3 文件,没有问题。我在客户端播放 mp3,但它只是在流结束时播放。我想在流继续时播放它。我该怎么做?

服务器端

   var stream = ss.createStream();
        ss(socket).emit('H_to_S_shareVoice', stream);
        var filename = 'musix' + '.mp3';
        console.log(filename);
        fs.createReadStream(filename).pipe(stream);

客户

<br>
<br>
<h1 id='socket'>not connected</h1>
<br>
<audio autoplay volume="1" controls id="audio" />

    $(document).ready(function () {

        $(function () {
            var socket = io.connect('http://localhost:4000');


            socket.on("connect", function () {
                console.log("on connect");
                document.getElementById('socket').innerHTML = 'connected to the server';

                ss(socket).on('H_to_S_shareVoice', function (stream, data) {
                    console.log('received', data);

                    var binaryString = "";
                    stream.on('data', function (data) {
                        console.log('data')
                        console.log(data.length)
                        for (var i = 0; i < data.length; i++) {
                            binaryString += String.fromCharCode(data[i]);
                        }
                        $("#audio").attr("src", "data:audio/wav;base64," + window.btoa(binaryString));
                        document.getElementById('audio').load();
                        document.getElementById('audio').play();
                        //document.getElementById('test').innerHTML = window.btoa(binaryString);
                        /*if (dat.length > 0 && oneTime) {
                            oneTime = false;

                        }*/
                        //  $("#audio").attr("src", "data:audio/wav;base64," + window.btoa(binaryString));


                        binaryString = ""
                    });

                    /*stream.on('end', function (data) {
                        console.log('end')
                        document.write(binaryString);
                        $("#audio").attr("src", "data:audio/wav;base64," + window.btoa(binaryString));

                        binaryString = "";
                    });*/
                });
            });
        });
    });

</script>

【问题讨论】:

    标签: javascript audio socket.io live-streaming internet-radio


    【解决方案1】:

    丢弃所有的 Socket.IO 代码,以及整个 base64 编码的混乱......

    您所要做的就是在请求进来时通过 HTTP 输出媒体数据。您的客户端代码就像 &lt;audio src="path/on/the/server"&gt;&lt;/audio&gt; 一样简单。

    【讨论】:

    • 感谢您的回答。我用 PCMPlayer 修复了它。
    • @oguzkaganeren 很不幸...这会占用大量带宽。
    • 我可以用你的方式向每个客户端发送不同的数据吗?你能推荐任何来源吗?
    【解决方案2】:

    我用 PCMPlayer 修复了。

    var player = new PCMPlayer({
                            encoding: '16bitInt',
                            channels: 2,
                            sampleRate: 16000,
                            flushingTime: 1000
                        });
                        stream.on('data', function (data) {
                            console.log(data)
                            player.feed(data);
                        });
    

    【讨论】:

      猜你喜欢
      • 2020-03-22
      • 2015-08-10
      • 2013-05-09
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 2017-10-30
      • 2013-03-05
      • 2018-06-25
      相关资源
      最近更新 更多