计算音频帧的播放时间(音频码流 音频帧)

音频码流(冗余数据占的比例):
先简单讲一下对于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 再 分别解压音视频流

时间: 2024-08-03 07:00:46

计算音频帧的播放时间(音频码流 音频帧)的相关文章

(100)C# 实现播放RTSP 标准协议码流播放。录制 ==在线等

问题描述 RT,有没有这方面的源码或者控件,谢谢各位大侠了... 解决方案 解决方案二:该回复于2014-10-12 22:58:48被版主删除解决方案三:这种标准化的流媒体读取方式肯定是可以实现的不过想要免费的下载或者代码的可能性不大都是需要收费的解决方案四:http://www.codeproject.com/Articles/507218/Managed-Media-Aggregation-using-Rtsp-and-Rtphttp://www.streamcoders.com/http

hisi出的H264码流结构

hisi出的H264码流结构:     IDR帧结构如下: 开始码 + nalu + I帧    +    开始码 + nalu + SPS    +     开始码 + nalu + PPS    +   开始码 + nalu + SEI 开始码为:00000001   帧序列结构如下: IDR帧  +  P帧 + +  P帧 + ...... + IDR帧  +  P帧 + +  P帧 + ...... + IDR帧  +  P帧 + +  P帧 + ......

python通过wxPython打开一个音频文件并播放的方法

 这篇文章主要介绍了python通过wxPython打开一个音频文件并播放的方法,实例分析了wxPython操作音频文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了python通过wxPython打开一个音频文件并播放的方法.分享给大家供大家参考.具体如下: 这段代码片段使用wx.lib.filebrowsebutton.FileBrowseButton控件打开一个wav文件,使用wx.Sound播放 ? 1 2 3 4 5 6 7 8 9 10 11 12 13

objective c-服务器的音频文件不播放

问题描述 服务器的音频文件不播放 从服务器中直接播放音频文件时它不播放,如果先播放本地文件再播放服务器的就可以. //NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/audiofile.mp3", [[NSBundle mainBundle] resourcePath]]]; NSURL *url = [NSURL URLWithString:@"http://celeritas-solu

【播放器--场景】纯音频播放

本文将演示使用阿里云播放器3.0.0版本如何实现纯音频播放,目前因为播放器视频支持mp4播放,音频支持mp3播放,所以用户只需要使用setLocalSource的模式来播放音频文件即可. 以安卓为例: 1.初始化播放器相关的代码 AliyunVodPlayer aliyunVodPlayer = new AliyunVodPlayer(this); 2.组装一个结构体AliyunLocalSource AliyunLocalSource.AliyunLocalSourceBuilder asb

php读取音频文件并播放

问题描述 php读取音频文件并播放 现在有一个音频文件在项目外的一个文件夹中,有什么方法可以读取并播放这个音频文件.. 解决方案 PHP是后台服务器脚本,它主要是进行数据处理等 播放音乐应该用js或者flash等,你可以把音频文件放在服务器一个地址,然后用flash等去播放这个地址. 或者用html5 var snd = new Audio("file.wav"); // buffers automatically when created snd.play(); 解决方案二: 播放音

iOS音频的后台播放总结(后台网络请求歌曲,Remote控制,锁屏封面,各种打断)

在没有网络的情况下,音频的后台播放比较简单,google一下可以搜到很多资料,但是如果每次歌曲的请求都是通过网络,就不成了,有时可以也扛不了几首,这里总结下实现方法,可以实现像电台一样的功能,后台播放,网络请求歌曲,Remote控制,锁屏有封面,电话和听歌打断处理等.     初始化AudioSession和基本配置 音频播放器采用的AVPlayer ,自己进行了功能封装,暂且不谈,在程序启动的时候需要配置AudioSession,AudioSession负责应用音频的设置,比如支不支持后台,打

byte-java有什么技术可以把H264编码的音视频码流解码成视频与音频分开??

问题描述 java有什么技术可以把H264编码的音视频码流解码成视频与音频分开?? 小弟最近在做个视频播放相关项目,我接收到一段H264的音视频码流数据, 存放在byte[]中,由于项目需要,我需要从byte[] 分别取出视频流和音频流.但是,由于本人... 还请牛人点拨!!! 越详细越好,我第一次接触h264,解码需要知道些什么参数之类的,各种点拨,谢谢了!! 解决方案 http://jolestar.iteye.com/blog/177522 看看这个

ios-解码视频处理播放时只显示最后一帧图像,大家帮忙看看。。。

问题描述 解码视频处理播放时只显示最后一帧图像,大家帮忙看看... -(void)translate { int videoStream= -1; int frameFinished ; uint8_t *buf; avcodec_register_all(); avformat_network_init(); av_register_all() ; if( avformat_open_input(&pFormatCtx, [fLocalFileName UTF8String], NULL, N