Chinaunix首页 | 论坛 | 博客
  • 博客访问: 388854
  • 博文数量: 120
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 741
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-27 18:15
文章分类

全部博文(120)

文章存档

2016年(13)

2015年(41)

2014年(66)

我的朋友

分类: LINUX

2015-07-29 22:37:05

    av_rescale_q(a,b,c)用于计算Packet的PTS。av_rescale_q的返回值是一个很大的整数,且每次计算的结果间隔很大。不同于avcodec_encode_video改变AVCodecContext *avctx的pts(小整数,且间隔小)。
    
av_rescale_q(a,b,c)用来把时间戳从一个时基调整到另外一个时基。它基本的动作是计算a*b/c,但是这个函数还是必需的,因为直接计算会有溢出的情况发生。

点击(此处)折叠或打开

  1. /**
  2.  * Internal time base represented as integer
  3.  */

  4. #define AV_TIME_BASE 1000000

  5. /**
  6.  * Internal time base represented as fractional value
  7.  */

  8. #define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE}

  9. 点击(此处)折叠或打开

    1. /**
    2.  * rational number numerator/denominator
    3.  */
    4. typedef struct AVRational{
    5.     int num; ///< numerator
    6.     int den; ///< denominator
    7. } AVRational;



    AV_TIME_BASE_Q是AV_TIME_BASE作为分母后的版本。它们是很不相同的:AV_TIME_BASE * time_in_seconds = avcodec_timestamp而AV_TIME_BASE_Q * avcodec_timestamp = time_in_seconds(注意AV_TIME_BASE_Q实际上是一个AVRational对象,所以你必需使用avcodec中特定的q函数来处理它)。


H264/90000,代表时钟频率必须是90000

背景知识:(一个AAC原始帧包含一段时间内1024个采样及相关数据)

1. 视频时间戳
pts = inc++ *(1000/fps); 其中inc是一个静态的,初始值为0,每次打完时间戳inc加1.
在ffmpeg,中的代码为
pkt.pts= m_nVideoTimeStamp++ * (m_VCtx->time_base.num * 1000 / m_VCtx->time_base.den);

2. 音频时间戳
pts = inc++ * (frame_size * 1000 / sample_rate)
在ffmpeg中的代码为
pkt.pts= m_nAudioTimeStamp++ * (m_ACtx->frame_size * 1000 / m_ACtx->sample_rate);

采样频率是指将模拟声音波形进行数字化时,每秒钟抽取声波幅度样本的次数。正常人听觉的频率范围大约在20Hz~20kHz之间,根据奈奎斯特采样理论,为了保证声音不失真,采样频率应该在40kHz左右。常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,如果采用更高的采样频率,还可以达到DVD的音质
对采样率为44.1kHz的AAC音频进行解码时,一帧的解码时间须控制在23.22毫秒内。
分析:
1 AAC
音频帧的播放时间 一个AAC帧对应的采样样本的个数/采样频率(单位为s)
一帧 1024个 sample。采样率 Samplerate 44100Hz,每秒44100个sample, 所以根据公式 音频帧的播放时间=一个AAC帧对应的采样样本的个数/采样频率
当前AAC一帧的播放时间是= 1024*1000/44100= 22.32ms(单位为ms)

2 MP3
mp3 每帧均为1152个字节, 则:
frame_duration = 1152 * 1000 / sample_rate
例如:sample_rate = 44100HZ时,计算出的时长为26.122ms,这就是经常听到的mp3每帧播放时间固定为26ms的由来。

视频的帧率是会变的

转自:http://blog.sina.com.cn/s/blog_61798d5d01018twa.html
阅读(761) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~