概要
- 使用的是截止目前最新的ffmpeg-4.2.1版本,接口使用的也都是最新的,废弃的接口本次不涉及。本次主要记录读取H264文件,解码成YUV420P格式。
- PS:整理这篇文章晚了几天,刚下载该版本时还没有发布4.2.2版本,2019-12-31刚发布了4.2.2的版本,只是小版本号发生了变化,API接口原型不会有变化,理论上也是适用4.2.2版本的。
- 本次讲解的是windows C++版本的代码示例,由于时间关系暂不整理Linux版本的,后续会移植到Linux上面。
FFmpeg官网
- 官网源码:http://ffmpeg.org/download.html#get-sources
- 官网提供windows的开发版本:https://ffmpeg.zeranoe.com/builds/
- 官网提供Linux的开发版本:https://johnvansickle.com/ffmpeg/
windows vs2013 编译环境配置
- 获取官网提供windows的开发版本和运行版本,当然也可以自己编译
- ffmpeg-20191224-287620f-win64-dev.zip 是编译时依赖的库和头文件,解压到当前的工程目录下,命名为ffmpeg-win64-dev
- ffmpeg-20191224-287620f-win64-shared.zip 是运行时依赖的库,解压其中的动态库供运行时使用
- 配置vs字符集为多字符集(当时用的环境)
- 配置C++包含目录:$(ProjectDir)ffmpeg-win64-dev\include
- 配置预处理:_CRT_SECURE_NO_WARNINGS
- 配置连接器的附加依赖项及库目录
avcodec.lib
avdevice.lib
avfilter.lib
avformat.lib
avutil.lib
postproc.lib
swresample.lib
swscale.lib
- 配置连接器的附加库目录: $(ProjectDir)ffmpeg-win64-dev\lib
- 将vs工程配置成x64工程:配置管理器->Release->x64->平台->新建->x64->复制从win32
C++ 代码如下
// DecH264ToYuv420.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include "stdlib.h"
#include <string.h>
#include <math.h>
#include <chrono> //C++11时间类标准模板库
#include <fstream>
using namespace std;
extern "C"{
#include "libavformat/avformat.h"
#include "libavcodec/avcodec.h"
#include "