zoukankan      html  css  js  c++  java
  • 计算音频帧的播放时间(音频码流 音频帧)

    音频码流(冗余数据占的比例):
    先简单讲一下对于ADTS header的结构的理解:
    1)ADTS header位于每一个aac帧的开头,长度一般是7字节(也可以是9字节的,没见过)。
    2)每个aac帧的长度固定为1024个sample(可以是1024*n,没见过n>1的情况)。
    3)ADTS header中大部分信息无用,有用的只有采样率(4bit)、声道数(3bit)和帧的大小(13bit),这三项总共只有20bit。
    mp4格式会集中存放每一个frame的index,每个index占4个字节。但因为mp4本身还有其他tag,所以对于较短的小文件冗余依然比ADTS大。
    如一个20kpbs的48kHz he-aac语音,如果用ADTS存放,冗余数据占的比例可以这么计算
    1、每秒的音频数据量是20/8=2560 Byte;
    2、每秒的音频帧数是24000/1024=23.4375帧;(由于编码的aac算法是he-aac,它自带sbr技术,因此SBR只有一半的采样率)待实际验证
    3)每秒ADTS header的大小是7*23.4375=164.0625 Byte
    4) 冗余数据占的比例是164.0625 / 2560 = 6.4%
    可见还是相当大的
    mp4格式会集中存放每一个frame的index,每个index占4个字节。但因为mp4本身还有其他tag,所以对于较短的小文件冗余依然比ADTS大。

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

    当前AAC一帧的播放时间是= 1024/44100 = 0.02232 s(单位为秒)=22.32ms(单位为ms)
    反过来,如当想通过音频缓冲多少ms来计算实际应缓冲多少个音频帧时,可下计算:
    比如对48K缓冲300ms需要多少个buffer,
    buffer = 一秒内能产生多少个音频帧(48000/1024) 乘以 时间比例(300/1000) = (48000*300)/(1024*1000) = 14.0625个。

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

    ===============================================================================================
    音视频流的发送
    1 请教大伙
    我只做过 MPEG4视频流的RTP打包传输 接收
    现在加入了音频采集 所以要发送 音视频流
    我想请问大伙 在发送时 一般的做法是 音视频流分开发送
    还是 发送音视频的合成流?
    答案:
    直播考虑实时性的话,就可能要考虑丢视频包、保音频包;分开传输比较好
    点播不考虑实时性、要求同步的话,可以进行缓冲;合并传输比较好

    现在的话 对合成流打包 就不需要有什么讲究了吧
    在接收端 解RTP包 在接 分解 filter 再 分别解压音视频流

  • 相关阅读:
    MySQL Sandbox安装使用
    主从复制延时判断
    Carthage
    QCon 2015 阅读笔记
    QCon 2015 阅读笔记
    Scrum&Kanban在移动开发团队的实践 (一)
    移动开发-第三方聊天服务
    开通博客
    spark的若干问题
    hadoop2.2.0安装需要注意的事情
  • 原文地址:https://www.cnblogs.com/lidabo/p/7264054.html
Copyright © 2011-2022 走看看