// 获取输入格式对象
AVInputFormat *fmt = av_find_input_format("avfoundation");
if (!fmt) {
qDebug() << "av_find_input_format error" <<"avfoundation";
return;
}
// 格式上下文(将来可以利用上下文操作设备)
AVFormatContext *ctx = nullptr;
// 设备参数
AVDictionary *options = nullptr;
av_dict_set(&options, "video_size", "640x480", 0);
av_dict_set(&options, "pixel_format", "yuyv422", 0);
av_dict_set(&options, "framerate", "30", 0);
// av_dict_set(&options, "video_size", "1280x720", 0);
// av_dict_set(&options, "pixel_format", "yuyv422", 0);
// av_dict_set(&options, "framerate", "10", 0);
// 打开设备
int ret = avformat_open_input(&ctx,"0", fmt, &options);
if (ret < 0) {
ERROR_BUF(ret);
qDebug() << "avformat_open_input error" << errbuf;
return;
}
// 文件名
QFile file("/Users/apple/Desktop/out.yuv");
// 打开文件
if (!file.open(QFile::WriteOnly)) {
qDebug() << "file open error" << FILENAME;
// 关闭设备
avformat_close_input(&ctx);
return;
}
// 计算一帧的大小
AVCodecParameters *params = ctx->streams[0]->codecpar;
AVPixelFormat pixFmt = (AVPixelFormat) params->format;
int imageSize = av_image_get_buffer_size(
pixFmt,
params->width,
params->height,
1);
// qDebug() << imageSize;
// qDebug() << pixFmt << params->width << params->height;
// qDebug() << av_pix_fmt_desc_get(pixFmt)->name;
// int pixSize = av_get_bits_per_pixel(av_pix_fmt_desc_get(pixFmt)) >> 3;
// int imageSize = params->width * params->height * pixSize;
// 数据包
AVPacket *pkt = av_packet_alloc();
while (!isInterruptionRequested()) {
// 不断采集数据
ret = av_read_frame(ctx, pkt);
if (ret == 0) { // 读取成功
// 将数据写入文件
file.write((const char *) pkt->data, imageSize);
// 释放资源
av_packet_unref(pkt);
} else if (ret == AVERROR(EAGAIN)) { // 资源临时不可用
continue;
} else { // 其他错误
ERROR_BUF(ret);
qDebug() << "av_read_frame error" << errbuf << ret;
break;
}
}
// 释放资源
av_packet_free(&pkt);
// 关闭文件
file.close();
// 关闭设备
avformat_close_input(&ctx);
QT开发 FFmpeg录制视频YUV格式
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- QT开发 需要导入plist文件 访问麦克风的权限FFmpeg命令录制音频在子线程中,在主线程会卡顿UI 查看设备...
- 已经好几个月没有写博客了,突然来感去写,手艺也有些生疏了,确实是这几个月实在太忙了,谁也知道现在直播火了起来,很多...
- 今天我们要介绍的技术关于多媒体,多媒体一直是客户端开发中非常热门的技术,不管是直播、在线播放还是视频下载,...
- 播放YUV 定时读取YUV的视频帧 将YUV转换为RGB数据 用RGB数据生成CGimage 在view上绘制CG...