wgetを使用してストリーミングmp3をダウンロードしようとしています。これは私の基本的なコマンドです。
wget http://sj128.hnux.com/sj128.mp3 -c --timeout=1 --waitretry=0 --tries=0 -O "file.mp3"
私はスクリプトでこれを行ってきましたが(1時間実行)、私のファイルが切り捨てられて不完全に終わることがわかりました。たとえば、ファイルサイズは約30 MBになると予想していましたが、実際のサイズはわずか13 MBです。
CLIから直接このコマンドを実行し、最終的に常に「読み取りタイムアウト」が発生することを発見するまで、何が起こっているのか理解していませんでした。これが邪魔にならないようにしてください。 -c と無限再試行がこれを見事に処理しなければなりません。
ただし、代わりに「読み取りタイムアウト」と再試行後にダウンロードが続行されても、ファイルサイズは大きくなりません。
ダウンロードは続行されますが、ファイルが予想どおり大きくなり続けないのはなぜですか?すべての出力に完全に異なるファイル名と新しいプロセスが表示されているにもかかわらず、「ファイル」タイプの競合を避けるために、まったく異なるファイル名で新しいwgetを起動する洗練されたスクリプトも作成しました。ファイル!
この場合、ダウンロードが始まるように見えますが、新しいファイルが表示されないのはなぜですか? ?
ベストアンサー1
これはリアルタイムストリームです。回復する開始や固定位置がないため、「回復」という概念全体は適用されません。現在ストリーミング中のすべてのデータを取得できます。
しかし、wget
これを知らなかった。ネットワーク障害後の回復の試みは次のとおりです。
wget
ファイルのサイズを確認してください。サーバーが再開可能な転送をサポートしている場合、wget
ソースファイルの途中から転送を再開する必要がありますが、サーバーにこのファイルがなく、サーバーが再開可能な転送をサポートしていないため、この方法は失敗します。- 復元に失敗したため、
wget
復元を受けたと見なされます。同じデータ最初から。破棄される量が前のファイルサイズに達するまでデータを破棄します。その後、ファイルに新しいデータの追加を開始します。ファイルが大きくなり始める時点です。
実際に接続に問題がある場合は、ストリームの一部を見逃すのではなく、ストリームの一部を見逃すことです。また、wget
同じデータを2番目に受信したと仮定するため、保存できたデータを見逃す可能性があります。
この問題を解決するには、次を開始し、必要に応じて再起動します。
wget http://sj128.hnux.com/sj128.mp3 -O - >> "file.mp3"
(必要に応じて他のオプションも可能です。)受信したコンテンツはすべてwget
ファイルに追加されます。ストリームの一部のセグメントを見逃した場合、結果ファイルは明らかに「粉砕された」コンテンツを保存します。私のテストでは、VLCはこれらのファイルを再生するための技術的な問題はありませんでした。
注:いつでも.txtファイルを使用してファイルをゼロサイズに縮小できます: > file.mp3
。指定されたファイルの終わりを常に見つけるwget
ので、これは実行中にも機能します(参照:>>
これ)。
wget
「ファイル」タイプの競合を避けるために、まったく異なるファイル名でまったく新しいファイルを起動しましたが、[...]まだ新しいファイルを書きませんでした!
再現できません。私はwget
新しいファイルを書きました。