音视频数据采集的步骤:
设备注册
设置对应的采集方式,avfoundation、dshow、alas
打开设备
具体的例子:
#include <stdio.h>
extern "C"{
#include <libavutil/avutil.h>
#include <libavdevice/avdevice.h>
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
}
int main(int argc, char const *argv[])
{
/* code */
// 注册所有的设备
avdevice_register_all();
// 输出的文件
char *filename = "./audio.pcm";
// 文件操作
FILE *outfile = fopen(filename,"wb+");
// 错误缓冲区
char errr[1024];
// 错误码
int ret = 0;
// 存储音视频封装格式中包含的信息的结构体,
AVFormatContext *format_context ;
// 定义设备地址
char *device_name = "hw:0";
AVPacket pkt ;
av_init_packet(&pkt);
// 获得媒体数据的格式
AVInputFormat * iformat = av_find_input_format("alas");
if((ret=avformat_open_input(&format_context,device_name,iformat,NULL))!=0){
av_strerror(ret,errr,1024);
}
int count = 0;
while(ret = (av_read_frame(format_context, &pkt))== 0&&
count++ < 500) {
av_log(NULL, AV_LOG_INFO, "pkt size is %d(%p), count=%d\n",
pkt.size,pkt.data, count);
fwrite(pkt.data, 1, pkt.size, outfile);
fflush(outfile);
av_packet_unref(&pkt);//release pkt
}
fclose(outfile);
avformat_close_input(&format_context);
return 0;
}
针对输出的结果进行输出。
ffplay -ar 44100 -ac 2 -f s16le audio.pcm
-ar 比特率
-ac 通道数
-f 格式