播放器开发系列2播放音频_第1页
播放器开发系列2播放音频_第2页
播放器开发系列2播放音频_第3页
播放器开发系列2播放音频_第4页
播放器开发系列2播放音频_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、本课讲师:Darren老师C/C+音视频高级开发播放器开发系列2-播放音频课程主讲Darren老师:2167195649讲师介绍 动脑学院 -Darren老师高级资深工程师 音视频开发,嵌入式系统开发,图像处理开发等方面有丰富的研发与实战经验。 曾供职于珠海扬智,深圳联发科等知名半导体公司。 课程提纲音频基础知识SDL声音设置相关音频队列音频重采样重点知识SDL播放声音的方法回调函数读取数据要点音频重采样,格式转换,变速播放等播放器框架ffplay框架音频基础知识采样频率:采样率指的是每秒钟采样的点数,单位为HZ。采样率的倒数是采样周期,也就是两次采样的时间间隔。常用的采样频率有:22k Hz

2、 无限广播所用的采样率 44.1k Hz CD音质48k Hz 数字电视,DVD 96k Hz 192k Hz 蓝光盘,高清DVD采样精度:采集到的点被称为样本(sample),每个样本占用的位数就是采样精度。可以使用8bit,16bit,24bit或者32bit来表示采集到的一个样本。音频基础知识通道:支持不同发声的音响的个数。通道布局(channel layout):不同的通道组合方式。同样是3个通道但是可以摆放出不同的布局。比特率 指的是每秒传送的比特(bit)数,其单位是bps(Bit Per Second)没有压缩编码的音频数据:其比特率 = 采样频率 * 采样精度 * 通道数经过压

3、缩编码后的音频数据:即是码率 = 音频文件的大小 / 时长。常见码率:96 Kbps FM质量; 128 - 160 Kbps 比较好的音频质量;192Kbps CD质量;256Kbps 320Kbps 高质量音频音频基础知识-对应ffmpeg采样频率:同样使用数字表示,单位HZ 44100hz采样精度(和帧格式):AV_SAMPLE_FMT_U8AV_SAMPLE_FMT_S16AV_SAMPLE_FMT_FLTP通道:#define AV_CH_FRONT_LEFT 0 x00000001#define AV_CH_FRONT_RIGHT 0 x00000002#define AV_CH_

4、FRONT_CENTER 0 x00000004通道布局(channel layout):#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)#define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY)#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER)SDL2播放音频使用SDL播放解码后的音频数据,SDL播放音频数据的流程如下:SDL_AudioSpectyped

5、ef struct SDL_AudioSpec int freq; / 采样率 SDL_AudioFormat format; /采样格式,比如AUDIO_S16SYS Uint8 channels; /通道数,SDL支持1-mono,2-stereo,4-quad和6-5.1 Uint8 silence; /音频数据中表示静音的值是多少 Uint16 samples; /缓冲区的大小,单个通道的采样点数 Uint16 padding; / Necessary for some compile environments Uint32 size;/缓冲区的大小(字节为单位)=channels*s

6、amples *2 SDL_AudioCallback callback; /喂数据给音频设备的回调函数/ 如果为NULL则可用SDL_QueueAudio() void *userdata; /在回调函数中使用的数据指针 SDL_AudioSpec;回调函数allback用来取音频数据给音频设备,其声明如下:void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream,int len)userdata 就是SDL_AudioSpec结构体中的userdata字段stream 要填充的缓冲区len 缓冲区的大小 不一定是完

7、整的一帧或两帧数据对于多声道的音频数据在缓冲区中是交错存放的:双声道 LRLR四声道 front-left / front-right / rear-left /rear-right5.1 front-left / front-right / center / low-freq / rear-left / rear-right打开音频设备打开声音设备函数声明如下:SDL_OpenAudioDevice( const char *device, int iscapture, / 设为0作为输出设备 const SDL_AudioSpec * desired,/期望设置的音频输出格式 SDL_Au

8、dioSpec *obtained, /实际的音频输出设置 int allowed_changes/该参数用来指定 当期望和实际的不一样时,能不能够对某一些输出参数进行修改。);则可对相应的参数修改:SDL_AUDIO_ALLOW_FREQUENCY_CHANGESDL_AUDIO_ALLOW_FORMAT_CHANGESDL_AUDIO_ALLOW_CHANNELS_CHANGESDL_AUDIO_ALLOW_ANY_CHANGE数据队列重点注意的:(1)假如每次需要读取8000字节的数据,但每一帧数据只能解出4096字节,此时每次读取的数据超过一帧,但又不够2帧数据,该怎么处理?4096*

9、2-8000 = 192,下次来读取要先把192字节读取再去解码获取获取新的一帧数据。(2)假如每次需要读取1024字节的数据,但每一帧数据能解出4096字节,又该怎么处理?音频重采样当解码后的数据和SDL打开的音频设备所支持的格式不一致时需要进行格式转换。采样精度和帧格式音频格式转换 struct SwrContext *s = swr_alloc_set_opts() swr_init(s) int swr_convert(struct SwrContext *s, uint8_t *out, int out_count, const uint8_t *in , int in_count);音频变速不变调使用开源的sonic源码。创建变速器:sonicCreateStream设置变速系数:sonicSetSpeed写入原始数据:sonicWriteShortToS

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论