0

私はJavaで軽いWebサーバーを開発しています(非常に軽い)、彼の目的は主にオーディオをストリーミングすることです。

Web ページに、単純な html5 オーディオ タグがあります。ブラウザーにページをロードすると、ブラウザーはオーディオ ファイルに対して GET 要求を行い、正常に動作しています。しかし、一時停止/再生またはシークすると、ブラウザはRange条件でXバイトでリクエストを行います

GET /audio/3f6dbbd6adcb5eb4ea4cd981f30a6c409727bbf202367df18d4dd1a91a959fdb HTTP/1.1
Host: localhost:8888
Connection: keep-alive
Accept-Encoding: identity;q=1, *;q=0
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.16 (KHTML, like Gecko) Chrome/24.0.1304.0 Safari/537.16
Accept: */*
Referer: http://localhost:8888/stream/3f6dbbd6adcb5eb4ea4cd981f30a6c409727bbf202367df18d4dd1a91a959fdb
Accept-Language: en-US,en;q=0.8,fr;q=0.6
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Range: bytes=360448-

そして、サーバーに次の条件で 206 部分コンテンツを返信させました。

HTTP/1.1 206 Partial Content
Date : Wed Nov 07 08:07:32 CET 2012
Content-Length:11126914
Content-Range: bytes 360448-11487361
Accept-Ranges: bytes
Content-Type : audio/mpeg

もちろん、360448バイトから始まるバイナリデータが続きますが、ブラウザはそれを気に入っていないようです. .

私はApacheサーバーで何が起こるかを見ようとしましたが、ブラウザは常に200(キャッシュ)を使用し、キャッシュされたバージョンのmp3を使用するため、サーバーへのリクエストがないため、それはちょっと難しいです.

私は不正行為をして、200 や 304 などの別の応答番号を使用しようとしましたが (一部のサーバーはそれを使用しているようです)、ここではうまくいきませんでした。

このプロセスで何が間違っていますか? 必要に応じてさらにログを提供できます

4

1 に答える 1

2

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16によると、ヘッダーは

Content-Range: bytes 360448-11487361/11487362

11487362ファイルのフルサイズで11487361、最後の0ベースのバイトオフセットです。

于 2012-11-07T07:34:16.147 に答える