Bonsoir tout le monde,

Je me lance dans les MediaDataSource. Pour l'instant, j'ai un thread qui récupère des paquets (vidéo) d'un Serveur Java et écrit dans un buffer et un autre que je veux créer qui est le thread qui permet de lire les paquets reçus en même temps dans le buffer. Mon thread de lecture (dans le on Create() se lance uniquement quand tous les paquets sont reçus.

MainActivity
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        handler = new Handler();
 
        surfaceView = (SurfaceView)findViewById(R.id.surface);
 
        //Le thread en question
        Thread t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                Log.d("T1","Starting T1");
                SurfaceHolder holder = surfaceView.getHolder();
                holder.addCallback(MainActivity.this);
            }
        });
        t1.start();
 
        mp = new MediaPlayer();
        isPaused = false;
    }
 
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        try {
            mp.setDisplay(holder);
            if(!isPaused) {
                VideoDataSource dataSource = new VideoDataSource();
                dataSource.downloadVideo(new VideoDownloadListener() {
                    @Override
                    public void onVideoDownloaded() {
                        mp.prepareAsync();
                    }
 
                    @Override
                    public void onVideoDownloadError(Exception e) {
                        Log.d("MainActivity", e.toString());
                    }
                });
                mp.setDataSource(dataSource);
                mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mp) {
                        mp.start();
                    }
                });
            }else {
                mp.start();
            }
            isPaused = false;
        } catch (IllegalStateException is){
 
        }
    }
VideoDataSource

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
//Thread reception vidéo
Runnable downloadVideoRunnable = new Runnable() {
        @Override
        public void run() {
            try{
 
                client = new Socket(IP_SERVER, PORT_SERVER); // Creating the server socket.
 
                if (client != null) {
 
                    String str = "pd";
                    PrintWriter out1 = new PrintWriter(new BufferedWriter(
                            new OutputStreamWriter(client.getOutputStream())),
                            true);
                    out1.println(str);
                    // Receive video
                    InputStream in = client.getInputStream();
                    OutputStream out[] = new OutputStream[1];
                    // Store on device
                    videoBuffer = new byte[1024];
                    out[0] = baos;
 
 
                    int n;
                    while ((n = in.read(videoBuffer)) != -1) {
                        out[0].write(videoBuffer, 0, n);
                        //Adding last in the queue
                        Log.d("byte" , "" + out);
 
                        try {
                            Thread.sleep(1);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
 
                    in.close();
 
                    baos.flush();
 
                    videoBuffer = baos.toByteArray();
 
                    baos.close();
                    client.close();
                    listener.onVideoDownloaded();
                } else {
                    System.out.println("Pas de serveur lancé sur le port " + client.getLocalPort() + " ...");
                }
            }catch (Exception e){
                listener.onVideoDownloadError(e);
            }
        }
    };
 
 
 
    public void downloadVideo(VideoDownloadListener videoDownloadListener){
        listener = videoDownloadListener;
        Thread downloadThread = new Thread(downloadVideoRunnable);
        downloadThread.start();
 
    }
Merci à vous.