2010-09-17 17 views

Répondre

0

J'ai codé ce qui suit dans Objective-C pour obtenir la durée d'un film. De même, cela peut être utilisé pour obtenir la durée de l'audio aussi:

-(double)durationOfMovieAtPath:(NSString*)inMoviePath 
{ 
    double durationToReturn = -1; 

    NSFileManager *fm = [NSFileManager defaultManager]; 
    if ([fm fileExistsAtPath:inMoviePath]) 
    { 
     av_register_all(); 

     AVFormatContext *inMovieFormat = NULL; 
     inMovieFormat = avformat_alloc_context(); 
     int errorCode = av_open_input_file(&inMovieFormat, [inMoviePath UTF8String], NULL, 0, NULL); 
     //double durationToReturn = (double)inMovieFormat->duration/AV_TIME_BASE; 

     if (0==errorCode) 
     { 
      // only on success 
      int numberOfStreams = inMovieFormat->nb_streams; 
      AVStream *videoStream = NULL; 
      for (int i=0; i<numberOfStreams; i++) 
      { 
       AVStream *st = inMovieFormat->streams[i]; 

       if (st->codec->codec_type == CODEC_TYPE_VIDEO) 
       { 
        videoStream = st; 
        break; 
       } 
      } 

      double divideFactor; 
      // The duraion in AVStream is set in accordance with the time_base of AVStream, so we need to fetch back the duration using this factor 
      divideFactor = (double)1/rationalToDouble(videoStream->time_base); 

      if (NULL!=videoStream) 
       durationToReturn = (double)videoStream->duration/divideFactor; 
      //DEBUGLOG (@"Duration of movie at path: %@ = %0.3f", inMoviePath, durationToReturn); 
     } 
     else 
     { 
      DEBUGLOG (@"avformat_alloc_context error code = %d", errorCode); 
     } 

     if (nil!=inMovieFormat) 
     { 
      av_close_input_file(inMovieFormat); 
      //av_free(inMovieFormat); 
     } 
    } 

    return durationToReturn; 
} 

Modifier le CODEC_TYPE_VIDEO-CODEC_TYPE_AUDIO et je pense que cela devrait fonctionner pour vous.

+0

ok merci! Quelque chose pour Java? – Antonis

+0

Le code ci-dessus peut être facilement converti en java. Le code est parfait pour la vidéo, je l'ai testé. Faites-moi savoir si c'est aussi compatible avec les fichiers audio. Tout ce qui diffère est le flux que vous ramassez. –

+0

ok je vais l'essayer! – Antonis