从视频设备上采集数据(Mac)

1、avdevice_register_all(); // 设备注册

2、av_find_input_format("avfoundation"); //获取format

3、avformat_open_input(AVFormatContext **ps, const char *url, const AVInputFormat *fmt, AVDictionary **options); //打开device

针对于视频来说,options需要设置,FFmpeg的默认编码格式是YUV420,Mac系统支持的格式有uyuv422、yuyv422、nv12、0rgb、rgb0等格式,不设置格式的话,系统自动使用uyvy422

av_dict_set(&options,"video_size","640x480",0); //设置分辨率

av_dict_set(&options,"framerate","30",0); //设置帧率

av_dict_set(&options,"pixel_format","nv12",0); //设置视频采集格式

4、av_read_frame(AVFormatContext *s, AVPacket *pkt); //从设备中读取数据

5、fwrite(pkt.data,1,pkt.size,outfile);

fflush(outfile);//写入数据到文件

注意:在外面写入数据到文件的时候,不能直接写入pkt.size,这个可能与我们真实需要的数据大小不一样。我们可以直接计算:480x640x1.5=460800,代替pkt.size.这是因为nv12属于YUV420sp格式,pck.size=宽x高x(yuv420=1.5)/(yuv422=2)/(yuv444=3)。

你可能感兴趣的:(FFmpeg,音视频)