This question has been asked quite a few times on StackOverflow and I would like to get an understanding of the concepts and process rather than directly solve a problem. I found the following post where the explanation was nicely detailed but have some follow up questions which I hope someone can elaborate on.
The following extract is what I am referring my questions to:
This is however a lot of additional code in your servlet which requires a well understanding of the HTTP Range specification. Usually the servletcontainer's (Tomcat, JBoss AS, Glassfish, etc) own default servlet already supports this out the box. So if there's a way to publish the media folder into the web by standard means, so that you don't need to homegrow a servlet for this, then I'd go on this route.
Here the author explains that a lot of servletcontainers (servlets/webservers I assume) handle the range request specification by returning the specific range request of a video stream response. The software I am working on delivers a static video file stream to a servlet that plays back the video in a Chrome pop-up window. I am reading the video into an inputstream and deliver it as the httpresponse to the request and add the relevant headers like (Content-Range
, Content-Length
, etc.) which is all done on the webserver or dataserver end. The response is returned to a servlet.
Now I am still not sure if I understand this correctly or explained the setup above that it makes sense, but it does work right now as I can see the video playing, am able to seek back and forward and can see the browser debugger where the requests are made back for the next range of bytes.
Am I correct then that the servlet does all the byte range work and I don't have to explicitly rewrite code to only send certain byte ranges in the response? I ask this in hopes of a serious response, because my supervisor insists I need to send the specific byte ranges. My argument was that if this works fine in Firefox, why would I need to rewrite the code completely to render it in Chrome. It only fails in Chrome with large video sizes where after playing most of the video it gives an EofException
which my understanding is related to jetty settings and also another error related to a mismatch in expected length of the audio which I send as well.
But back to my question on my interpretation of the way this works; this is someone with 20+ years experience so I have no clue what I am talking about and need to verify if my understanding is correct.
Best Answer
The client and server share responsibility if you're using HTTP requests for partial content:
References
adrianwalker.org: HTML5 Video Pseudostreaming with Java 7
Java Code Examples org.apache.http.HttpStatus
The BalusC Code: FileServlet supporting resume and caching and GZIP