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

标签 iphone objective-c math ffmpeg audioqueueservices

我的 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 同步之类的高精度时钟。

关于iphone - 使用 Objective C(音频队列服务)从 FFMPeg 获取准确时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6189350/

相关文章:

iphone - 不同的内存管理ARC/无ARC

受 iPhone UITableView 启发的 Javascript 小部件?

iphone - Box2d:在一个方向上应用速度

Objective-c - NSData initWithContentsOfFile 与 dataWithContentsOfFile

iphone - Core Text - 小框文本太多 - 如何添加三个点?

java - 在java中旋转一个二维数组n度

iphone - map View :viewForOverlay: not getting called

iphone - refreshObject 如何在嵌套的托管对象上下文中工作?

c++ - 检查矩阵相乘结果的方法?

c# - n个点逼近到最适合的曲线