Appli Double Ecran vidéo
Zyrol
Membre
Bonjour,
Pour ceux qui ne sont pas au courant de mon projet, je suis en train de réaliser une appli pour un usage sportif avec 2 écran vidéo en lecture parallèle.
Je viens de m'occuper du ralenti, il marche tres bien. Mais il y a quelque chose d'étrange...
J'utilise 4 boutons radio pour sélectionner la vitesse du ralenti (100% (pas de ralenti), 75%, 50%, 25%). Admettons, je lis une vidéo à vitesse normale (100 %), je clique sur une des 3 vitesses (75,50,25) la vidéo ralenti immédiatement.par contre quand je suis à une vitesse lente et que je veux passer à une vitesse supérieure, je suis obligé de cliquer 2 fois sur le bouton pour que ça fasse effet. c'est pourtant la même procédure qui s'exécute dans les 2 cas (montée et descente).
Voici le code de cette fameuse procédure, si quelqu'un à une idée...
{
//appel de procedure SetRalenti qui controle quel ralenti a été selectionné
[self SetRalenti:(id)sender];
[movieView2 setRate:ralenti];
[movieView1 setRate:ralenti];
[movieView2 start:self];
[movieView1 start:self];
}
merci
Pour ceux qui ne sont pas au courant de mon projet, je suis en train de réaliser une appli pour un usage sportif avec 2 écran vidéo en lecture parallèle.
Je viens de m'occuper du ralenti, il marche tres bien. Mais il y a quelque chose d'étrange...
J'utilise 4 boutons radio pour sélectionner la vitesse du ralenti (100% (pas de ralenti), 75%, 50%, 25%). Admettons, je lis une vidéo à vitesse normale (100 %), je clique sur une des 3 vitesses (75,50,25) la vidéo ralenti immédiatement.par contre quand je suis à une vitesse lente et que je veux passer à une vitesse supérieure, je suis obligé de cliquer 2 fois sur le bouton pour que ça fasse effet. c'est pourtant la même procédure qui s'exécute dans les 2 cas (montée et descente).
Voici le code de cette fameuse procédure, si quelqu'un à une idée...
{
//appel de procedure SetRalenti qui controle quel ralenti a été selectionné
[self SetRalenti:(id)sender];
[movieView2 setRate:ralenti];
[movieView1 setRate:ralenti];
[movieView2 start:self];
[movieView1 start:self];
}
merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
tu peux poster ton .h en entier ?
je suppose que tes boutons radio sont groupés dans une nsmatrix, et que l'action de cette nsmatrix déclenche le ralentissement ?
essaye comme ça:
explications:
on appelle miseajour après un léger délai d'attente, en tout cas après que actionMatrix soit terminé... comme ça on laisse la matrix finir de mettre à jour ses boutons après un click
(je n'ai pas d'explication rationnelle, mais c'est comme ça que j'avais résolu un pb où l'interrogation du bouton cliqué ne me renvoyait pas toujours le bon...)
Je suis devant un autre problème majeur pour la lecture simultanée :
Voici le code utilisé :
{
Movie movie1=[[movieView1 movie] QTMovie];
Movie movie2=[[movieView2 movie] QTMovie];
OSErr err=PrerollMovie(movie1,GetMovieTime(movie1,NULL),GetMoviePreferredRate(movie1));
err=PrerollMovie(movie2,GetMovieTime(movie2,NULL),GetMoviePreferredRate(movie2));
//appel de procedure SetRalenti
[self SetRalenti:(id)sender];
[movieView2 setRate:ralenti];
[movieView1 setRate:ralenti];
[movieView1 start:self];
[movieView2 start:self];
}
La procédure SetRalenti permet de définir la vitesse de ralenti des 2 vidéos. Mon probleme est que les 2 vidéos de démarre pas exactement en meme temps :
Test d'aprés un flux .dv d'une caméra numérique :
Vitesse normale : la vidéo 2 est en retard de 8 images par rapport à la vidéo 1
ralenti de 25% : 5
50% : 3
75% : Aucun décalage.
Donc plus la vidéo est ralentie, moins il y a de décalage.
Comment réduire cet écart ?
Une solution possible serait d'utiliser un timer pour vérifier la synchro à intervalle régulier et de faire une rectification si un décalage est constasté.
pour cela il faut connaà®tre la position des deux films:
Pour programmer un timer c'est ICI
Mais avant de me lancer dans les timer, j'ai une question à te poser :
je vais ensuite implementer une fonction pour définir un point d'entrée différent sur les 2 vidéos afin de lancer la lecture à partir du point de lecture des 2 vidéos. Est ce que le timer ne gênera pas ce fonctionnement ?
mais étant débutant dans la programmation sous objective-c, je n'arrive pas à déclarer et utiliser ta première fonction getTime.
Peux tu m'éclairer un peu ?
merci
.h:
de même pour le .m:
Donc si j'ai bien compris ça ne lui plait pas parce que elle est en dehors du @end.
comment faire ?
//.h
/* Controlleur */
#import <Cocoa/Cocoa.h>
@interface Controlleur : NSObject
{
IBOutlet id movieView1;
IBOutlet id movieView2;
IBOutlet id progress1;
IBOutlet id progress2;
IBOutlet id textFile1;
IBOutlet id textFile2;
IBOutlet id RAL_100;
IBOutlet id RAL_75;
IBOutlet id RAL_50;
IBOutlet id RAL_25;
IBOutlet id bar1;
IBOutlet id dureeMovie1;
IBOutlet id dureeMovie2;
}
- (IBAction)openMovie1:(id)sender;
- (IBAction)openMovie2:(id)sender;
- (IBAction)playMovie1:(id)sender;
- (IBAction)playMovie2:(id)sender;
- (IBAction)pauseMovie1:(id)sender;
- (IBAction)pauseMovie2:(id)sender;
- (IBAction)dualPlay:(id)sender;
- (IBAction)dualPause:(id)sender;
- (IBAction)pushRalenti:(id)sender;
- (void)SetRalenti:(id)sender;
@end
//Fonction C
- (long) getTime(Movie movie);
- (void) setTime(Movie movie,long t);
long getTime(Movie movie);
void setTime(Movie movie,long t);
-(long) c'est en objC
J'ai encore bataillé pendant un certain temps, mais je n'avais pas inclut la bibliothèque QuicKTime dans le .h (uniquement dans le .m)
D'ailleurs, si je ne me trompe pas, je n'ai qu'à l'inclure dans le .h, non ? je peux l'enlever du .m ?
J'ai fais des tests, et le retard se crée uniquement au moment ou on appuyait sur le bouton de mise en lecture double.
donc j'ai plutôt pris l'option de tester juste après la mise en double lecture si il y avait un décalage. si oui il est immédiatement rattrapé.
Les vidéos sont synchronisées sans probleme maintenant.
Merci à tous pour m'avoir aidé à clore le "chapitre" de la synchro !
Je n'étais pas sûr que ça marche. D'ailleurs je suis pas sûr de grand chose dans cette histoire, c'est plus du pifomètre ;D
Donc merci encore
je pensais que ça serait plus dur à faire
Je vais essayer d'améliorer l'appli en ajoutant un module de chronométrage qui va se déclencher au moment de la lecture. Et aussi une amélioration générale :
-Indication quand un point d'entrée est défini.
-Amélioration des menus
-Esthétique
-Glisser-déposer (pour l'instant ça marche mais il n'y a pas le petit plus qui s'affiche au moment du déplacement)
Voilà ...