1. 为什么要从ffplay.c入手很多播放器文章停留在“调用av_read_frame - avcodec_send_packet - avcodec_receive_frame”的 API 层,但真正决定播放器上限的,是以下几个工程问题:缓冲何时“扩”、何时“刹车”(背压)Seek 后如何彻底清理旧数据而不串音时钟误差如何平滑收敛,而不是靠粗暴丢帧音频回调线程如何在极端负载下仍不爆音ffplay之所以值得深读,是因为它不是一个 demo,而是把libavformat/libavcodec/libavfilter/libswresample串成了完整播放闭环。本文基于 FFmpeg 源码fftools/ffplay.c与libswresample/swresample.c,围绕“音频开发实践”给出可落地的深度分析。2. 播放器全链路:线程与数据流不是一回事先明确一点:数据流向和线程边界是两套维度。