2012-04-19 11 views
2

コンテンツをストリーミングする単純なNode.jsアプリケーションを作成しました(主にビデオ用ですが、他のものも同様に動作します)。イメージの下部が常に表示されないいくつかのJPEGの場合を除いて、正常に動作するようです。ストリーミングアプリで画像が完全に表示されないのはなぜですか?

ここでは、画像の下部が左に欠落している例を示します。

enter image description here

問題を示すサイトがhereで、問題なく同じに見えるサイトがhereです。 (最初のリンクを持つほとんどの画像の下部にあるピンク色のビットがあるはずです。)

アプリのコードはon Githubですが、私は重要な行は

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

(だから、すべての重いのです推測リフティングはstream.js、ない私のコードによって行われます。)

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

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

  • サファリ4、5から
  • クロム18を動作しない( - Firefoxの4、11(2台のコンピュータ)
  • 動作2台のコンピュータは) -
  • IE 9を動作しません - -
  • IE 8は動作しません
  • オペラ11作品 - ヲrks

私は実際に何が起こっているのか分かりません。私はそれが奇妙なグラフィックドライバのバグかもしれないと思ったが、動作は私が試したすべてのコンピュータで一貫しています。私はNode.js /私のコードを非難するのは難しいと思うが、ファイル全体を転送しているようだが、それがなければ正常に動作する。

必要に応じて詳細を入力してください。

*明らかに私はすべての可能なファイルタイプを試しませんでしたが、pngs、プログレッシブjpeg、テキスト、ビデオが動作するようです。

答えて

0

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

+1

ニースキャッチ。 (ここには、オーバーフローのコメントの最小文字制限をスタックするためにいくつかの文字があります) –

関連する問題