音频/视频同步是必须要保证的,它可以确保我们没有太多的未播放的音频帧。真正的多媒体播放器应该依赖于,我们只计算它,但永远不会使用。这里有一个有趣的地方
val ts = av_frame_get_best_effort_timestamp(audioFrame.ptr) *
av_q2d(audioCodecContext.time_base.readValue())
它展示了如何使用api接收C语言的结构体。它是在libavutil/rational.h中声明的
static inline double av_q2d(AVRational a){
return a.num / (double) a.den;
}
因此,要通过值传递它,我们首先需要在字段上使用readValue()。
总结来说,多亏了FFMPEG库,我们才能用较少的代价便实现了一个支持多种输入格式的简易音频/视频播放器。这里我们还讨论了Kotlin/Native中基于C语言的互操作性相关的基础知识,以及更容易使用和维护的并发方法。
英文原文链接: