02 Oktober 2015

Video über http bekommen und abspielen auf einem Android Device (Chrome)

Broken Pipe Exceptions usw. ClientAbortException SocketException Situation: Webserver, der Videofiles ausliefern soll. Ein Android-Device macht mit Chrome einen HTTP-Request auf die Video-Resource. Am Server muss nun geschaut werden, ob im http-header ein "range"-Wert mitgeliefert wird. Der sieht kann dann so aussehen: range: bytes=23-344 oder aber auch range: bytes=3243- (siehe HTTP-Spezifikation). Die Grenzen sind Inklusiv-Werte. In beiden Fällen will der Client nicht das ganze Videofile in einem Happen, sondern wird für jeden Happen im header sagen, von welchem zu welchem byte ausgeliefert werden soll. Der zweite Range-Fall bedeutet, dass bei 3243 angefangen werden soll und das letzte byte auch das letzte byte der Datei ist. Nicht nur der Abschnitt des Videofiles muss in den outputstream des response, sondern es müssen auch die content-ranges in den header geschrieben werden: response.setHeader( "Content-range", bytes ${startInt}-${endInt}/" + Integer.toString(fileSize) ) Initial biete ich das Video aber als ganzes Stück im response, der Client wird dann Abort sagen, woraufhin eine ClientAbortException geworfen wird. Der Client gibt nicht auf, sondern wird dann anfangen seine ranges mitzuliefern.

Keine Kommentare: