Durata di un file audio AMR
Domanda
Voglio trovare la durata di un file audio di tipo "amr" senza convertirlo in altri formati audio con qualche modo?
AK
Soluzione
Ho codificato quanto segue in Objective-C per ottenere la durata di un film. Questo può allo stesso modo essere utilizzata per ottenere la durata di audio troppo:
-(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;
}
Cambia il CODEC_TYPE_VIDEO
per CODEC_TYPE_AUDIO
e penso che dovrebbe funzionare per voi.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow