播放器实战04 av_format打开MP4文件

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.成功打开:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值