IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Fluidifier la lecture Vidéo dans un TMediaPlayer


Sujet :

C++Builder

Vue hybride

kurul1 Fluidifier la lecture Vidéo... 03/05/2006, 15h20
bandit boy Salut, Je ne connait pas ce... 04/05/2006, 08h44
kurul1 C'est ce que je pense mais... 04/05/2006, 10h08
bandit boy Je ne connait pas le mode de... 04/05/2006, 10h42
kurul1 J'ai pas fait attention à ta... 04/05/2006, 11h27
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut Fluidifier la lecture Vidéo dans un TMediaPlayer
    Bonjour à tous

    Existe-t-il des méthodes pour fluidifier la lecture de vidéo avec le composant TMediaPlayer.

    J'ai recréé moi même une bare de bouton pour MediaPlayer me fournissant des fonctions que la bare classique ne me fournit pas, notamment, le retour rapide et la lecture arrière.

    Or je me suis rendu compte que en retour rapide et lecture arrière, cela saccade horriblement.

    Voici les méthodes déclancher par mes boutons RetourRapide et LectureArriere :

    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
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
     
     
    //---------------------------------------------------------------------------
    // Méthode déclancher lorsque l'on clique sur le bouton Retour Rapide du PanelMedia
    void __fastcall TGameForm::RetourRapideClick(TObject *Sender)
    {
            // booléen pour marquer le premier passage
            bool PremierPassage = true;
            // S'il y a lecture
            ArreterLectureMessageVideo();
            // Si l'on est déjà en mode Retour Rapide
            if(ModeMessageVideo == 2)
            {
                    // On marque que l'on est en pause
                    ModeMessageVideo = 5;
                    // On sélectionne le bouton Pause
                    Pause->Down = true;
            }
            // Sinon
            else
            {
                    // On se met en mode d'affichage Retour Rapide
                    ModeMessageVideo = 2;
                    MediaPlayer1->Frames = 1;
                    // On marque que l'on est en lecture dans un message vidéo
                    LectureMessageVideo = true;
                    while(LectureMessageVideo)
                    {
                            // On recule
                            MediaPlayer1->Back();
                            Application->ProcessMessages();
                            // Si l'on est dans le premier passage
                            if(PremierPassage)
                            {
                                    // Si le bouton Pause n'est pas activé
                                    if(!Pause->Enabled)
                                    {
                                            // On l'active
                                            Pause->Enabled = true;
                                    }
                                    // Si le bouton ImageParImageAvant est inactif
                                    if(!ImageParImageAvant->Enabled)
                                    {
                                            // On l'active
                                            ImageParImageAvant->Enabled = true;
                                    }
                                    // Si le bouton Lecture n'est pas activé
                                    if(!Lecture->Enabled)
                                    {
                                            // On l'active
                                            Lecture->Enabled = true;
                                    }
                                    // Si le bouton Avance rapide est inactif
                                    if(!AvanceRapide->Enabled)
                                    {
                                            // On l'active
                                            AvanceRapide->Enabled = true;
                                    }
                                    // Si le bouton Fin n'est pas activé
                                    if(!Fin->Enabled)
                                    {
                                            // On l'active
                                            Fin->Enabled = true;
                                    }
                                    // On marque que l'on n'est plus dans le premier passage
                                    PremierPassage = false;
                            }
                            // Si on a attent le début de la vidéo
                            if(MediaPlayer1->Position == 0)
                            {
                                    // On interropt la lecture
                                    ArreterLectureMessageVideo();
                                    // On désélectionne le bouton LectureArriere
                                    LectureArriere->Down = false;
                                    // On sélectionne le bouton Debut
                                    Debut->Down = true;
                                    // SI le bouton lecture arrière est actif
                                    if(LectureArriere->Enabled)
                                    {
                                            // On le désactive
                                            LectureArriere->Enabled = false;
                                    }
                                    // Si le bouton Image Par Image Arrière est actif
                                    if(ImageParImageArriere->Enabled)
                                    {
                                            // On le désactive
                                            ImageParImageArriere->Enabled = false;
                                    }
                                    // Si le bouton Pause est actif
                                    if(Pause->Enabled)
                                    {
                                            // On le désactive
                                            Pause->Enabled = false;
                                    }
                                    // On désactive le bouton Retour Rapide
                                    RetourRapide->Enabled = false;
                            }
                    }
            }
    }
    //---------------------------------------------------------------------------
    // Méthode déclancher lorsque l'on clique sur le bouton Lecture Arrière du PanelMedia
    void __fastcall TGameForm::LectureArriereClick(TObject *Sender)
    {
            // booléen pour marquer que l'on est dans le premier passage
            bool PremierPassage;
            // timer
            TTimer *TimerMessageVideo = new TTimer(GameForm);
            // On définit l'intervalle pour le timer
            TimerMessageVideo->Interval = 25;
            // On définit la méthode que déclanche le timer
            TimerMessageVideo->OnTimer = OnTimerMessageVideo;
            // S'il y a lecture
            ArreterLectureMessageVideo();
            // S'il on est déja en mode LectureArrière
            if(ModeMessageVideo == 4)
            {
                    // On marque que l'on passe en mode Pause
                    ModeMessageVideo = 5;
                    // On désélectionne le bouton LectureArriere
                    LectureArriere->Down = false;
                    // On sélectionne le bouton Pause
                    Pause->Down = true;
            }
            // Sinon on n'est pas en mode LectureArriere
            else
            {
                    // On se met en mode d'affichage Lecture Arriere
                    ModeMessageVideo = 4;
                    MediaPlayer1->Frames = 1;
                    // On marque que l'on est en lecture dans un message vidéo
                    LectureMessageVideo = true;
                    while(LectureMessageVideo)
                    {
                            // On recule
                            MediaPlayer1->Back();
                            // On se met en attente de lecture
                            AttenteMessageVideo = true;
                            // On active le timer
                            TimerMessageVideo->Enabled = true;
                            while(AttenteMessageVideo)
                            {
                                    Application->ProcessMessages();
                            }
                            // On désactive le timer
                            TimerMessageVideo->Enabled = false;
                            // Si l'on est dans le premier passage
                            if(PremierPassage)
                            {
                                    // Si le bouton Pause n'est pas activé
                                    if(!Pause->Enabled)
                                    {
                                            // On l'active
                                            Pause->Enabled = true;
                                    }
                                    // Si le bouton ImageParImageAvant est inactif
                                    if(!ImageParImageAvant->Enabled)
                                    {
                                            // On l'active
                                            ImageParImageAvant->Enabled = true;
                                    }
                                    // Si le bouton Lecture n'est pas activé
                                    if(!Lecture->Enabled)
                                    {
                                            // On l'active
                                            Lecture->Enabled = true;
                                    }
                                    // Si le bouton Avance rapide est inactif
                                    if(!AvanceRapide->Enabled)
                                    {
                                            // On l'active
                                            AvanceRapide->Enabled = true;
                                    }
                                    // Si le bouton Fin n'est pas activé
                                    if(!Fin->Enabled)
                                    {
                                            // On l'active
                                            Fin->Enabled = true;
                                    }
                                    // On marque que l'on est plus dans le premier passage
                                    PremierPassage = false;
                            }
                            // Si on a attent la fin de la vidéo
                            if(MediaPlayer1->Position == 0)
                            {
                                    // On interrompt la lecture
                                    ArreterLectureMessageVideo();
                                    // On sélectionne le bouton Début
                                    Debut->Down = true;
                                    // SI le bouton Retour Rapide est actif
                                    if(RetourRapide->Enabled)
                                    {
                                            // On le désactive
                                            RetourRapide->Enabled = false;
                                    }
                                    // Si le bouton Image Par Image Arrière est actif
                                    if(ImageParImageArriere->Enabled)
                                    {
                                            // On le désactive
                                            ImageParImageArriere->Enabled = false;
                                    }
                                    // Si le bouton Pause est actif
                                    if(Pause->Enabled)
                                    {
                                            // On le désactive
                                            Pause->Enabled = false;
                                    }
                                    // On désactive le bouton Lecture Arriere
                                    LectureArriere->Enabled = false;
                            }
                    }
            }
    }
    //---------------------------------------------------------------------------
    Merci d'avance pour votre aide

  2. #2
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Salut,
    Je ne connait pas ce composant pour ne l'avoir jamais utilisé, mais si tu joue sur ton échantillonnage (ton timer TimerMessageVideo) tu devrais pouvoir régler ce "saccadement".
    As tu essayés ca?

  3. #3
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    C'est ce que je pense mais étant donné que je n'arrive pas à connaitre la fréquence d'échantillonnage de la vidéo, je ne peut donc pas le réglé en conséquence. De plus, je me suis aperçu que pour une même vidéo (compressé et non compressé), quand elle n'est pas compressé, je n'ai pas de saccade).

    De plus et c'est ce qui n'étonne, pour la fonction RetourRapide, c'est rigoureusement la même fonction que AvanceRapide (sauf qu'au lieu d'avancé, on recule) et la fonction AvanceRapide fonctionne correctement alors que RetourRapide non.

  4. #4
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    Je ne connait pas le mode de chargement de médiaplayer, mais peut être que pour un fonctionnement normal, il doit charger dans un buffer les images suivantes (dans le sens de lecture classique). Ce qui fait que pour une avance rapide, tu saccaderas moins que pour un retour, les images étant plus rapidement chargé du buffer à la vidéo.
    Cela pourrait expliquer le problème, quant à le résoudre ....
    si ta vidéo est compressé, le taux d'image par seconde est plus faible que pour une vidéo non compressé, je pense.
    Tu avais déjà mis un post à ce sujet?
    Il me semble t'avoir répondu pour la fréquence d'échantillonnage?
    N'existe t-il pas un secteur dans le fichier comprenant cette fréquence d'échantillonnage, sinon comment fais médiaplayer?

  5. #5
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    J'ai pas fait attention à ta réponse, je vais aller voir ça. Merci

  6. #6
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Est-ce que tu saurais comment récupérer cette fréquence car je ne sais pas comment faire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lecture vidéo couche alpha dans flash
    Par LoGGi dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 10/11/2014, 09h32
  2. Lecture d'un flux vidéo dans une winform
    Par Nicox11 dans le forum C#
    Réponses: 1
    Dernier message: 23/04/2014, 15h00
  3. lecture vidéo dans PP sur un autre PC
    Par Fener dans le forum Powerpoint
    Réponses: 4
    Dernier message: 14/06/2010, 10h46
  4. Problème de lecture vidéo dans PPS
    Par Claude_Azoulai dans le forum Powerpoint
    Réponses: 1
    Dernier message: 15/07/2009, 18h19
  5. Lecture Arrière dans un TMediaPlayer
    Par kurul1 dans le forum C++Builder
    Réponses: 1
    Dernier message: 28/04/2006, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo