3

コンテンツをストリーミングする単純なNode.jsアプリを作成しました(主にビデオ用ですが、他のものも機能します)。画像の下部が常に表示されるとは限らない一部のjpegを除いて、正常に機能しているようです。

これが例です。左側に画像の下部がありません。

ここに画像の説明を入力してください

問題を示しているサイトはここにあり、問題のない同じように見えるサイトはここにあります。(最初のリンクがあるほとんどの画像の下部にピンク色のビットがあるはずです。)

アプリのコードはGithubにありますが、重要な行は

stream = fs.createReadStream(info.file, { flags: "r", start: info.start, end: info.end });
stream.pipe(res);

(つまり、すべての手間のかかる作業は、私のコードではなく、stream.jsによって行われます。)

  • 開始パラメーターと終了パラメーターを削除しようとしましたが、違いはありません。
  • 代わりにファイルをストリーミングするように変更しprocess.stdout、出力をファイルに保存すると、画像全体が表示されます。
  • ファイル比較プログラムは、元のファイルstdoutと元のファイルが同一であると言います。
  • ベースラインjpeg以外のものを転送すると(プログレッシブjpegでも機能します)、ファイル全体が表示されます。*
  • リンクされたNode.jsアプリ(Expressを使用)を介してファイルにアクセスしたが、ストリーマーを介してアクセスしなかった場合、画像全体が表示されます。
  • 不完全な画像をブラウザからデスクトップに保存すると、画像全体が保存されます。
  • 一部のjpegでは機能しますが、ほとんどの場合は機能しません。
  • 問題はローカルおよびサーバー(Windows 2008R2およびUbuntu11それぞれ)で発生します。

ブラウザテスト(3台以上のコンピュータと1台のVM)

  • Safari 4、5-動作します
  • Firefox 4、11(2台のコンピューター)-動作しません
  • Chrome 18(2台のコンピューター)-動作しません
  • IE8-動作しません
  • IE9-動作します
  • Opera11-動作します

ここで何が起こっているのか本当にわかりません。奇妙なグラフィックドライバのバグである可能性があると思いましたが、動作は試したすべてのコンピュータで一貫しています。Node.js /私のコードはファイル全体を転送しているように見えるので、これを非難するのは難しいと思いますが、それがなくても問題なく動作します。

必要に応じて詳細をお知らせください。

*明らかに、すべての可能なファイルタイプを試したわけではありませんが、png、プログレッシブjpeg、テキスト、およびビデオは機能しているようです。

4

1 に答える 1

0

問題はヘッダー()で送信されたファイルサイズであることが判明しましたheader["Content-Length"]。これをに設定しますがinfo.end - info.start、実際のサイズはそれより1大きくなります。一部のブラウザはこれを気に入らず、画面に表示するときに画像の終わりを見逃していました。おっと。

于 2012-04-20T17:47:09.640 に答える