オンラインラジオ局からストリーミングオーディオフィードをダウンロードしようとしています。この放送局は以前はMP3のシャウトキャストフィードで運営されていたが、現在はAAC HTTPオーディオフィードにアップグレードされている。。
私は車での移動中にステーションをリッピングするためにターミナルで「streamripper」を使用していましたが、現在、streamripperは新しいストリームをリッピングできません. 現在、この放送局はストリームに http チャンク転送エンコーディングを使用していると思いますが、これは streamripper ではサポートされていません。
私は新しい解決策を思いつきました。それは、放送局のウェブプレーヤーからオーディオフィードを分離し、私はcURLを利用してフィードをオーディオファイルにリッピングしています持って行けますよ。
しかしcURLで「補完」が頻繁に表示されますが、無限に記録されるはずです最大時間パラメータを 43200 秒 (12 時間) に設定しましたが、ファイル サイズがばらつきます。通常、結果として生成されるファイルは 1 時間以内です。ただし、1 時間を超えることもあります。ファイル サイズと時間は異なります。ファイルは短時間で「中断/完了」し、スクリプトを使用して cURL 記録を再開する必要があります。1 日あたり 2 回 (12 時間ごと) の記録で済むはずなのに、フラクタル記録の大きなフォルダーができてしまいます。cURL 転送の詳細を確認すると、「cURL 接続はそのままです」で終わります。cURL ログにはエラーがないため、cURL が終了したと認識していても、強制的に「再接続」を試行し、ストリームを同じファイルに解析し続ける方法がわかりません。
「wget」と「Jdownloader」も試してみましたどちらも結果は同じで、短時間で終了します。
基本的に強制的に再接続し、上書きせずに同じファイルにダウンロードし続けるために何ができるのかわかりません。
録音が「中断」されないようにするにはどうすればいいでしょうか? 再接続を強制するために何かできることはありますか? あるいは、cURL の転送速度が 0 に低下した場合でも cURL に待機するように指示する方法があるでしょうか?
ご意見をいただければ幸いです。
ありがとう
答え1
cURL が「再接続」を試み、ストリームを解析して同じファイルに書き続けるように強制する方法 (終了したと認識している場合でも)
一般的な方法( に固有のものではありませんcurl
)は次のとおりです。
while true; do curl -o - … ; done >file
ポイントは、curl
stdout への書き込みです。何回再起動しても、ループ全体をファイルにリダイレクトします。このようにして、複数の連続したcurl
プロセスからの出力が連結され、1 つのファイルに送信されます。
これを 12 時間実行するには:
timeout 12h sh -c 'while true; do curl -o - … ; done >file'
ノンストップで実行し、12 時間ごとに新しいファイルを作成するには:
while true; do
timeout 12h sh -c 'while true; do curl -o - … ; done >"audio_feed_$(date +%Y-%m-%d_%T)"'
done
必要に応じて新しいファイルを開始するには、現在のファイルtimeout
またはsh
その子ファイルを削除してください。
注: 時々数秒が欠落するストリームが連結されても、再生可能なファイルになるかどうかはわかりません。ネットワーク経由でリアルタイムにストリーミングされるように設計されたプロトコル/コンテナ/コーデックは、欠落したフラグメントの後に再同期できるはずです。これは、データがサーバーから来るかファイルから来るかに関係なく機能するはずです。キャプチャするストリームがこのような場合、後で再生するときに「コンテンツが欠落」することになります (1 つのストリームがcurl
終了し、次のストリームがまだ引き継いでいないタイムスタンプ)。ただし、この「問題」は、そのようなストリームの処理方法を本当に知っているプレーヤーを停止させるものではありません。