下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、DTS和PTS的解释FFmpeg里有两种时间戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)。 顾名思义,前者是解码的时间,后者是显示的时间。要仔细理解这两个概念,需要先了解FFmpeg中的packet和frame的概念。FFmpeg中用AVPacket结构体来描述解码前或编码后的压缩包,用AVFrame结构体来描述解码后或编码前的信号帧。 对于视频来说,AVFrame就是视频的一帧图像。这帧图像什么时候显示给用户,就取决于它的PTS。DTS是AVPacket里的一个成员,表示这个压缩包应该什么时候被解码。 如果视频里各帧的编码是按
2、输入顺序(也就是显示顺序)依次进行的,那么解码和显示时间应该是一致的。可事实上,在大多数编解码标准(如H.264或HEVC,当出现B帧的时候)中,编码顺序和输入顺序并不一致。 于是才会需要PTS和DTS这两种不同的时间戳。视频帧根据帧率,在同一时间基上累加,例如,25帧每秒,则按毫秒计,1000/25=40ms,在首帧pts上进行累加音频根据采样率及样本个数,在同一时间基上累加,例如,1024个样本,44100采样率,毫秒计,1000*1024/44100=23.21995464852607709750566893424 ms基本理论是这样,但实际的同步远没有这么简单,掉线,断网,弱
3、网,丢帧,跳帧,等一系列均对你的同步进行阻挠,需要根据具体情况做同步,坐等高手给出较为鲁棒的同步措施。一 固定帧率1. 视频时间戳 pts = inc+ *(1000/fps); 其中inc是一个静态的,初始值为0,每次打完时间戳inc加1. 在ffmpeg,中的代码为 pkt.pts= m_nVideoTimeStamp+ * (m_VCtx->time_base.num * 1000 / m_VCtx->ti
4、me_base.den); 2. 音频时间戳 pts = inc+ * (frame_size * 1000 / sample_rate) 在ffmpeg中的代码为 pkt.pts= m_nAudioTimeStamp+ * (m_ACtx->frame_size * 1000 / m_ACtx->sample_rate);采样频率是指将模拟声音波形进行数字化时,每秒钟抽取声波幅度样本的次数。正常人听觉的频率范围大约在20Hz20kHz之间,根据奈奎斯特采样理
5、论,为了保证声音不失真,采样频率应该在40kHz左右。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,如果采用更高的采样频率,还可以达到DVD的音质对采样率为44.1kHz的AAC音频进行解码时,一帧的解码时间须控制在23.22毫秒内。背景知识:(一个AAC原始帧包含一段时间内1024个采样及相关数据)分析:1 AAC音频帧的播放时间=一个AAC帧对应的采样样本的个数/采样频率(单位为s)一帧 1024个 sample。采样率 Samplerate 44100KHz,每秒44100个sample, 所以 根据公式
6、160; 音频帧的播放时间=一个AAC帧对应的采样样本的个数/采样频率当前AAC一帧的播放时间是= 1024*1000000/44100= 22.32ms(单位为ms)2 MP3 mp3 每帧均为1152个字节, 则:frame_duration = 1152 * 1000000 / sample_rate例如:sample_rate = 44100HZ时, 计算出的时长为26.122ms,这就是经常听到的mp3每帧播放时间固定为26ms的由来。二 可变帧率有很多的采集卡,摄像头,在做采集的时候,明明设置的25FPS,但实际采集数据回调过来,发现并不是40毫秒的
7、间隔,而是50,60,甚至100不等的时间间隔。这就给编码后打时间戳带来很大的困难。在libav里,我们的默认编码参数都是:ptAvEncoder->ptAvStreamVideo->codec->time_base.den = s32Fps;ptAvEncoder->ptAvStreamVideo->codec->time_base.num = 1;这样在编码后的时间戳以1递增,只适合于固定帧率。我们来改一下:ptAvEncoder->ptAvStreamVideo->codec->time_bas
8、e.den = s32Fps * 1000;ptAvEncoder->ptAvStreamVideo->codec->time_base.num = 1* 1000;这样就把时间戳的scale变成了毫秒,就可以以毫秒为单位进行计算了,如下:tAvPacket.pts = (s64)u32TimeStamp * (s64)s32Fps);u32TimeStamp是从开始记录的时间差值,以毫秒为单位;s32Fps是帧率。对于音频,mp4文件默认是采样率为tick的,时间戳
9、计算为:tAvPacket.pts = (AvEncoderAudioInSizeGet(hHandle) * ( (s64)(u32TimeStamp) / (AvEncoderAudioInSizeGet(hHandle) * 1000 / ptAvEncoder->ptAvStreamAudio->codec->sample_rate);AvEncoderAudioInSizeGet(hHandle) 每次编码器需要的PCM数据长度。u32TimeStamp是从开始记录的时间差值,以毫秒为单位。 ptAv
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年防静电金属手腕带项目投资价值分析报告
- 2024至2030年铝锭感应加热装置项目投资价值分析报告
- 2024至2030年轿车发动机进气连接管项目投资价值分析报告
- 大学生职业规划大赛《应用心理学专业》生涯发展展示
- 2024至2030年脱硫喷枪项目投资价值分析报告
- 《伤口换药技术》课件
- 2024至2030年油井计量橇项目投资价值分析报告
- 2024至2030年木材拉卡胶项目投资价值分析报告
- 2024至2030年拉弯矫直机项目投资价值分析报告
- 2024至2030年彩条天鹅绒项目投资价值分析报告
- 寻方问药纵横谈智慧树知到答案2024年浙江中医药大学
- 高中英语课程标准解读(2017年版)
- 2024年政工职称考试题库(含答案)
- 商品价格不变协议书范本
- 网络基础知识
- 废弃物处理合同三篇
- 合肥市普通高中六校联盟2024届高三第一学期期末考试数学试卷含答案
- 水果采购合同电子版
- Unit 5 Section B 课件人教版2024新教材七年级上册英语
- 焊接收缩量计算公式
- 小学数学六年级上册期末考试试卷含答案(黄金题型)
评论
0/150
提交评论