2

ffmpeg を使用し、オーディオをノード サーバーにストリーミングする独立したデバイスがあります。ffmpeg コマンドでストリームをエンコードします

ffmpeg -f alsa -i hw:0 -acodec mp2 -f mp3 -r 30 http://localhost:8086/abc

出力:

ffmpeg version 0.8.8-4:0.8.8-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers
built on Oct 22 2013 12:31:55 with gcc 4.6.3
[alsa @ 0x20ef9c0] Estimating duration from bitrate, this may be inaccurate
 Input #0, alsa, from 'hw:0':
  Duration: N/A, start: 10088.609013, bitrate: N/A
  Stream #0.0: Audio: pcm_s16le, 48000 Hz, 2 channels, s16, 1536 kb/s
Output #0, mp3, to 'http://localhost:8086/abc':
  Metadata:
    TSSE            : Lavf53.21.1
    Stream #0.0: Audio: mp2, 48000 Hz, 2 channels, s16, 128 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
size=     462kB time=29.54 bitrate= 128.0kbits/s 

Web ソケットを使用して、接続されているすべてのクライアントにストリームを書き込みます。流れはこんな感じ

request.on('data', function(data){
    console.log(data);
    audioSocket.broadcast(data, {binary:true});
});

//stream output
<Buffer 78 00 dc ff 3b 00 1e 00 27 00 0d 00 72 00 f7 ff 4f 00 0e 00 7d 00 f5 ff 43 00 e2 ff 15 00 e5 ff 3e 00 db ff e9 ff d6 ff 24 00 ad ff ad ff a3 ff a3 ff 53 ...>

Web オーディオ API を使用してこのストリームを再生しようとしていますが、decodeAudioData ステップを通過できませんでした。常にエラー コールバックを呼び出し、err は常に null です。

var audio = new WebSocket('ws://localhost:8088/');
audio.binaryType = "arraybuffer";
var context = new webkitAudioContext();

audio.onmessage = function(data){
    var buf  = data.data;
    d = data;
    context.decodeAudioData(
        buf,
        function(buffer){    console.log(buffer);    },     //success handler
        function(err){   console.log('error: ', err)    }   //error handler
    );
}

このストリームを再生するにはどうすればよいですか?

4

1 に答える 1