Bonsoir tout le monde,

Introduction


J'ai un Serveur en Java qui envoi une vidéo paquet par paquet à un client Android.

Côté Android Client, j'ai une classe DownloadVideo qui me permet de réceptionner une vidéo et un Thread qui me permet de lancer la video avec le media player.


Problème


Quand je lance la vidéo au bout de 5s, le média player lit uniquement les paquets reçus au moment du lancement de la vidéo.
Seulement, les paquets continus d'être reçus... et j'aimerais que le média player puisse continuer sa lecture pour arriver à la fin de la vidéo.

Code

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    handler = new Handler();
 
 
 
    vidSurface = (SurfaceView) findViewById(R.id.surfView);
 
 
    ConcurrentLinkedDeque<OutputStream[]> list = new ConcurrentLinkedDeque<>();
 
 
    Connexion connexion = new Connexion(list);
    connexion.execute();
 
    new Thread(new Task2(list)).start();
 
 
 
}
 
@Override
public void surfaceCreated(SurfaceHolder holder) {
    try {
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setDisplay(vidHolder);
        mediaPlayer.setDataSource(vidAddress);
        mediaPlayer.prepare();
        mediaPlayer.setOnPreparedListener(this);
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    }
    catch(Exception e){
        e.printStackTrace();
    }
}
 
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
 
}
 
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
 
}
 
@Override
public void onPrepared(MediaPlayer mp) {
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
 
        }
    });
    mediaPlayer.start();
}
 
 
private class Connexion extends AsyncTask<Void, Void, Void> {
 
    private ConcurrentLinkedDeque<OutputStream[]> list;
 
    public Connexion(ConcurrentLinkedDeque<OutputStream[]> list) {
        this.list = list;
    }
    @Override
    protected Void doInBackground(Void... params) {
        ConcurrentLinkedDeque<OutputStream[]> list = new ConcurrentLinkedDeque<>();
 
        DownloadVideo dv = new DownloadVideo(list);
        dv.connexion();
 
        return null;
    }
}
 
public void launchVideo() {
    try {
        Thread.sleep(5000);
 
            vidHolder = vidSurface.getHolder();
            vidHolder.addCallback(this);
 
    } catch (ActivityNotFoundException e2) {
        //  displayToast(getResources().getString(R.string.error_unknownMX)); // Erreur, on affiche un message à l'utilisateur
        // Log.e( "Error", getResources().getString(R.string.error_unknownMX));
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
 
// Thread to read video
class Task2 implements Runnable {
    private ConcurrentLinkedDeque<OutputStream[]> list;
 
    public Task2(ConcurrentLinkedDeque<OutputStream[]> list) {
        this.list = list;
    }
 
    @Override
    public void run() {
        handler.post(new Runnable() {
            @Override
            public void run() {
                Log.d("1", "Thread2");
                launchVideo();
            }
        });
    }
}
Merci à vous.