解压视频及同步音频流程分析
- 数据 -> 子线程解码原始数据到SafeQueue<AVPacket *>队列中 -> 解码器返回解码到输出数据到SafeQueue<AVFrame *> frame_queue 队列 -> 取切片数据dst_data返回给窗口window -> 比较当前视频时间戳与当前帧音频时间戳 -> 处理视频延时或者追赶处理 -> 达到音视频同步
开始之前先掌握以下几个概念
- 音视频同步是以音频时间为准,通过减缓视频渲染或者丢帧加快视频渲染的操作来达到同步,但同步不是绝对的,是相对的同步,即相差的时间非常短。
- 需要两个子线程来处理工作,一个packet线程用来解码,一个frame线程用来同步渲染视频
- 把AVPacket数据解码需要用到这个方法avcodec_send_packet
1 | //avcodec.h |
- 从解码器返回输出到数据给到AVFrame结构体队列中,frame_queue.enQueue(frame);
1 |
|
- sws_scale方法, 获得切片数据dst[], 和slice宽高
1 | /** |
- av_q2d方法
1 |
|