2016-05-19 7 views
0

訪問者がリンク(ライブストリームではなく、ストリームを使用するラジオアーカイブからのリンク)をクリックしてオーディオストリームを保存できるWebページを作成したいと思います。ブラウザで純粋なJavaScriptを使用してサーバーバックエンドなしでこれを行いたい。 私はFFMpegのJavaScriptポートについて読んでいます。これは、いわゆるBLOBを利用してビデオ/オーディオをブラウザでエンコードして保存することができます。しかし、私が17 MBを覚えている限り、ダウンロードライブラリは巨大です。実際には、実際のエンコード処理ではなく、オーディオストリームのストリームのみをストリームする必要があります。それだけで本当に必要なストリームのコピーを提供するJavaScriptにFFMPEGのサブセットをコンパイルすることが可能である、純粋なJavaScriptを使用してオーディオストリームをブラウザに保存することはできますか?

ffmpeg -i http://stream.example.com/stream_20160518_0630.mp3 -c copy -t 3600 programme.mp3 

私は疑問に思う: は、私は通常、プログラムを保存するために同様のコマンドを使用できますか?

答えて

0
var audio = new Audio(); 
var ms = new MediaSource(); 
var chunks = []; 
audio.src = URL.createObjectURL(ms); 

ms.addEventListener('sourceopen', function(e) { 
    var sourceBuffer = ms.addSourceBuffer('audio/mpeg'); 
    var stream; 

    function pump(stream){ 
     return stream.read().then(data => { 
      chunks.push(data.value) 

      sourceBuffer.appendBuffer(data.value); 
     }) 
    }; 

    sourceBuffer.addEventListener('updateend',() => { 
     pump(stream); 
    }, false); 

    fetch("http://stream001.radio.hu:443/stream/20160606_090000_1.mp3") 
     .then(res=>pump(stream = res.body.getReader())) 

    audio.play() 
}, false); 

// stop the stream when you want and save all chunks that you have 
stopBtn.onclick = function(){ 
    var blob = new Blob(chunks) 
    console.log(blob) 
    // Create object url, append to link, trigger click to download 
    // or saveAs(blob, 'stream.mp3') need: https://github.com/eligrey/FileSaver.js 
} 
+0

残念ながら、ラジオストリームは無限であるため、残念ながらこの場合は機能しません。どういうわけか私はある時点でダウンロードを中断しなければなりません。 – Konstantin

+0

私は、他の2つの選択肢があります。 1)そのURLへのajax呼び出しを行い、チャンク(**読み込み可能なストリーム**から)を保存する - それらのチャンクからブロブを作成し、それを保存します。 2)私が作成したばかりの素晴らしい[StreamSaver.js](https://github.com/jimmywarting/StreamSaver.js)を使用する - Chrome v52で動作するつもりはありません。まだリリースされていません – Endless

+0

Thx、1番目のメソッドが動作しています。ここでのソースコードhttp://pastebin.com/dfitDqBs 唯一の問題は、CORSヘッダー(Access-Control-Allow-Origin:*)を送信するサーバーからのオーディオを録音するときに完全に機能することです。そのヘッダーを提供していないサーバーでは、Cross Origin Policyエラーが発生します。私はこれを解決する方法を知りません。 – Konstantin

関連する問題