zoukankan      html  css  js  c++  java
  • FFmepg 如何在 window 上使用?

    1. 下载FFmepg官网库直接使用即可。
    avdevice.lib
    avcodec.lib
    avfilter.lib
    avformat.lib
    avutil.lib
    postproc.lib
    swresample.lib
    swscale.lib
    
    // ConsoleFFmpeg.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include <string>
    #include <stdlib.h>
    
    //#define __STDC_CONSTANT_MACROS
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    #include "libavcodec/avcodec.h"		//编码/解码库
    #include "libavdevice/avdevice.h"	//特殊设备复合/复制库
    #include "libavfilter/avfilter.h"	//基于图形的框架编辑库
    #include "libavformat/avformat.h"		// I/O 格式库
    #include "libavutil/avutil.h"			//所有FFmpeg库共享的通用代码
    #include "libpostproc/postprocess.h"	//视频后处理库
    #include "libswresample/swresample.h"	//音频处理重采样,样本格式转换和混合的库
    #include "libswscale/swscale.h"			//颜色转换和缩放库
    #ifdef __cplusplus
    }
    #endif
    
    void show_dshow_device() 
    {
    	AVFormatContext *pFormatCtx = avformat_alloc_context();
    	AVDictionary* options = NULL;
    	//设置键值对数组
    	av_dict_set(&options, "list_devices", "true", 0);
    	AVInputFormat *iformat = av_find_input_format("dshow");
    	//ffmpeg -list_devices true -f dshow -i dummy  
    	avformat_open_input(&pFormatCtx, "video=dummy", iformat, &options);
            avformat_free_context(pFormatCtx);
    }
    
    int main()
    {
    	avdevice_register_all();
    	AVFormatContext *s = avformat_alloc_context();//分配一个结构体 free 释放
    	AVInputFormat *input = NULL;
    	AVOutputFormat *out = NULL;
    	input = av_input_video_device_next(input);
    	out = av_output_video_device_next(out);
    	while (out)
    	{
    		std::cout << "输出视频设备:" << out->name << " " << out->long_name << std::endl;
    		out = av_output_video_device_next(out);
    	}
    	while (input)
    	{
    		std::cout << "输入视频设备:" << input->name << " " << input->long_name << std::endl;
    		input = av_input_video_device_next(input);
    	}
    	show_dshow_device();
    	AVDeviceInfoList **device_list = NULL;
    	AVInputFormat * dshow = av_find_input_format("dshow");
    	AVInputFormat *avInput = NULL;
    	AVOutputFormat *avOut = NULL;
    	while (avInput)
    	{
    		std::cout << "xxx设备:" << avInput->name << " " << avInput->long_name << std::endl;
    		avInput = av_iformat_next(avInput);
    	}
    	while (avOut)
    	{
    		std::cout << "xxx设备:" << avOut->name << " " << avOut->long_name << std::endl;
    		avOut = av_oformat_next(avOut);
    	}
    	AVDeviceCapabilitiesQuery ** query = NULL;
    	AVDictionary ** device_options;
    	avformat_free_context(s);
    	system("pause");
        return 0;
    }
    
    /*
    int avformat_open_input	(	AVFormatContext ** 	ps,const char * url,AVInputFormat * fmt,AVDictionary ** options)
    */
    
    /*!
        枚举设备
        ffmpeg -list_devices true -f dshow -i dummy
        等价于如下代码
    */
    void listDShowDevice()
    {
        AVFormatContext *fmtCtx = avformat_alloc_context();
        AVDictionary *options = NULL;
        av_dict_set(&options,"list_devices","true",0);
        AVInputFormat *inputFmt = av_find_input_format("dshow");
        if(avformat_open_input(&fmtCtx,"video=dummy",inputFmt,&options) == 0){
            avformat_close_input(&fmtCtx);
            return;
        }
        avformat_free_context(fmtCtx);
    }
    
    /*!
        枚举指定图像设备分辨率大小
        ffmpeg -list_options true -f dshow -i video=device_name
        等价于如下代码
    */
    void listDShowDeviceOption(const char *deviceName)
    {
        AVFormatContext *fmtCtx = avformat_alloc_context();
        AVDictionary *options = NULL;
        av_dict_set(&options,"list_options","true",0);
        AVInputFormat *inputFmt = av_find_input_format("dshow");
        char buff[256] = {0};
        sprintf(buff,"video=%s",deviceName);
        if(avformat_open_input(&fmtCtx,buff,inputFmt,&options) == 0){
            avformat_close_input(&fmtCtx);
            return;
        }
        avformat_free_context(fmtCtx);
    }
    
  • 相关阅读:
    TensorFlow-Slim 简介+Demo
    AI 常见术语总结
    经典深度学习CNN总结
    YOLO V3 原理
    tf.app.run() 运行结束时,报错:SystemExit exception: no description
    VSCode中相对路径设置问题
    SSD算法原理
    机器学习-交叉熵原理
    tensorflow scope的作用
    水池进水和出水两个线程问题
  • 原文地址:https://www.cnblogs.com/cheungxiongwei/p/7773275.html
Copyright © 2011-2022 走看看