测试环境:windows10

开发工具:VS2013

从今天开始准备些FFmpeg的系列教程,今天是第一课我们研究下打开视频文件和视频解码器。演示环境在windows上,在linux上代码也是一样。

windows上可以不编译ffmpeg源码,后面我会分别讲解在linux和在windows上如何编译ffmpeg,直接在FFmpeg官网下载已经编译好的dll和lib文件,下载地址https://ffmpeg.zeranoe.com/builds/ 里面有32位和64位的,我下载的32位。

//引用ffmpeg头文件,我这边是C++必须加上extern "C",ffmpeg都是c语言函数, //不加会链接失败,找不到定义 extern "C" {#include } //引用lib库,也可以在项目中设置,打开视频只需要用到这三个库 #pragma comment(lib,"avformat.lib") #pragma comment(lib,"avutil.lib") #pragma comment(lib,"avcodec.lib") #include using namespace std; int main(int argc,char *argv

) {//初始化所以ffmpeg的解码器av_register_all();char path

1024

= "video.mp4";//用来存放打开的视频流信息AVFormatContext *ic = NULL;//用来存储视频流索引int videoStream = 0;//打开视频播放流//path参数表示打开的视频路径,这个路径可以包括各种视频文件//也包括rtsp和http网络视频流//第三个参数表示传入的视频格式,我这边不传递有FFmpeg内部获取//最后一个参数是设置,我们这里也不传递int re = avformat_open_input(&ic, path, 0, 0); if (re != 0) {//获取到FFmpeg的错误信息char errorbuf

1024

= {0} av_strerror(re, errorbuf, sizeof(errorbuf)); printf("open %s failed: %sn", path, errorbuf); return -1; } //遍历视频流,里面包含音频流,视频流,或者字母流,我们这里只处理视频 for (int i = 0; i nb_streams; i++) { AVCodecContext *enc = ic->streams

->codec; //确认是视频流 if (enc->codec_type == AVMEDIA_TYPE_VIDEO) {//存放视频流索引,后面的代码要用到videoStream = i;//找到解码器,比如H264,解码器的信息也是ffmpeg内部获取的AVCodec *codec = avcodec_find_decoder(enc->codec_id);if (!codec) { printf("video code not find!n"); return -2; }//打开视频解码器,打开音频解码器用的也是同一个函数 int err = avcodec_open2(enc, codec, NULL); if (err != 0) { char buf

1024

= { 0 }; av_strerror(err, buf, sizeof(buf)); printf(buf); return -3; }}}

更多的资料也可以关注我51CTO上的视频课程

手把手教您开发视频播放器

http://edu.51cto.com/course/course_id-8059.html

FFmpeg 教程_FFmpeg视频解码教程_Windows10 FFmpeg开发环境配置

免责声明:本站为个人博客,博客所发布的一切修改补丁、注册机和注册信息及软件的文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关,您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。 访问和下载本站内容,说明您已同意上述条款。本站为非盈利性站点,VIP功能仅仅作为用户喜欢本站捐赠打赏功能,本站不贩卖软件,所有内容不作为商业行为。