2

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
  • Then please post also headers of first and third request. – greenapps Sep 16 '14 at 17:46
  • You posted the log of your app with the WebView. There are all kind of terrible errors. Even linker errors. Your nanohttpd is a differend app i suppose on the same device? No logs from nanohttpd? – greenapps Sep 16 '14 at 18:51
  • You're right, the log isn't from a nanohttpd server, I just tried my own server implementation and it worked (kind of). But I noticed that the requests are the same, even the headers are exactly the same in both server implementations – Nobby_Nobody Sep 16 '14 at 19:20
  • 1
    @c4r1o5 How did you fix it ?...can you please tell..i am facing the same problem – saurav Oct 03 '14 at 11:41

0 Answers0