I'm using nanohttpd on Android to serve content to my WebView (The ContentProvider approach was broken in KitKat version, THANKS SO MUCH GOOGLE !!!), my issue comes when I try to send a MP4 file as response, when the fisrt request comes a return the following as response :
byte[] loData = [VIDEO_BYTES_IN MEMORY];
ByteArrayInputStream loBAIS = new ByteArrayInputStream(loData);
loResponse = new Response(Response.Status.OK, loMIME, loBAIS);
loResponse.addHeader("Content-Type", loMIME); // "video/mp4"
loResponse.addHeader("Content-Length", "" + loLength); // 21784780 bytes in total <-- NOTICE THIS !!!
loResponse.addHeader("Accept-Ranges", "bytes");
loResponse.addHeader("ETag", loETag);
When the second request comes, the header looks like this :
Host: 127.0.0.1:8080
Connection: keep-alive
User-Agent: stagefright/1.2 (Linux;Android 4.4.4)
Accept-Encoding: gzip,deflate
Range: bytes=21389346-
Now here the issue is that the range from the second request from the client is invalid as far as I can tell. Why I'm not receiving a range like :
Range: bytes=0-4999
After this, I received one more request as the second one, but I never get the "Starter" one with the range starting at 0. Anybody have a clue, comment, fix, path, workaround about this behavior?
More info :
First request, when page is loading :
Host: 127.0.0.1:8080
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Linux; Android 4.4.4; GT-N5110 Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Safari/537.36
Accept: */*
Referer: http://127.0.0.1:8080/html/index.html
Accept-Encoding: gzip,deflate
Accept-Language: es-US,en-US;q=0.8
X-Requested-With: com.myapp.browser
Second request, page is still loading :
Host: 127.0.0.1:8080
Connection: keep-alive
User-Agent: stagefright/1.2 (Linux;Android 4.4.4)
Accept-Encoding: gzip,deflate
Third request, page is still loading, the Range header appears :
Host: 127.0.0.1:8080
Connection: keep-alive
User-Agent: stagefright/1.2 (Linux;Android 4.4.4)
Accept-Encoding: gzip,deflate
Range: bytes=21389346-
Once the page is loaded, if I try to play the video, the following request are get.
First request :
Host: 127.0.0.1:8080
Connection: keep-alive
User-Agent: stagefright/1.2 (Linux;Android 4.4.4)
Accept-Encoding: gzip,deflate
Second request :
Host: 127.0.0.1:8080
Connection: keep-alive
User-Agent: stagefright/1.2 (Linux;Android 4.4.4)
Accept-Encoding: gzip,deflate
Third request :
Host: 127.0.0.1:8080
Connection: keep-alive
User-Agent: stagefright/1.2 (Linux;Android 4.4.4)
Accept-Encoding: gzip,deflate
Range: bytes=21389346-
Fourth (and last) request :
Host: 127.0.0.1:8080
Connection: keep-alive
User-Agent: stagefright/1.2 (Linux;Android 4.4.4)
Accept-Encoding: gzip,deflate
Range: bytes=21389346-
After this, the audio can be heard but not video, logcat shows the following errors :
09-16 13:34:41.565 2036-2702/com.myapp.browser W/System.err﹕ java.net.SocketException: sendto failed: ECONNRESET (Connection reset by peer)
09-16 13:34:41.570 2036-2702/com.myapp.browser W/System.err﹕ at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:499)
09-16 13:34:41.575 2036-2702/com.myapp.browser W/System.err﹕ at libcore.io.IoBridge.sendto(IoBridge.java:468)
09-16 13:34:41.575 2036-2702/com.myapp.browser W/System.err﹕ at java.net.PlainSocketImpl.write(PlainSocketImpl.java:508)
09-16 13:34:41.575 2036-2702/com.myapp.browser W/System.err﹕ at java.net.PlainSocketImpl.access$100(PlainSocketImpl.java:46)
09-16 13:34:41.580 2036-2702/com.myapp.browser W/System.err﹕ at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:270)
09-16 13:34:41.580 2036-2702/com.myapp.browser W/System.err﹕ at org.apache.http.impl.io.AbstractSessionOutputBuffer.write(AbstractSessionOutputBuffer.java:109)
09-16 13:34:41.585 2036-2702/com.myapp.browser W/System.err﹕ at org.apache.http.impl.io.IdentityOutputStream.write(IdentityOutputStream.java:86)
09-16 13:34:41.585 2036-2702/com.myapp.browser W/System.err﹕ at java.io.BufferedOutputStream.write(BufferedOutputStream.java:131)
09-16 13:34:41.590 2036-2702/com.myapp.browser W/System.err﹕ at com.myapp.browser.ContentServer.ContentHandler$3.writeTo(ContentHandler.java:165)
09-16 13:34:41.590 2036-2702/com.myapp.browser W/System.err﹕ at org.apache.http.entity.EntityTemplate.writeTo(EntityTemplate.java:76)
09-16 13:34:41.595 2036-2702/com.myapp.browser W/System.err﹕ at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:97)
09-16 13:34:41.595 2036-2702/com.myapp.browser W/System.err﹕ at org.apache.http.impl.AbstractHttpServerConnection.sendResponseEntity(AbstractHttpServerConnection.java:182)
09-16 13:34:41.600 2036-2702/com.myapp.browser W/System.err﹕ at org.apache.http.protocol.HttpService.handleRequest(HttpService.java:209)
09-16 13:34:41.600 2036-2702/com.myapp.browser W/System.err﹕ at com.myapp.browser.ContentServer.ContentServer.run(ContentServer.java:89)
09-16 13:34:41.605 2036-2702/com.myapp.browser W/System.err﹕ Caused by: libcore.io.ErrnoException: sendto failed: ECONNRESET (Connection reset by peer)
09-16 13:34:41.610 2036-2702/com.myapp.browser W/System.err﹕ at libcore.io.Posix.sendtoBytes(Native Method)
09-16 13:34:41.615 2036-2702/com.myapp.browser W/System.err﹕ at libcore.io.Posix.sendto(Posix.java:156)
09-16 13:34:41.615 2036-2702/com.myapp.browser W/System.err﹕ at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177)
09-16 13:34:41.620 2036-2702/com.myapp.browser W/System.err﹕ at libcore.io.IoBridge.sendto(IoBridge.java:466)
09-16 13:34:41.620 2036-2702/com.myapp.browser W/System.err﹕ ... 12 more
09-16 13:34:41.635 2036-2702/com.myapp.browser D/ContentHandler﹕ Handling content request. video/shared-culture.mp4
09-16 13:34:41.890 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5942)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUseProgram: program not linked
09-16 13:34:41.890 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniformMatrix4fv: wrong uniform function for type
09-16 13:34:41.890 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniform1iv: wrong uniform function for type
09-16 13:34:45.760 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5942)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUseProgram: program not linked
09-16 13:34:45.760 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniformMatrix4fv: wrong uniform function for type
09-16 13:34:45.760 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniform1iv: wrong uniform function for type
09-16 13:34:45.795 2036-2036/com.myapp.browser I/Choreographer﹕ Skipped 60 frames! The application may be doing too much work on its main thread.
09-16 13:34:46.020 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5942)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUseProgram: program not linked
09-16 13:34:46.020 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniformMatrix4fv: wrong uniform function for type
09-16 13:34:46.020 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniform1iv: wrong uniform function for type
09-16 13:34:46.105 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5942)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUseProgram: program not linked
09-16 13:34:46.105 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniformMatrix4fv: wrong uniform function for type
09-16 13:34:46.105 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniform1iv: wrong uniform function for type
09-16 13:34:46.200 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5942)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUseProgram: program not linked
09-16 13:34:46.200 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniformMatrix4fv: wrong uniform function for type
09-16 13:34:46.200 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniform1iv: wrong uniform function for type
09-16 13:34:46.380 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5942)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUseProgram: program not linked
09-16 13:34:46.380 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniformMatrix4fv: wrong uniform function for type
09-16 13:34:46.380 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniform1iv: wrong uniform function for type
09-16 13:34:46.630 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5942)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUseProgram: program not linked
09-16 13:34:46.630 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniformMatrix4fv: wrong uniform function for type
09-16 13:34:46.630 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniform1iv: wrong uniform function for type
09-16 13:34:46.900 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5942)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUseProgram: program not linked
09-16 13:34:46.900 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniformMatrix4fv: wrong uniform function for type
09-16 13:34:46.900 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniform1iv: wrong uniform function for type
09-16 13:34:47.155 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5942)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUseProgram: program not linked
09-16 13:34:47.155 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniformMatrix4fv: wrong uniform function for type
09-16 13:34:47.155 2036-2036/com.myapp.browser E/chromium﹕ [ERROR:gles2_cmd_decoder.cc(5718)] [.Compositor-Onscreen-0x45422790]GL ERROR :GL_INVALID_OPERATION : glUniform1iv: wrong uniform function for type
09-16 13:34:47.215 2036-2036/com.myapp.browser E/MediaPlayer﹕ Should have subtitle controller already set