Ios 查找时获取AudioQueueRef的当前时间戳
我正在处理视频/音频流,并使用Ios 查找时获取AudioQueueRef的当前时间戳,ios,objective-c,audio-streaming,audioqueue,Ios,Objective C,Audio Streaming,Audioqueue,我正在处理视频/音频流,并使用AudioQueueRef播放音频。我使用AudioQueueRef的当前时间来实时同步视频/音频帧。当我搜索到指定的时间时,我得到的AudioQueueRef的当前时间没有返回正确的值,它只是在计时之前连续返回值。我想问题是我没有重置AudioQueueRef的所有旧对象。但我尝试了许多方法,并没有得到预期的当前时间值。有人知道这个案子吗?提前感谢 方法获取AudioQueueRef的当前时间 - (double)currentTime { double
AudioQueueRef
播放音频。我使用AudioQueueRef
的当前时间来实时同步视频/音频帧。当我搜索到指定的时间时,我得到的AudioQueueRef
的当前时间没有返回正确的值,它只是在计时之前连续返回值。我想问题是我没有重置AudioQueueRef
的所有旧对象。但我尝试了许多方法,并没有得到预期的当前时间值。有人知道这个案子吗?提前感谢
方法获取AudioQueueRef的当前时间
- (double)currentTime {
double timeInterval = 0;
AudioTimeStamp timeStamp;
AudioQueueGetCurrentTime(_AudioQueues, NULL, &timeStamp, NULL);
timeInterval = 1000 * timeStamp.mSampleTime / self.inFormat.mSampleRate; // convert to miliseconds
return timeInterval;
}
以及我在查找时尝试重置值的方法。如果我使用下面的任何方法,当前时间将返回负值
AudioQueueFreeBuffer(_AudioQueues, _AudioBuffer);
AudioQueueFlush(_AudioQueues);
AudioQueueReset(_AudioQueues);
p/S:查找之前所有的事情都是正确的,查找之后,时间戳是返回连续值。可能会帮助您。谢谢您,但我的问题是查找之后,我得到的AudioTimeStamp的值无效(它似乎是连续时间戳,而不是我查找的时间戳)。时间戳值示例:查找之前:
10,11,12
在搜索到5之后:13,14,15…
现在我临时存储了在搜索之前到搜索之后和currentTime=currentTime-timeGap之间的时间间隔。但它不是获取当前时间的典型方法。我只想使用AudioQueueGetCurrentTime
获得准确的当前时间。我相信音频队列在查找后不能保留时间戳,它只保留播放的持续时间。假设您正在播放一个音频文件,播放12秒后搜索到5秒,10秒后,当您使用AudioQueueGetCurrentTime
调用get current time时,您将得到22。所以你可以得到22-12+5=17的实时电流。音频缓冲区可能会影响精确搜索,因此您最好在搜索前使用AudioQueueStop(queue,true)
停止音频队列。。。我认为,使用您寻求的时间偏移量加上您从AudioQueueGetCurrentTime
获得的当前时间,它提供了足够的精确时间。