在ffmpeg超详细综合教程——摄像头直播文中完成了一个读取PC摄像头视频数据并以RTMP协议发送为直播流的示例,但是并没有实现对音频的支持,所以在这篇文章中对该示例做进一步的完善并且详细分析直播流的视音频同步问题,同样,也会给出代码示例。
对于直播流来说,这里只考虑发送端的同步问题,而其中的原理其实很简单,概括起来分为如下几个步骤:
1、解析视音频流,将视频流和音频流的时间戳用同样的时间基准表示
2、比较转换后的两个时间戳,找出较小值,对应发送偏慢的流
3、读取、转码、发送相应的流,同时,若该流的转码时间很快,超前于wall clock,则还需要进行相应的延时
4、循环重复以上过程
本文的代码是在此前文章的基础上做的修改,主要是两大部分,一是音频转码的内容,二是视音频同步的内容。
音频转码的基本流程
首先是一些音频输入输出的基本设置,非常简单和常见,如下
//Set own audio device's name
if (avformat_open_input(&ifmt_ctx_a, d