Autore Topic: Riprodurre video da cartella condivisa in lan  (Letto 722 volte)

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Riprodurre video da cartella condivisa in lan
« il: 17 Gennaio 2016, 17:08:15 CET »
0
Scusate tanto ma per riprodurre l' uriPath da una cartella condivisa perchè con la seconda e la terza mi da errore impossibile riprodurre il video
Codice: [Seleziona]
     

          VideoView v=(VideoView) findViewById(R.id.videoView);
     // 1)  String uriPath = "storage/extSdCard/DCIM/Camera/20151231_225537.mp4"; questo è ok
 
    //  2) String uriPath = "\\192.168.0.1\\video\\1408.mp4"; ko
   //   3) String uriPath ="file://192.168.0.1/Video/1408.mp4"; ko
 
      v.setVideoPath(uriPath);
      v.requestFocus();
      v.start();

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Riprodurre video da cartella condivisa in lan
« Risposta #1 il: 19 Gennaio 2016, 12:45:18 CET »
0
La 2 è un percorso di un protocollo proprietario usato da una ditta concorrente a Google con sede a Seattle, non è sopportato ufficialmente dal API di Android e non credo che lo sarà mai. Il terzo è palesemente sbagliato.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Riprodurre video da cartella condivisa in lan
« Risposta #2 il: 20 Gennaio 2016, 10:56:07 CET »
0
ciao iceweasel,
ok per la preciszione, hai qualche suggerimento?
Leggendo in rete ho capito che bisogna usare NanoHttpd, anche se stò provondalo il video non viene riprodotto.
Questo è il codice dell' activity chiaramente all'interno del progetto c'è anche NanoHTTPD.java:
Codice: [Seleziona]
package com.example.videoBuffer2;

import android.app.Activity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.VideoView;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.*;
import java.util.Map;

public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    Button btn;
    VideoView videoView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn = (Button) findViewById(R.id.button);
        videoView = (VideoView) findViewById(R.id.videoView);
        MediaController mediaController = new
                MediaController(this);
        videoView.setMediaController(mediaController);


        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                startServer(1);


            }
        });
    }


    public void startServer(long fileLength) {

        final VideoStreamServer server = new VideoStreamServer(9090,fileLength);
        try {
            server.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
        videoView.setVideoURI(Uri.parse("http://127.0.0.1:9090/1.mp4"));
        videoView.requestFocus();


        videoView.start();
    }


    public class VideoStreamServer extends NanoHTTPD
    {

        long fileLength;
        public VideoStreamServer(int port, long fileLength) {
            super(port);
            this.fileLength = fileLength;
        }

        private Response getPartialResponse(String mimeType, String rangeHeader) throws IOException {
            File file = new File("storage/extSdCard","1.mp4");
            String rangeValue = rangeHeader.trim().substring("bytes=".length());
            long fileLength = file.length();
            long start, end;
            if (rangeValue.startsWith("-")) {
                end = fileLength - 1;
                start = fileLength - 1
                        - Long.parseLong(rangeValue.substring("-".length()));
            } else {
                String[] range = rangeValue.split("-");
                start = Long.parseLong(range[0]);
                end = range.length > 1 ? Long.parseLong(range[1])
                        : fileLength - 1;
            }
            if (end > fileLength - 1) {
                end = fileLength - 1;
            }
            if (start <= end) {
                long contentLength = end - start + 1;
                //cleanupStreams();
                FileInputStream fileInputStream = new FileInputStream(file);
                //noinspection ResultOfMethodCallIgnored
                fileInputStream.skip(start);
                Response response = new Response(Response.Status.PARTIAL_CONTENT, mimeType, fileInputStream);
                response.addHeader("Content-Length", contentLength + "");
                response.addHeader("Content-Range", "bytes " + start + "-" + end + "/" + fileLength);
                Log.e("SERVER_PARTIAL", "bytes " + start + "-" + end + "/" + fileLength);
                response.addHeader("Content-Type", mimeType);
                return response;
            } else {
                return new Response(Response.Status.RANGE_NOT_SATISFIABLE, "video/mp4", rangeHeader);
            }
        }

        @Override
        public Response serve(String uri, Method method, Map<String, String> headers, Map<String, String> parms, Map<String, String> files) {

            //range=bytes=619814-
            long range;
            int constantLength = 307200 ;
            long fileLength=0;
            boolean isLastPart=false;
            String rangeHeaderString="";

            if (headers.containsKey("range"))
            {
                String contentRange = headers.get("range");
                range = Integer.parseInt(contentRange.substring(contentRange.indexOf("=") + 1, contentRange.indexOf("-")));

            }
            else
            {
                range = 0;

            }



            byte[] buffer;


            long bufLength=0;


            try {

                RandomAccessFile ff =new RandomAccessFile(new File("storage/extSdCard","1.mp4"),"rw" );
                long remainingChunk = ff.length() - range; //remaining
                fileLength = ff.length();
                if (remainingChunk < constantLength){
                    bufLength= remainingChunk; //means last part
                    isLastPart=true;

                }

                else
                    bufLength = constantLength;
                if (range !=0)
                    ff.seek(range);
                buffer= new byte[(int)bufLength];


                ff.read(buffer);
                rangeHeaderString = String.format("bytes=%s-%s",range,range+bufLength);


            } catch (FileNotFoundException e) {
                e.printStackTrace();
                buffer = new byte[0];
            } catch (IOException e) {
                e.printStackTrace();
                buffer = new byte[0];
            }
            Response response;
//               if(!isLastPart)
                response = new Response(Response.Status.PARTIAL_CONTENT,"video/mp4",new ByteArrayInputStream(buffer));
//            else
//                   response = new Response(Response.Status.OK,"video/mp4",new ByteArrayInputStream(buffer));

            response.addHeader("Content-Length",(fileLength)+"");
            response.addHeader("Content-Range",String.format("bytes %s-%s/%s", range,(range+bufLength),fileLength));
            Log.e("SERVER", "Inside server sent " + String.format("bytes %s-%s/%s", range, (range + bufLength), fileLength));
            return response;
//            try {
//                Response res =getPartialResponse("video/mp4",rangeHeaderString);
//                return res;
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//            return new Response(Response.Status.NOT_FOUND,"","");

        }
    }


}


« Ultima modifica: 20 Gennaio 2016, 11:08:23 CET da x69asterix2 »

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Riprodurre video da cartella condivisa in lan
« Risposta #3 il: 21 Gennaio 2016, 14:16:36 CET »
0
Non riesco a capire la domanda è soprattutto il legame con la prima richiesta, NanoHTTPD è un server HTTP leggero, nulla di più.

Inviato dal mio Nexus 5 utilizzando Tapatalk

adb logcat | tee /tmp/logcat | grep TAG

Offline x69asterix2

  • Utente junior
  • **
  • Post: 127
  • Respect: +1
    • Mostra profilo
Re:Riprodurre video da cartella condivisa in lan
« Risposta #4 il: 21 Gennaio 2016, 15:24:19 CET »
0
Non riesco a capire la domanda è soprattutto il legame con la prima richiesta, NanoHTTPD è un server HTTP leggero, nulla di più.

Inviato dal mio Nexus 5 utilizzando Tapatalk
Ciao,
Ok ero già passato alla seconda domanda.