2

내 응용 프로그램에서 웹 컨텐츠를 압축했습니다. 웹 컨텐츠에는 비디오가 삽입되어 있습니다.WebView 및 NanoHTTPD를 사용하는 동안 큰 비디오를 스트리밍 할 때 연결 재설정 예외가 발생합니다.

나는 안드로이드 웹보기를 통해 원고 내용을 보여줍니다. NanoHTTPD Server를 통해 콘텐츠를 제공합니다. Android 4.2.2 및 NanoHTTPD의 최신 버전

내 서버는 범위 요청을 통해 부분 콘텐츠 처리를 지원합니다. 이 오류는 초기 호출 자체, 즉 승인 범위 응답이 내 서버에서 전송 될 때 발생합니다.

Video as as ZipInputInflaterStream 내 서버에서 응답으로 보내집니다.

큰 크기의 비디오를 보려고 할 때마다이 스택 추적을 얻습니다.

10-03 14:48:28.097: E/NanoHTTPD(9454): java.net.SocketException: sendto failed: ECONNRESET (Connection reset by peer) 
10-03 14:48:28.097: E/NanoHTTPD(9454): at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:506) 
10-03 14:48:28.097: E/NanoHTTPD(9454): at libcore.io.IoBridge.sendto(IoBridge.java:475) 
10-03 14:48:28.097: E/NanoHTTPD(9454): at java.net.PlainSocketImpl.write(PlainSocketImpl.java:507) 
10-03 14:48:28.097: E/NanoHTTPD(9454): at java.net.PlainSocketImpl.access$100(PlainSocketImpl.java:46) 
10-03 14:48:28.097: E/NanoHTTPD(9454): at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:269) 
10-03 14:48:28.097: E/NanoHTTPD(9454): at test.http.server.NanoHTTPD$Response.sendAsFixedLength(NanoHTTPD.java:806) 
10-03 14:48:28.097: E/NanoHTTPD(9454): at test.http.server.NanoHTTPD$Response.send(NanoHTTPD.java:745) 
10-03 14:48:28.097: E/NanoHTTPD(9454): at test.http.server.NanoHTTPD$HTTPSession.execute(NanoHTTPD.java:1075) 
10-03 14:48:28.097: E/NanoHTTPD(9454): at test.http.server.NanoHTTPD$1$1.run(NanoHTTPD.java:211) 
10-03 14:48:28.097: E/NanoHTTPD(9454): at java.lang.Thread.run(Thread.java:856) 
10-03 14:48:28.097: E/NanoHTTPD(9454): Caused by: libcore.io.ErrnoException: sendto failed: ECONNRESET (Connection reset by peer) 
10-03 14:48:28.097: E/NanoHTTPD(9454): at libcore.io.Posix.sendtoBytes(Native Method) 
10-03 14:48:28.097: E/NanoHTTPD(9454): at libcore.io.Posix.sendto(Posix.java:151) 
10-03 14:48:28.097: E/NanoHTTPD(9454): at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177) 
10-03 14:48:28.097: E/NanoHTTPD(9454): at libcore.io.IoBridge.sendto(IoBridge.java:473) 
10-03 14:48:28.097: E/NanoHTTPD(9454): ... 8 more 

NanoHTTPD에서 클라이언트 소켓의 연결이 끊어지는 것 같습니다. 다음은

private void sendAsFixedLength(OutputStream outputStream, int pending) throws IOException 
    { 
     if (requestMethod != Method.HEAD && data != null) { 
      int BUFFER_SIZE = 16 * 1024; 
      byte[] buff = new byte[BUFFER_SIZE]; 
      while (pending > 0) { 
       int read = data.read(buff, 0, ((pending > BUFFER_SIZE) ? BUFFER_SIZE : pending)); 
       if (read <= 0) { 
        break; 
       } 
       outputStream.write(buff, 0, read); //error thrown from here 
       pending -= read; 
      } 
     } 
    } 

outputStream.write 위의 스택 트레이스를 throw이 오류가 발생합니다 NanoHTTPD의 코드입니다.

예외 발생 후 큰 파일의 경우 Android 미디어 플레이어가 범위 요청을 보냅니다. 이 파일을 추출하고 FileInputStream 통해 콘텐츠를 보낼 때 작동합니다.

질문 : NanoHTTPD가 ZipInputInflaterStream을 더 오랜 시간 동안 읽을 수 있습니까? 클라이언트 소켓이 닫히는 이유를 읽었을지라도?

이 문제는 19MB와 같은 대형 비디오에서만 발생합니다. 11MB와 같은 작은 파일의 경우 작동합니다. Release-2.0.5 태그 스위치, 모든 것이 잘 작동 후

환호, Saurav는

답변

0

나는 같은 문제가 있습니다.