retrotom,
I just went through a tcpdump I captured that used an Apache server to serve the file (so any issues the Python server I've been using had with range requests were irrelevant). This was from a file that had the moov data at the end, which also demonstrates why you should put it at the beginning, although I'd have to analyze the traffic for a file with the moov data at the beginning to see if all the requests still occur.
Request for the whole file - about 70k was returned before the transfer was stopped
Request for the whole file - about 50k was returned before the transfer was stopped
Open-ended range request starting at offset 28 - about 50k was returned before the transfer was stopped
Open-ended range request starting at offset 160 - about 50k was returned before the transfer was stopped
Open-ended range request starting about 20k before the end of the file - although the entire data was sent, Roku still responds with RST
29 more requests near the end of the file for data it should already have!!! - all but the last ended with RST
Open-ended range request starting at offset 595 - returns the rest of the file
This file was only about 2MB, so it would easily fit within the RAM on the box.
Another thing, I have yet to see anything other than open-ended range requests and I have to believe they are the only kind used since the Python server I've been using would have crashed for anything else. I'm curious if you've seen a range request with both first and last bytes specified.
The problem with the Python server turned out to be that it was returning a status of 200 instead of 206 for range requests. It also wasn't setting the headers like Content-Range, but it was fixing the status that made everything work under 2.8.
-JT
Roku Community Streaming Expert
Help others find this answer and click "Accept as Solution."
If you appreciate my answer, maybe give me a Kudo.
I am not a Roku employee.