音视频同步原理[ffmpeg]

output_example.c 中AV同步的代码如下(我的代码有些修改),这个实现相当简单,不过挺说明问题。
阅读前希望大家先了解一下时间戳的概念。
/* compute current audio and video time */
if (pOutputVars->pOutAudio_st)//存在音频流pOutputVars->audio_pts = (double)pOutputVars->pOutAudio_st->pts.val * pOutputVars->pOutAudio_st->time_base.num / pOutputVars- >pOutAudio_st->time_base.den; //(pts是时间戳结构)输出音频的时间戳, 转换为基准时间
elsepOutputVars->audio_pts = 0.0;
if (pOutputVars->pOutVideo_st)pOutputVars->video_pts = (double)pOutputVars->pOutVideo_st->pts.val * pOutputVars->pOutVideo_st->time_base.num / pOutputVars- >pOutVideo_st->time_base.den;//输出视频时间戳
elsepOutputVars->video_pts = 0.0;
if (!pOutputVars->pOutAudio_st && !pOutputVars->pOutVideo_st)return 0;
/* write interleaved audio and video frames */
if (!pOutputVars->pOutVideo_st || (pOutputVars->pOutVideo_st && pOutputVars->pOutAudio_st && pOutputVars->audio_pts < pOutputVars->video_pts)) {write_audio_frame(pOutputVars->pOutFormatCtx, pOutputVars->pOutAudio_st, pInputAudioBuf);//没有视频流,或者音频流时间没赶上视频流
(通过比较时间戳), 则输出(编码输出)音频祯数据} else {write_video_frame(pOutputVars->pOutFormatCtx, pOutputVars->pOutVideo_st, pInputVedioFrame);//否则输出视频祯数据
}
输出数据的时间戳怎么得到的, 以音频为例:pkt.size= avcodec_encode_audio(c, audio_outbuf, audio_outbuf_size, pInputAudioBuf);//源数据应该包含时间戳, pInputAudio是源文
件解码后的音频数据pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);//编码后的祯也含有源文件的时间戳,这个函数应该是转换同时
间基准,没研究过pkt.flags |= PKT_FLAG_KEY;pkt.stream_index= st->index;pkt.data= audio_outbuf;
...
应该就是这么个过程了,然后用av_write_frame(oc, &pkt), 把音频祯和视频祯交错写入到输出文件. 通过上面分析,可以看到,有时候可能连续写几个音频
祯或视频祯.
播放时的同步可能ffplay中有,还没细看
output_example.c 中AV同步的代码如下(我的代码有些修改),这个实现相当简单,不过挺说明问题。
阅读前希望大家先了解一下时间戳的概念。
/* compute current audio and video time */
if (pOutputVars->pOutAudio_st)//存在音频流pOutputVars->audio_pts = (double)pOutputVars->pOutAudio_st->pts.val * pOutputVars->pOutAudio_st->time_base.num / pOutputVars- >pOutAudio_st->time_base.den; //(pts是时间戳结构)输出音频的时间戳, 转换为基准时间
elsepOutputVars->audio_pts = 0.0;
if (pOutputVars->pOutVideo_st)pOutputVars->video_pts = (double)pOutputVars->pOutVideo_st->pts.val * pOutputVars->pOutVideo_st->time_base.num / pOutputVars- >pOutVideo_st->time_base.den;//输出视频时间戳
elsepOutputVars->video_pts = 0.0;
if (!pOutputVars->pOutAudio_st && !pOutputVars->pOutVideo_st)return 0;
/* write interleaved audio and video frames */
if (!pOutputVars->pOutVideo_st || (pOutputVars->pOutVideo_st && pOutputVars->pOutAudio_st && pOutputVars->audio_pts < pOutputVars->video_pts)) {write_audio_frame(pOutputVars->pOutFormatCtx, pOutputVars->pOutAudio_st, pInputAudioBuf);//没有视频流,或者音频流时间没赶上视频流
(通过比较时间戳), 则输出(编码输出)音频祯数据} else {write_video_frame(pOutputVars->pOutFormatCtx, pOutputVars->pOutVideo_st, pInputVedioFrame);//否则输出视频祯数据
}
输出数据的时间戳怎么得到的, 以音频为例:pkt.size= avcodec_encode_audio(c, audio_outbuf, audio_outbuf_size, pInputAudioBuf);//源数据应该包含时间戳, pInputAudio是源文
件解码后的音频数据pkt.pts= av_rescale_q(c->coded_frame->pts, c->time_base, st->time_base);//编码后的祯也含有源文件的时间戳,这个函数应该是转换同时
间基准,没研究过

音视频同步原理[ffmpeg]相关推荐

  1. 音视频同步原理解析;音频编码和解码原理

    视频流中的DTS/PTS到底是什么? DTS(解码时间戳)和PTS(显示时间戳)分别是解码器进行解码和显示帧时相对于SCR(系统参考)的时间戳.SCR可以理解为解码器应该开始从磁盘读取数据时的时间. ...

  2. ffmpeg源码中ffplay音视频同步原理及实现

    音视频指南 文章目录 音视频指南 前言 一.音视频同步简单介绍? 二.基本概念解释 1.为什么需要视频压缩 2.什么是I帧.p帧.b帧 3.什么是DTS,PTS 4.其他概念解释 三.常用同步策略 四 ...

  3. 音视频同步原理及实现

    本文主要描述音视频同步原理,及常见的音视频同步方案,并以代码示例,展示如何以音频的播放时长为基准,将视频同步到音频上以实现视音频的同步播放.内容如下: 1.音视频同步简单介绍 2.DTS和PTS简介 ...

  4. 录像音视频同步原理分析及PTS计算公式

    图解分析 音视频同步要分别保证开始的PTS一样,PTS是控制帧的显示时间的,所以要实现音视频同步必须分别设置音视频的PTS. 注:音.视频最后一帧的PTS时刻不一定相同. 1. 视频时间戳计算 pts ...

  5. 【Android音视频开发】【020】音视频同步原理

    音视频不同步现象 由于视频解码和显示,非常消耗性能,所以视频帧无法和音频帧一样,保证每一帧都能严格准时播放 在现有技术和硬件条件下,任何库都无法百分百保证音视频同步,只能尽力保证误差最小 同步方案 一 ...

  6. MPEG2-TS音视频同步原理

    一.引言 MPEG2系统用于视音频同步以及系统时钟恢复的时间标签分别在ES,PES和TS这3个层次中.   在TS 层, TS头信息包含了节目时钟参考PCR(Program Clock Referen ...

  7. MPEG2-TS音视频同步原理(PCR dts pts)

    一.引言 MPEG2系统用于视音频同步以及系统时钟恢复的时间标签分别在ES,PES和TS这3个层次中.   在TS 层, TS头信息包含了节目时钟参考PCR(Program Clock Referen ...

  8. 音视频同步 ffmpeg 推流

    音视频同步原理及实现 可参考: https://blog.csdn.net/myvest/article/details/97416415 https://www.jianshu.com/p/3578 ...

  9. 视频【解码】原理(播放器原理),音视频同步等

    1.视频编码格式:H264, VC-1, MPEG-2, MPEG4-ASP (Divx/Xvid), VP8, MJPEG 等.  2.音频编码格式:AAC, AC3, DTS(-HD), True ...

最新文章

  1. sql server management studio 查询的临时文件路径
  2. mysql三范式_MySQL设计之三范式的理解
  3. 『骑士精神 IDA*』
  4. 白皮书 | 国内首份《Android 全埋点技术白皮书》开源所有项目源码!
  5. linq查询不包含某个值的记录_【翻译】C#表达式中的动态查询
  6. 转帖 IBM要推POWER9,来了解一下POWER处理器的前世今生
  7. 特斯拉加州工厂无视禁令强行复工,马斯克:要抓就只抓我
  8. 63. 不同路径 II(JavaScript)
  9. java http编码_java httprequest编码/解码
  10. 虚拟服务器配置推荐,如何选择虚拟主机配置
  11. 面向对象——面向客户端编程
  12. STM32 CAN通信协议详解—小白入门(一)
  13. java markdown 转 pdf_markdown转为pdf文件
  14. Maven私服nexus磁盘空间清理
  15. 熟练使用Wireshark排除网络故障的方法
  16. bugku-逆向-5、Timer
  17. 三星android10手势,三星全面屏手势终于来了!看着有点熟悉
  18. 如何更好的思考和学习
  19. qq邮箱发送,mail from address must be same as authorization user
  20. 点云引导滤波算法实现

热门文章

  1. app服务器不运行了,springmvc app URL在本地运行,但不在服务器上运行
  2. 吉林省高等学校计算机水平考试,关于2014年11月高等学校计算机水平考试(吉林省考区)报名的通知...
  3. python写入指定行_python文件操作如何写在指定的行
  4. data image java,类 java.awt.image.DataBuffer 的使用 (Java 2 Platform SE 6)
  5. 重构现有代码:Refactoring
  6. c2java Greedy 之任务调度
  7. LintCode Python 简单级题目 491.回文数
  8. Theano模块的安装其实没你想的那么难
  9. 使Eclipse下支持编写HTML/JS/CSS/JSP页面的自动提示。
  10. 考清华计算机研究生数学看什么,一位考上清华计算机研究生的悲壮历程(数学考了满分).doc...