2010-09-17 3 views

ответ

0

Я закодирован следующее Objective-C, чтобы получить длительность фильма. Это так же может быть использовано, чтобы получить длительность аудио тоже:

-(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; 
} 

Изменения CODEC_TYPE_VIDEO к CODEC_TYPE_AUDIO, и я думаю, что он должен работать для вас.

+0

ОК спасибо! Что-то для Java? – Antonis

+0

Выше код может быть легко преобразован в java. Код идеально подходит для видео, я его протестировал. Просто дайте мне знать, совместим ли это с аудиофайлами. Все, что отличается, это поток, который вы поднимаете. –

+0

ok Я попробую! – Antonis

Смежные вопросы