我的 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 来解决这个问题?
拜托,我需要一些经验丰富的程序员的建议/想法。我被困住了。预先感谢!
最佳答案
如果您这样做是为了向用户显示媒体中耗时(您将其转换为格式化字符串的事实表明),那么您应该查询您正在使用的播放系统它认为的时间在文件中。音频队列完全不知道您的媒体,因此您必须复制播放系统完成的工作以将其映射到媒体时间。音频队列中的时间戳更像是用于 A/V 同步之类的高精度时钟。
关于iphone - 使用 Objective C(音频队列服务)从 FFMPeg 获取准确时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6189350/