ffmpeg打开视频文件

本文ffmpeg的版本为当前最新的5.01版本,与网络上常见的2,3版本在函数和变量的使用上有较大差异。

 首先往工程目录里放进去一个视频文件,这样方便在代码中进行路径书写(偷懒)。当然代码中的注释也会提示如何直接完整书写视频的路径。

#include<iostream>

extern "C"
{
#include "libavformat/avformat.h" //头文件不仅要在项目中鼠标点击配置,在代码中也要引入
}
using namespace std;

int main(int argc, char *argv[])
{
	const char* path = "ds.mov";//记录视频源文件的路径,这里视频文件ds.mov直接放在项目工程里面了,所以可以直接用视频名称
	//如果视频不在项目工程里面,路径的书写格式举例:D:\\code of visual studio\\ffmpegTest\\ffmpegTest\\ds.mov
	//路径要使用“\\”,不然会被视为转义字符
	cout << "TEST DEMUX" << endl;

	//初始化封装库
	//在新版本中av_register_all()被弃用了,可以根据代码里有无此函数判断ffmpeg版本

	//初始化网络库(可以打开rtsp,rtmp,http协议的流媒体视频)
	avformat_network_init();

	//解封装上下文
	AVFormatContext* ic = NULL;//将其地址做为输入,会申请一块空间,将这块空间的地址赋给ic
	//解封装上下文AVFormatContext,是存储音视频封装格式中包含信息的结构体。

	int re = avformat_open_input(&ic, path, 0, nullptr);//0表示自动选择解封装器,设置一个返回值知道有无错误
	if (re != 0)//如果返回值不是0,说明打开出现错误
	{
		char buf[1024] = { 0 };
		av_strerror(re, buf, sizeof(buf) - 1);//记录错误
		cout << "open" << path << "failed!:" << buf << endl;//提示错误
		return -1;
	}
	cout << "open " << path << " success!" << endl;//提示成功
	return 0;
}

 视频文件打开成功显示结果如上图所示。

实现打开视频的核心函数是:

int re = avformat_open_input(&ic, path, 0, nullptr);

该函数会根据文件路径path中的内容判断文件的格式(例程中为ds.mov),随后根据格式来选择使用何种Demuxer进行打开操作。如果视频文件的格式为flv,则Demuxer的选择为ff_flv_demuxer,因此后续对应的关键生命周期的方法read_header、read_pocket等都会使用该flv文件的Demuxer中函数指针指定的函数。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值