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
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 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){ } }
Merci à vous.
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(); }
Partager