1.AVFrame结构体中部分音频参数说明
typedef struct AVFrame {
#define AV_NUM_DATA_POINTERS 8
uint8_t *data[AV_NUM_DATA_POINTERS];
int linesize[AV_NUM_DATA_POINTERS];
int nb_samples;
int format;
int64_t pts;
int64_t pkt_dts;
AVRational time_base;
int sample_rate;
AVBufferRef *buf[AV_NUM_DATA_POINTERS];
AVChannelLayout ch_layout;
int64_t duration;
} AVFrame;
2.和实际录音时音频属性的对应关系
- 假设有个mic录音设备,它的参数:1.双声道录音设备。2.每秒钟可以采集44100次数据。3.每次的数据需要用1个字节保存,为planar格式。
创建一个AVFrame来保存这个mic录1s的音频数据,设置如下:
int64_t timestamp = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now().time_since_epoch()).count();
auto pts = av_rescale_q(timestamp, {1, 44100}, {1, 1000});
AVFrame frame;
frame.sample_rate = 44100;
frame.time_base = AVRational{1, 44100};
frame.nb_samples = 44100;
frame.pts = pts;
frame.duration = av_rescale(frame.nb_samples / frame.sample_rate, frame.time_base.den, frame.time_base.num);
av_channel_layout_default(&frame.ch_layout, 2);
frame.format = AV_SAMPLE_FMT_U8P;
av_frame_get_buffer(mframe, 0);
frame.data[0] = memcpy(第1个声道的平面数据);
frame.data[1] = memcpy(第2个声道的平面数据);
#if 0
frame.format = AV_SAMPLE_FMT_U8;
av_frame_get_buffer(mframe, 0);
frame.data[0] = 2个声道交错的数据;
#endif
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~