ffmpeg---音频---基本概念 + SDL2播放方法流程(与ffplay相同,仅解码的位置不同)

本文介绍了使用FFmpeg解码音频并利用SDL2进行播放的流程,包括SDL_AudioSpec结构体、打开音频设备、数据队列PacketQueue的操作以及解码后数据的格式转换。重点讲解了如何通过callback函数从PacketQueue中取出数据,解码后转换格式,再送入SDL音频设备的过程。
摘要由CSDN通过智能技术生成

https://www.jianshu.com/p/b006e9e9caa6

A/D转换(模数转换,将模拟数据转换为数字数据):音频以重采样的形式将连续波形数据转换成离散数据存放。
相关概念:

1、采样频率:							//其倒数是采样周期
	22k Hz 无限广播所用的采样率
	44.1k Hz CD音质
	48k Hz 数字电视,DVD
	96k Hz 192k Hz 蓝光盘,高清DVD
	
2、采样精度 采集到的点被称为样本(sample),每个样本占用的位数就是采样精度。这点和图像的像素表示比较类似,
可以使用8bit,16bit或者24bit来表示采集到的一个样本。同样,一个样本占用的空间越大其表示的就越接近真实的声音。

3、通道 支持不同发声的音响的个数。
	不同的声道在采样的时候是不同的,例如双声道,在每次采样的时候有采集两个样本点
		单声道
		双声道
		4声道
		5.1声道等。

4、比特率:每秒传送的比特(bit)数,其单位是bps(Bit Per Second),是间接衡量声音质量的一个标准。
	1、未压缩的编码音频数据👉比特率 = 采样频率 * 采样精度 * 通道数
	2、压缩后的编码音频数据的比特率叫👉码率,因为其反映了压缩编码的效率。
		码率 = 音频文件的大小 / 时长
		常见的一些码率:
		96 Kbps FM质量
		128 - 160 Kbps 比较好的音频质量
		192Kbps CD质量
		256Kbps 320Kbps 高质量音频

2、SDL2播放音频

在这里插入图片描述

2.1 结构体SDL_AudioSpec

SDL中的结构体SDL_AudioSpec包含了关于音频的格式信息(采样率,通道数,采样精度)和回调函数以及用户数据指针,其声明如下:

typedef struct SDL_AudioSpec
{
   
    int freq;                   /**< DSP frequency -- samples per second */
    							每秒钟发送给音频设备的sample frame的个数,通常是110252205024410048000。(sample frame = 样本精度 * 通道数)
    SDL_AudioFormat format;     /**< Audio data format */
    							每个样本占用的空间大小及格式,例如 AUDIO_S16SYS,样本是有符号的16位整数,字节顺序(大端还是小端)和系统一样。更多的格式可参考SDL_AudioFormat。
    Uint8 channels;             /**< Number of channels: 1 mono, 2 stereo */
    							通道数,在SDL2.0中支持1(mono),2(stereo),4(quad)和65.1)
    Uint8 silence;              /**< Audio buffer silence value (calculated) */
    							音频数据中表示静音的值是多少
    Uint16 samples;             /**< Audio buffer size in samples (power of 2) */
    							缓冲区的大小( sample frame为单位)。
    Uint16 padding;             /**< Necessary for some compile environments */
    Uint32 size;                /**< Audio buffer size in bytes (calculated) */
    							缓冲区的大小(字节为单位)
    SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */
    							用来音频设备缓冲区的回调函数
    void *userdata;             /**< Userdata passed to callback (ignored for NULL callbacks). */
								在回调函数中使用的数据指针
} SDL_AudioSpe
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值