FFMPEG系列课程(一)打开视频解码器
测试环境:windows10
开发工具:VS2013
从今天开始准备些FFmpeg的系列教程,今天是第一课我们研究下打开视频文件和视频解码器。演示环境在windows上,在Linux上代码也是一样。
windows上可以不编译ffmpeg源码,后面我会分别讲解在linux和在windows上如何编译ffmpeg,直接在FFmpeg官网下载已经编译好的dll和lib文件,下载地址https://ffmpeg.zeranoe.com/builds/ 或者www.ffmpeg.club 里面有32位和64位的,我下载的32位。
//引用ffmpeg头文件,我这边是C++必须加上extern "C",ffmpeg都是c语言函数,
//不加会链接失败,找不到定义
extern "C"
{
#include<libavformat/avformat.h>
}
//引用lib库,也可以在项目中设置,打开视频只需要用到这三个库
#pragma comment(lib,"avformat.lib")
#pragma comment(lib,"avutil.lib")
#pragma comment(lib,"avcodec.lib")
#include <iostream>
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: %s\n", path, errorbuf);
return -1;
} //遍历视频流,里面包含音频流,视频流,或者字母流,我们这里只处理视频
for (int i = 0; i < ic->nb_streams; i++)
{
AVCodecContext *enc = ic->streams[i]->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;
} }
}
}
其他的视频教程资料可以参考
C++ FFMpeg+Qt5开发播放器
FFMPEG系列课程(一)打开视频解码器的更多相关文章
- ffmpeg打开视频解码器失败:Could not find codec parameters for stream 0 (Video: h264): unspecified size
在使用ffmpeg进行拉流分离音视频数据再解码播放操作的时候: 有时候经常会报错: Could not find codec parameters for stream 0 (Video: h264) ...
- FFmpeg(8)-打开音视频解码器,配置解码器上下文(avcodec_find_decoder()、avcodec_alloc_context3())
一.avcodec_find_decoder 获取解码器.在使用之前必须保证所用到的解码器已经注册,最简单的就是调用avcodec_register_all() 函数,就像之前注册解封装器的时候,也要 ...
- 最简单的基于FFmpeg的移动端例子:IOS 视频解码器-保存
===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...
- 最简单的基于FFmpeg的移动端样例:Android 视频解码器-单个库版
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- 最简单的基于FFmpeg的移动端样例:IOS 视频解码器
===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...
- ASP.NET MVC框架开发系列课程 (webcast视频下载)
课程讲师: 赵劼 MSDN特邀讲师 赵劼(网名“老赵”.英文名“Jeffrey Zhao”,技术博客为http://jeffreyzhao.cnblogs.com),微软最有价值专家(ASP.NET ...
- 最简单的基于FFmpeg的直播系统开发移动端例子:IOS 视频解码器
本文记录IOS平台下基于FFmpeg的视频解码器.该示例C语言的源代码来自于<最简单的基于FFMPEG+SDL的视频播放器>.相关的概念就不再重复记录了. 源代码 项目的目录结构如图所示. ...
- javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片
javacpp-ffmpeg系列: javacpp-FFmpeg系列之1:视频拉流解码成YUVJ420P,并保存为jpg图片 javacpp-FFmpeg系列之2:通用拉流解码器,支持视频拉流解码并转 ...
- ffdshow 源代码分析 7: libavcodec视频解码器类(TvideoCodecLibavcodec)
===================================================== ffdshow源代码分析系列文章列表: ffdshow 源代码分析 1: 整体结构 ffds ...
随机推荐
- fork/join概述
Fork/Join是java 7 解决并发问题的解决方案. 是 java内部并行框架.核心思想分别为拆分任务和结果合并,在核心思想外,为了提高cpu多核的利用率,设计了工作窃取算法,并将工作队列设计为 ...
- vue 中引用jquery
1.安装jquery npm install jquery --save-dev 2.打开配置文件webpack.base.conf.js 加入'jquery': path.resolve(__dir ...
- 万能pb_ds头文件—bits/extc++.h
c++中自带了一些非常强大却鲜为人知的功能库—pd_ds库 里面含有红黑树(rb_tree),哈希表(gp_hash_table),可持久化平衡树(rope)等超强数据结构 但是有一件非常令人头痛的事 ...
- SuperMap -WebGL 实现地球的背景透明并显示自定义图片
实现效果如图: 实现代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- android中的相对路径
转载请标明出处:https://www.cnblogs.com/tangZH/p/9939655.html 1.同个文件夹访问 D:\Java\main\A.java D:\Java\main\B. ...
- 支持scrollTo的RecycleView
RecycleView内部没有帮我们实现ScrollTo的方法,不过帮我们实现了ScrollBy,我们可以通过ScrollBy自定义一个支持scrollTo的RecycleView. public c ...
- Cs231n课堂内容记录-Lecture 9 深度学习模型
Lecture 9 CNN Architectures 参见:https://blog.csdn.net/qq_29176963/article/details/82882080#GoogleNet_ ...
- 电信中兴F460光猫sendcmd命令
1.安装xshell后,使用命令行登陆root用户,root用户密码Zte521(湖北地区) 2.查看所有用户密码 sendcmd 1 DB p DevAuthInfo 3.打开网页登陆teleco ...
- 为archlinux选择国内镜像
pacman-mirrors --country China && pacman -Syyu
- Html 解决数字和字母不换行
在html页面中,如果是数字或者字母显示的话,默认是不换行的.一般显示成这种: 解决方法确实也很简单,设置td或者div为: style="word-break:break-all;&quo ...