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



我的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来解决这个问题?

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

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

最新更新