Threads dans streaming video
RayanDin
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
BunoCS Messages postés 15952 Date d'inscription Statut Modérateur Dernière intervention -
BunoCS Messages postés 15952 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
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
Merci à vous.
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
@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.
A voir également:
- Threads dans streaming video
- Montage video windows - Guide
- Streaming - Guide
- Insérer vidéo dans powerpoint - Guide
- Comment télécharger une vidéo youtube - Guide
- Fast streaming - Accueil - Guide TV et vidéo
3 réponses
Hello,
Alors d'abord, ce n'est pas du tout mon domaine...mais quelques petites choses me "choquent".
1. Tu lances la Task2 avec une liste en paramètre mais tu ne t'en sers pas?
2. Tu ré-implémente le principe du streaming? Pourquoi ne pas utiliser du tout prêt? https://developer.android.com/guide/topics/media/mediaplayer.html
Alors d'abord, ce n'est pas du tout mon domaine...mais quelques petites choses me "choquent".
1. Tu lances la Task2 avec une liste en paramètre mais tu ne t'en sers pas?
2. Tu ré-implémente le principe du streaming? Pourquoi ne pas utiliser du tout prêt? https://developer.android.com/guide/topics/media/mediaplayer.html