avformat_open_input()。该函数用于打开多媒体数据并且获得一些相关的信息
1.
注意,在源文件中添加cpp代码后在项目属性中才会出现C/C++,随后添加ffmpeg库。
在项目属性中选择debug,X64的话代码上方的配置也要这么选(win32指的是32位,我们的ffmpeg库下载的是64位的,不兼容)
2.
代码做了什么?
先设置视频文件路径,
再进行参数设置,网络库初始化,
设置一个解封装上文类型指针IC,
再打开我们的多媒体文件,并开辟一个空间用于存放相关的信息,并将IC指向该空间
最后如果打开失败则打印failed,成功则打印success
#include<iostream>
extern "C"
{
#include "libavformat/avformat.h" //头文件不仅要在项目中鼠标点击配置,在代码中也要引入
}
using namespace std;
#pragma comment(lib,"avformat.lib")
#pragma comment(lib,"avutil.lib")
int main(int argc,char *argv[])
{
const char* path = "E:\\ffmpeg\\test.mp4";
cout << "TEST DEMUX" << endl;
//初始化封装库
//av_register_all()被弃用了
AVDictionary* opts = NULL;//参数设置,比如rtsp的延时时间
av_dict_set(&opts, "rtsp_transport", "tcp", 0);//设置rtsp流以tcp协议打开
av_dict_set(&opts, "max_delay", "500", 0);//网络延迟时间
//初始化网络库(可以打开rtsp,rtmp,http协议的流媒体视频)
avformat_network_init();
//解封装上下文
AVFormatContext* ic = NULL;//将其地址做为输入,会申请一块空间,将这块空间的地址赋给ic
//解封装上下文AVFormatContext,是存储音视频封装格式中包含信息的结构体。
int re=avformat_open_input(&ic,path,0,&opts);//0表示自动选择解封装器,设置一个返回值知道有无错误
if (re != 0)
{
char buf[1024] = { 0 };
av_strerror(re, buf, sizeof(buf) - 1);
cout << "open" << path << "failed!:" << buf << endl;
getchar();
return -1;
}
cout << "open " << path << " success!" << endl;
getchar();
return 0;
}
路径要用//,不然可能会被判断为转义字符
getchar()函数在控制台中通过键盘输入数据时,以回车键作为结束标志。
当输入其他字符时不会停掉弹出来的小框框,只有输入回车时才会停止掉。.
3.成功打开: