时间戳——入门分析
来源:互联网 发布:淘宝怎么去掉虚拟商品 编辑:程序博客网 时间:2024/06/15 22:15
时间戳——入门分析
很多新手提到如何音视频同步,最重要的就是时间戳了。这个只要入门了,以后你都会清楚一点。我也是一开始很搞不懂,搜索了很多资料,感觉总说不到点上,要么说的有点高深,对于新手来说很懵懂。 现在已经明白这个思路,就想分享一下,我也说的简单易懂一点。
基础的看这里就行了http://blog.csdn.net/nine_locks/article/details/48007055
为了好理解,就以H264+AAC为例子。
AAC:
一帧 1024个 sample。采样率 Samplerate 44100KHz
AAC一帧的播放时间是= 1024*1000000/44100= 22.32ms(单位为ms)
这里注意,1000000表示是在1000000单位下,计算出来的22.32ms
H264:
帧率为25的话。fps = 25.00,计算出来的时常为40ms.可以参考AAC的来计算。
由硬件产生的时间戳一般是系统时间,我们最多进行置0计算(也就是取到第一个时间戳记为0,让时间戳从0开始增长),或者64位到32位的转换(这个转换有的需要有的不需要)。所以一般得到(25fps)2个视频时间戳之差为40000(也就是duration)。进行如下转换后变成1920。
AVRational time_base2;
time_base2.num = 1;
time_base2.den = 48000;
AVRational time_base;
time_base.num = 1;
time_base.den = 1000000;
output_packet.pts= av_rescale_q(output_packet.pts,time_base, time_base2);
av_rescale_q 这个函数的转换,换算成公式如下:
48000*40000/1000000=1920
48000*48000/1000000=1024//aac 参考
就是吧在1000000这个单位下的40000转换成在48000下的“40000”,也就是1920.
1000000 和 48000就是timescale,就是时钟tick数。就是时钟1秒走了多少下的意思。
1000000这个的由来是:原本的pts是系统时间,us为单位。
48000这个的由来是:这个不清楚,很多都是用48000。可能更好计算吧,换成其他的也可以例如90000,但都需要设置这个timescale,例如:
在ffmpeg下就是:
AVDictionary *opt=NULL;
av_dict_set_int(&opt,"video_track_timescale",48000,0);
avformat_write_header(ofmt_ctx,&opt);
在MP4V2下就是:
MP4SetTimeScale(MP4V2_file, 48000);
Tag:
值得注意的是FLV 是流媒体,是可以进行传输实时播放的。所以它的时间戳一定是以真正的播放时间。例如H264-25fps 的就是40的递增。
- 时间戳——入门分析
- 算法—时间复杂度分析
- C语言入门——时间换算
- 时间戳分析
- 时间复杂度——均摊分析
- 算法——时间复杂度分析方法
- SPSS应用——时间序列分析
- 数据结构回顾——时间复杂度分析
- 《图说VR入门》——googleVR入门代码分析
- R语言入门(1)时间序列分析
- R语言入门(2)时间序列分析原理
- R语言入门(4)时间序列分析
- 数据分析——入门篇
- Python——数据分析Pandas入门
- 驱动入门——Makefile分析
- 需求分析—入门(一)
- Hadoop入门—WordCount代码分析
- PHP会话——session 时间设定使用入门
- 语义歧义消除
- Oracle单行字符函数
- pl/sql developer不需要选中,执行光标所在行
- ovs安装出现fakeroot权限不足问题
- ble之Transmit window offset and Transmit window size
- 时间戳——入门分析
- HDU2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
- idea设置类注释以及方法注释模板
- mysql
- Word Excel PPT在线预览
- java内存溢出ava.lang.OutOfMemoryError: Java heap space
- 一级人力学习记录
- 2017.9.22~23考试分析与考试技巧总结
- Unity中实现360°预览模型