1

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

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

4

1 回答 1

2

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

于 2011-05-31T15:03:39.353 回答