Deux threads en même temps MediaDataSouce
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:
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:
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.