当前位置: 首页 > article >正文

摄像头原始数据读取——ffmpeg(av_read_frame)

摄像头原始数据读取——ffmpeg(av_read_frame)

测试代码test.cpp

#include <iostream>
#include <stdio.h>
#include <string.h>

#ifdef __cplusplus
extern "C" {
#endif
#include "libavdevice/avdevice.h"
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include "libavutil/avutil.h"
#include <libavfilter/avfilter.h>
#include <libavutil/log.h>

#ifdef __cplusplus
};
#endif

int main(int argc, char *argv[]) 
{   
    int count=0;
    AVPacket pack_data;
    AVFormatContext *fmt_ctx = NULL;
    AVDictionary *video_args = NULL;
    AVInputFormat *inputformat=NULL;

    avdevice_register_all();

    inputformat = av_find_input_format("video4linux2");
	
	//设置视频设备格式参数
    av_dict_set(&video_args, "video_size", "1280x720", 0);
    av_dict_set(&video_args, "framerate", "10", 0);
    av_dict_set(&video_args, "pixel_format", "yuyv422", 0);
    
    std::string video_dev_name = "/dev/video0";
    //打开视频设备,并设置参数
    int ret = avformat_open_input(&fmt_ctx, video_dev_name.c_str(), inputformat, &video_args);
    if(ret < 0) 
    {
        char errors[1024];
        av_strerror(ret, errors, 1024);
        std::cerr<<"failed to open video capture device:"<<errors<<std::endl;
        return -1;
    }  

    //读取视频帧数据
    while((av_read_frame(fmt_ctx, &pack_data) == 0) && (count++ < 100)) 
    {
        std::string yuvfile="picture_yuv/"+std::to_string(count)+".yuv";
        FILE *yuv_pic_file = fopen(yuvfile.c_str(), "wb+");
        fwrite(pack_data.data, 1, pack_data.size, yuv_pic_file);
        fclose(yuv_pic_file);

        av_packet_unref(&pack_data); // release package data
    }

    return 0;
}


http://www.kler.cn/a/413304.html

相关文章:

  • 阿里发布 EchoMimicV2 :从数字脸扩展到数字人 可以通过图片+音频生成半身动画视频
  • 从零开始学 Maven:简化 Java 项目的构建与管理
  • java的synchronized有几种加锁方式
  • Leetcode 面试150题 88.合并两个有序数组 简单
  • 利用浏览器录屏
  • IntelliJ IDEA 中,自动导包功能
  • springboot学习-分页/排序/多表查询的例子
  • 如何在CodeIgniter中添加或加载模型
  • 2024年11月24日Github流行趋势
  • 道格拉斯-普克算法(Douglas-Peucker algorithm)
  • Android Audio实战——音频多声道基础适配(七)
  • windows 服务器角色
  • 使用guzzlehttp异步多进程实现爬虫业务
  • 【SpringCloud详细教程】-04-服务容错--Sentinel
  • Fiddler导出JMeter脚本插件原理
  • 安卓 获取 喇叭 听筒 音频输出流 AudioPlaybackCapture API 可以捕获音频输出流
  • 如何提升爬虫的效率和稳定性?
  • 【WRF后处理】WRF模拟效果评价及可视化:MB、RMSE、IOA、R
  • tcp、http、rpc的区别
  • 设计模式之破环单例模式和阻止破坏
  • UPLOAD LABS | UPLOAD LABS 靶场初识
  • 工作学习:切换git账号
  • SSD(Single Shot MultiBox Detector)目标检测
  • 【R库包安装】R库包安装总结:conda、CRAN等
  • 【03】Selenium+Python 八种定位元素方法
  • js高级06-ajax封装和跨域