我的iPhone应用程序使用FFMPeg播放音频文件。
我从播放的音频中获取经过的时间(向用户显示)(从FFMPeg给出的微秒转换后的分钟和秒数),如下所示:
AudioTimeStamp currentTimeStamp;
AudioQueueGetCurrentTime (audioQueue, NULL, ¤tTimeStamp, 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来解决这个问题?
拜托,我需要有经验的程序员的一些建议/想法。我被卡住了。先谢谢!
答案 0 :(得分:2)
如果您这样做是为了向用户显示媒体中的已用时间(事实上您将其转换为格式化的字符串建议),那么您应该查询您正在使用的播放系统它认为它在文件中。音频队列完全不知道您的媒体,因此您必须复制播放系统完成的工作才能将其映射到媒体时间。音频队列的时间戳更像是A / V同步等高精度时钟。