使用Objective C(音频队列服务)从FFMPeg获取准确时间

时间:2011-05-31 14:45:03

标签: iphone objective-c math ffmpeg audioqueueservices

我的iPhone应用程序使用FFMPeg播放音频文件。

我从播放的音频中获取经过的时间(向用户显示)(从FFMPeg给出的微​​秒转换后的分钟和秒数),如下所示:

AudioTimeStamp currentTimeStamp;
AudioQueueGetCurrentTime (audioQueue, NULL, &currentTimeStamp, NULL);

getFFMPEGtime = currentTimeStamp.mSampleTime/self.basicAudioDescription.mSampleRate;

self.currentAudioTime = [NSString stringWithFormat: @"%02d:%02d",
                            (int) getFFMPEGtime / (int)60000000,
                            (int) ((getFFMPEGtime % 60000000)/1000000)];

一切正常,但当我向后或向前擦洗以播放歌曲的另一部分时,经过的时间将回到零,无论当前位置如何。计时器将始终为零。

我知道我需要做一些数学运算以跟踪旧时间和新时间,可能构建另一个时钟左右,也许实现另一个回调函数等等...我不知道我是怎么回事应该去。

我的问题是

1)跟踪歌曲中后退/前进所用时间的最佳方法是什么,避免时钟总是回归零?

2)我应该深入研究FFMPeg函数还是应该坚持使用Objective-C和Cocoa Touch来解决这个问题?

拜托,我需要有经验的程序员的一些建议/想法。我被卡住了。先谢谢!

1 个答案:

答案 0 :(得分:2)

如果您这样做是为了向用户显示媒体中的已用时间(事实上您将其转换为格式化的字符串建议),那么您应该查询您正在使用的播放系统它认为它在文件中。音频队列完全不知道您的媒体,因此您必须复制播放系统完成的工作才能将其映射到媒体时间。音频队列的时间戳更像是A / V同步等高精度时钟。

相关问题