"RokuKevin" wrote:
The Roku Streaming Player requires that your http server supports range requests. Both Apache and IIS support range requests.
The behavior of a download loop, sounds like a web server that claims http 1.1 support but does not actually support range requests...
--Kevin
Kevin,
I will need to check that assertion out. My web server does support range requests though. I can serve up MP4s, etc. to multiple clients that use range request headers. I will need to actually set a breakpoint to see if that's what's happening. I'm pretty sure it's not though -- I thought I saw it re-requesting the entire file. But the range request mention does bring up and interesting thing I've noticed about the way the software handles MP4 playback (muddying the topic a bit here). It appears as if it sends a request for the file just to get it's length, and then open ended byte range requests for other data. So my issue/concerns/questions are:
1. Why not use HEAD request to get the size of the file? Cancelling the request causes an exception (in my server) which needs to be handled and may hurt overall performance.
2. Why not specify the full range when sending byte requests? If I playback the file via Chrome or pretty much any other "smart" web client, they use "bytes start-end". The Roku will ask for "bytes start-" and then close the connection while my server is still responding. According to the spec (I think), leaving it open means you're requesting from that position to the end of the file. Once again, this causes an exception because of the socket/connection being closed prematurely (in my server) which needs to be handled and may hurt overall performance. Speaking specifically about Chrome -- it will request the first kilobyte (presumably to read ftype and find out how big mdat is) and then jumps to moov and downloads whatever it needs.
Not trying to be a pain or complain -- I'm just wondering if you've heard this feedback before. And if so, is there a reason it works the way it does.
EDIT: You know, I realized I might be wrong about point #1. Is the Roku basically doing the same thing as Chrome? That is, in the first request are you reading ftype and mdat so that you can get to moov? If so, then a range end would still be a "nice to have".
Thanks,
RT