Http范围标头请求整个文件
我正在使用codeplex 1.1版的。我已经实现了Accept范围标头,它确实有效。但是,当我使用wireshark(1.4.1版(SVN Rev 34476 from/trunk-1.4))捕获流量时,我看到了以下内容:Http范围标头请求整个文件,http,webserver,Http,Webserver,我正在使用codeplex 1.1版的。我已经实现了Accept范围标头,它确实有效。但是,当我使用wireshark(1.4.1版(SVN Rev 34476 from/trunk-1.4))捕获流量时,我看到了以下内容: GET /movies/i_am_legend%20dvd/main.m4v HTTP/1.1 Host: 10.100.1.199:8081 Accept: */* Range: bytes=0-1 Accept-Encoding: identity Connection
GET /movies/i_am_legend%20dvd/main.m4v HTTP/1.1
Host: 10.100.1.199:8081
Accept: */*
Range: bytes=0-1
Accept-Encoding: identity
Connection: keep-alive
User-Agent: AppleCoreMedia/1.0.0.9B206 (iPad; U; CPU OS 5_1_1 like Mac OS X; nl_nl)
X-Playback-Session-Id: 9CED81CC-BFAE-4CF6-A477-0EA62B2C652F
HTTP/1.1 206 PartialContent
Content-Range: bytes 0-1/652965648
Accept-Ranges: bytes
ETag: "0daA8D4/wgt4MFvxdNIPLw=="
Date: Wed, 13 Jun 2012 09:10:18 GMT
Content-Length: 2
Content-Type: video/x-m4v
Server: Tiny WebServer
Connection: keep-alive
.. << 2 bytes data
GET /movies/i_am_legend%20dvd/main.m4v HTTP/1.1
Host: 10.100.1.199:8081
Accept: */*
Range: bytes=0-652965647
Accept-Encoding: identity
Connection: keep-alive
User-Agent: AppleCoreMedia/1.0.0.9B206 (iPad; U; CPU OS 5_1_1 like Mac OS X; nl_nl)
X-Playback-Session-Id: 9CED81CC-BFAE-4CF6-A477-0EA62B2C652F
HTTP/1.1 206 PartialContent
Content-Range: bytes 0-652965647/652965648
Accept-Ranges: bytes
ETag: "0daA8D4/wgt4MFvxdNIPLw=="
Date: Wed, 13 Jun 2012 09:10:18 GMT
Content-Length: 652965648
Content-Type: video/x-m4v
Server: Tiny WebServer
Connection: keep-alive
阅读后,每当我收到整个文件的范围请求时,我都会尝试发送一个较短的范围。但这根本不起作用
我想知道:
range:bytes=0-1
range:bytes=0-65535/652965648- 急切地缓冲整个媒体文件。当带宽便宜时(用户不支付或支付固定的数据传输费率),这是一个很好的策略。假设用户希望查看/收听整个媒体文件
- 延迟缓冲刚好足以避免延迟。当带宽昂贵时(用户按字节付费),这是一个很好的策略 在理想的设置中,媒体播放器根本不需要缓冲任何内容,而是在实时播放媒体时解码流中的数据。然而,这将要求底层网络通道超级稳定,并始终以所需的速度传输数据 事实并非如此,因此媒体播放器将选择提前几秒或几分钟进行缓冲
- 连接被中止(出于任何原因)
- 用户在媒体中领先。(例如,想看电影的10分钟)
接受范围
标题)必须服从客户端并以其请求的任何范围响应
但是,您可以使用
传输编码:chunked
头发送数据。这将使您的服务器能够控制传输的数据量。但是,它仍然是通过单个HTTP连接完成的 我是,对我来说,这似乎是iPad/iPhone的问题。@MindasYou;我们面临着同样的问题。由于我使用的Web服务器的结构,我没有太多选择,需要重新抛出异常以停止处理范围请求。幸运的是,我在同一时间只有1个客户端连接(但它也可以使用2或3个)。我希望您能得到一些有用的答案。我们在测试中看到的是,safari要求输入前两个字节(范围0-1),然后要求输入整个文件并立即关闭连接,然后要求输入文件的最后几百KB(我怀疑其中包含重要的元数据。Chrome也会这样做),然后,它开始从头到尾以小块的形式请求文件。我怀疑确切的模式会因视频格式的不同而有所不同。@AbhiBeckert:谢谢你的反馈。我从未见过范围请求在文件末尾请求字节,但正如您所提到的,它可能取决于视频文件格式。我们正在使用.m4v文件。您能反馈您使用的文件类型吗?感谢您的广泛反应。我将把它标记为答案。
GET /ipod/main.m4v HTTP/1.1
Host: 10.100.1.199
User-Agent: AppleCoreMedia/1.0.0.9B206 (iPad; U; CPU OS 5_1_1 like Mac OS X; nl_nl)
Accept: */*
Range: bytes=0-1
Accept-Encoding: identity
X-Playback-Session-Id: C5BBF91D-78AB-42BA-ACE0-D74AB9D845CE
Connection: keep-alive
HTTP/1.1 206 Partial Content
Content-Type: video/x-m4v
Last-Modified: Mon, 11 Jun 2012 10:33:41 GMT
Accept-Ranges: bytes
ETag: "7243cabbd47cd1:0"
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Wed, 13 Jun 2012 09:21:03 GMT
Content-Length: 2
Content-Range: bytes 0-1/652965648
.. << 2 bytes of data
GET /ipod/main.m4v HTTP/1.1
Host: 10.100.1.199
User-Agent: AppleCoreMedia/1.0.0.9B206 (iPad; U; CPU OS 5_1_1 like Mac OS X; nl_nl)
Accept: */*
Range: bytes=0-652965647
Accept-Encoding: identity
X-Playback-Session-Id: C5BBF91D-78AB-42BA-ACE0-D74AB9D845CE
Connection: keep-alive
HTTP/1.1 206 Partial Content
Content-Type: video/x-m4v
Last-Modified: Mon, 11 Jun 2012 10:33:41 GMT
Accept-Ranges: bytes
ETag: "7243cabbd47cd1:0"
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Wed, 13 Jun 2012 09:21:03 GMT
Content-Length: 652965648
Content-Range: bytes 0-652965647/652965648
Range: bytes=2162688-652965647 (@ time == 1.646204)
Range: bytes=4980736-652965647 (@ time == 2.754322)
Range: bytes=6356992-652965647 (@ time == 2.922479)