使用目标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同步之类的高精度时钟。