0
Я хочу найти продолжительность звукового файла типа «amr», не преобразовывая его в другие аудиоформаты в любом случае?Продолжительность звукового файла amr
AK
Я хочу найти продолжительность звукового файла типа «amr», не преобразовывая его в другие аудиоформаты в любом случае?Продолжительность звукового файла amr
AK
Я закодирован следующее 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
, и я думаю, что он должен работать для вас.
ОК спасибо! Что-то для Java? – Antonis
Выше код может быть легко преобразован в java. Код идеально подходит для видео, я его протестировал. Просто дайте мне знать, совместим ли это с аудиофайлами. Все, что отличается, это поток, который вы поднимаете. –
ok Я попробую! – Antonis