HarmonyOS OH_AudioStream_Result OH_AudioRenderer_GetTimestamp(OH_AudioRenderer* renderer, clockid_t clockId, int64_t* framePosition, int64_t* timestamp);和 GetLatency(uint64_t &latency)的区别是什么?

调用OH_AudioRenderer_GetTimestamp获取到的framePosition和timestamp如何计算当前PCM数据的时延?用于计算音画同步。

HarmonyOS
2024-12-25 15:25:31
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

音画同步要计算出当前已经写入音频帧数据播放要耗时多少,这样就能计算出将要送显的视频帧对应的PTS应该是多少。

参考步骤如下:

1、getTimestamp获取到最近的已经播放帧Pos1和对应时间戳T1。假如已经播放了48000帧数据,采样率为48kHZ,那么根据计算的结果播放的音频时长为1000000ns。

2、获取当前时间nowT2与T1的差值,可以计算出pos1播放时候到现在经过了多长时间ΔT.ΔT = nowT2- T1

3、根据Pos1计算对应的时长audioPlayedTime = Pos1 * 1000000LL/sampleRate

4、当前已经播的帧的实际时长为:nowAudioPlayedTime = audioPlayedTime + ΔT

5、应用写到框架的总数据为framesWritten,这些数据连续播完需要时长:framesWrittenTime = framesWritten * 1000000LL/sampleRate

6、计算待播放的帧需要花费多久,基于该值为视频做同步 framesWrittenNeedTime = framesWrittenTime - nowAudioPlayedTime

分享
微博
QQ
微信
回复
2024-12-25 17:58:55
相关问题
HarmonyOS OH_AudioRenderer_GetTimestamp问题
367浏览 • 1回复 待解决
HarmonyOS 关于OH_AudioRenderer问题
618浏览 • 1回复 待解决
HarmonyOS OH_AudioRenderer问题
262浏览 • 1回复 待解决
本地如何存储Array<T>
381浏览 • 1回复 待解决
clazz: new (...args: any[]) => T 无法使用
431浏览 • 1回复 待解决
hb build -T单独编译,应如何编译
4233浏览 • 1回复 待解决
HarmonyOS ArkTS支持子组件接受泛型T
302浏览 • 1回复 待解决
荣耀play4t PRO什么时候内侧啊
5294浏览 • 2回复 待解决