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

Développement Web en Java Discussion :

Streaming de plusieurs isoFile


Sujet :

Développement Web en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 27
    Par défaut Streaming de plusieurs isoFile
    Bonjour à tous

    Tout d'abord le contexte:
    j'ai plusieurs fichier mp4 (h264) qui ont chacun une durée de 1 heure. Je souhaite les rendre accès en Streaming.
    Chaque mp4 possède son fichier .idx qui informe la position de chaque Frame pour chaque seconde, ainsi je peux me déplacer dans mon mp4 à ma guise à l'aide d'une date.

    Pour des raison de performance je ne peux pas charger un fichier entièrement.

    Pour cela, lorsque je parse mon mp4, je le decoupe en plusieurs isoFile représentant pour chacun 10 sec du mp4.

    mes iso sont crée comme suit dans une boucle :
    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
     _output=null;
            _movie.setTracks( new LinkedList<Track>() );
     
            for (Track aTrack : tracks ) {
                //position de la derniere frame
                long lastFrame;
                int lastidx = timeCodes.size()-1;
                int idxTrack = tracks.indexOf(aTrack);
     
                _startFrame = (fileIndexStart.getTrackPosition()[idxTrack]);
                //check position de la derniere frame
                while (true) {
                    FileIndex fi = timeCodes.get( lastidx );
     
                    lastFrame = fi.getTrackPosition()[ idxTrack ];
     
                    if (lastFrame > _startFrame) {
                        break;
                    }
                    lastidx--;
                }
     
                //création de l'iso
     
                // frame de fin = startFrame + 10 sec;
                int index = timeCodes.indexOf(fileIndexStart);
                int indexEnd;
                if( (index+10)>lastidx )
                    {indexEnd = lastidx;}
                else
                    {indexEnd = index + 10;}
                fileIndexEnd = timeCodes.get(indexEnd);
     
                _endFrame = (fileIndexEnd.getTrackPosition()[idxTrack]);
    //            if(_endFrame> lastFrame)
    //            {
    //                _endFrame=lastFrame; 
    //            }
                _movie.addTrack( new CroppedTrack( aTrack , _startFrame, _endFrame ));
            }
            _output = new DefaultMp4Builder().build(_movie);
    le chargement de ces iso :
    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
    int lastindex = timeCodes.size()-1;
            while(true)
            {
                if(_output != null)
                {
                    for(int i=0;i<_output.getBoxes().size();i++)
                    {
                        Box abox = _output.getBoxes().get(i);
                        abox.getBox(channel);
                    }
     
                    int indexFileEnd = timeCodes.indexOf(fileIndexEnd);
                    if(lastindex != indexFileEnd)
                        {setPosition(fileIndexEnd);}// création de l'iso des 10 prochaines secondes
                    else
                        {break;}
                }else{
                    break;
                }
            }
     
            //fin de fichier...
            return 0;
    coté serveur tout ce passe bien, mais coté navigateur mon mp4 ce stop au bout de la 10e seconde (donc mon premier isoFile)

    Je soupçonne que ce soit la faute du header du premier iso qui dit que c'est la fin du chargement, malgré tout, le serveur continue d'envoyer les autre iso
    Je ne sais pas trop d'où peut venir le problème et mon expérience en mp4 est très faible

    Pour info j'utilise l'api mp4parser

    j'ai fais aussi le test sur vlc et même souci

    si quelqu'un peut m'aider merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 27
    Par défaut
    bon je n'est pas trouvé de solution
    du coup je detecte la fin de mon mp4 pour relancer une requête et aller chercher le prochain mp4, c'est pas génial parce que du coup j'ai une coupure entre chaque mais c'est la seule alternative que j'ai trouvé.

    merci tout de même.

Discussions similaires

  1. FTP, SFTP et plusieurs Streams
    Par hassanJava dans le forum Entrée/Sortie
    Réponses: 0
    Dernier message: 15/04/2009, 14h27
  2. Plusieurs RichTextBox sur un Stream
    Par maglif dans le forum Windows Forms
    Réponses: 4
    Dernier message: 10/04/2008, 19h46
  3. Plusieurs morceaux en Streaming ?
    Par octokom dans le forum Intégration
    Réponses: 1
    Dernier message: 16/03/2008, 15h27
  4. [Socket&Stream] Plusieurs streams sur une même socket
    Par Napalm51 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 15/11/2007, 15h40
  5. SetStreamSource - plusieurs stream paralelles how to ?
    Par Omeyocan dans le forum DirectX
    Réponses: 13
    Dernier message: 04/01/2006, 14h41

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