FFmpeg
EricFantastic
Code will follow my heart.
展开
-
ffmpeg转码MPEG2-TS的音视频同步机制分析
一、FFmpeg忽略了adaptation_field()数据 FFmpeg忽略了包含PCR值的adaptation_filed数据; 代码(libavformat/mpegts.c)分析如下: /* 解析TS包 */ int handle_packet(MpegTSContext *ts, const uint8_t *packet) { ... pid = AV_转载 2015-12-12 08:39:33 · 1691 阅读 · 0 评论 -
ffmpeg 如何音视频同步
output_example.c 中AV同步的代码如下(我的代码有些修改),这个实现相当简单,不过挺说明问题。 音视频同步方法:选择一个参考时钟,参考时钟上的时间是线性递增的,生成数据流时依据参考时钟上的时间给每个数据块 都打上时间戳(一般包括开始时间和结束时间)。在播放时,读取数据块上的时间戳,同时参考当前参考时钟上的时间来安 排播放。数据流不会发生参考关系。 步转载 2015-12-12 08:40:50 · 1591 阅读 · 0 评论 -
音视频同步之时间戳
媒体内容在播放时,最令人头痛的就是音视频不同步。从技术上来说,解决音视频同步问题的最佳方案就是时间戳:首先选择一个参考时钟(要求参考时钟上的时间是线性递增的);生成数据流时依据参考时钟上的时间给每个数据块都打上时间戳(一般包括开始时间和结束时间);在播放时,读取数据块上的时间戳,同时参考当前参考时钟上的时间来安排播放(如果数据块的开始时间大于当前参考时钟上的时间,则不急于播放该数据块,直到参考时钟转载 2015-12-12 08:44:08 · 2094 阅读 · 0 评论 -
FFmpeg音视频同步的问题
音视频流里都包含了播放速率的信息,音频使用采样率来表示,而视频则采用f/s来表示,但是我们却不能简单地用这两个数据来对音视频进行同步,我们需要使用DTS(解码时间戳)和PTS(播放时间戳)这两个数据;我们知道影视数据在存储时,会存在多种帧形式,例如MPEG中就采用了I,B和P,由于B帧的存在使得PTS和DTS存在不同(原因见附录),如图1所示为一个简单的例子;当然真正影响我们音视频同步的是PTS。转载 2015-12-12 08:42:10 · 2564 阅读 · 0 评论