测试环境: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<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;
}}}

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

夏老师的课堂 http://edu.51cto.com/lecturer/12016059.html

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

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

转载于:https://blog.51cto.com/xiacaojun/1886399

FFMPEG系列课程(一)打开视频解码器相关推荐

  1. 轻松学Linux系列课程-赵永刚-专题视频课程

    轻松学Linux系列课程-4263人已学习 课程介绍         从0开始,Linux云计算系列课程,包含Linux初级运维.运维.初级架构师.云计算运维及开发..... 课程收益      讲师 ...

  2. ffmpeg打开视频解码器失败:Could not find codec parameters for stream 0 (Video: h264): unspecified size...

    在使用ffmpeg进行拉流分离音视频数据再解码播放操作的时候: 有时候经常会报错: Could not find codec parameters for stream 0 (Video: h264) ...

  3. FFmpeg教程(三)视频解码器

    视频解码知识 纯净的视频解码流程 压缩编码数据->像素数据. 例如解码H.264,就是"H.264码流->YUV". 一般的视频解码流程 视频码流一般存储在一定的封装格 ...

  4. 【FFmpeg 系列】 SDL 音视频渲染(七)

    1.SDL 介绍 SDL(Simple DirectMedia Layer):一个简单的多媒体层 由 C 语言实现的跨平台的媒体开源库 多用于开发游戏.模拟器.媒体播放器等多媒体应用领域 版本:SDL ...

  5. 5d4的白平衡模式_佳能5D4/5D3/6D2系列中高端单反相机和全画幅微单EOS R专题系列课程...

    [相机市场谁老大?佳能连续18年全球可更换镜头相机市场份额第一]佳能宣布,从2003年到2020年佳能连续18年全球可更换镜头相机市场份额(台数)第一名,包括数码单反以及微单相机. 2019-2020 ...

  6. 【FFmpeg_SDL_MFC】1、FFMPEG视频解码器

    使用ffmpeg对封装格式mp4.ts等数据进行解码,介绍解码相关流程,函数接口.数据接口等. 一.前言 1.1目录 • 视频解码知识 • VC下FFmpeg开发环境的搭建 • 示例程序运行 • FF ...

  7. 最简单的基于FFmpeg的移动端例子:IOS 视频解码器

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

  8. 最简单的基于FFmpeg的移动端例子:Android 视频解码器-单个库版

    ===================================================== 最简单的基于FFmpeg的移动端例子系列文章列表: 最简单的基于FFmpeg的移动端例子:A ...

  9. 音视频开发之旅(34) - 基于FFmpeg实现简单的视频解码器

    目录 FFmpeg解码过程流程图和关键的数据结构 mp4通过FFmpeg解码YUV裸视频数据 遇到的问题 资料 收获 一.FFmpeg解码过程流程图和关键的数据结构 FFmpeg解码涉及的知识点比较多 ...

最新文章

  1. Java B2B2C o2o多用户商城 springcloud架-企业云架构common-service代码结构分析
  2. 环信 之 通信过程及聊天记录保存
  3. 生僻字(通信工程版)
  4. python登录网站 爬虫_Python爬虫如何使用Cookies登录网站
  5. 天大c语言离线考核答案,【天大考核】2019年秋学期考试《公共关系学》离线作业考核试题答案100分...
  6. linux php没有bin,php - 执行Linux命令没有报错但也没有输出
  7. pn532跳坑小指南
  8. RAC安装时,报The specified nodes are not clusterable 的解决方法
  9. android实现填空模式
  10. “蓝脑”计划:人造大脑的可能性 文化·探索 CCTV_com
  11. JAVA小白启蒙篇:第一个SSM框架搭建示例(附源码下载)
  12. 流媒体技术基础-流媒体服务与框架【38款 流媒体服务器开源软件】
  13. Virtual KD 出现 Still cannot find RPC dispatcher table 无法连接
  14. 涉密计算机涉密存储设备或者改作其他用途的,将未经安全技术处理的退出使用的涉密计算机涉密存储设备或者改作其他用途的依法给予处分...
  15. 【自动化营销】跨境电商高效进行WhatsApp营销技巧!
  16. 服务器的ras性能指标,Memory RAS Configuration
  17. C语言解题——从今天开始入坑C语言
  18. 【Transformer】继续学习:Attention,Self-Attention,Multi-head Attention。
  19. 21种优化产品转化率的设计技巧
  20. 消息队列的消费幂等性如何保证

热门文章

  1. 【linux】用户空间(0-3G):进程私有,内核空间(3G-4G):所有进程共享
  2. 卷积神经网络(Convolutional Neural Networks,CNNS/ConvNets)
  3. MyBatis入门HelloWorld,注解实现
  4. 学习linux之用户-文件-权限操作
  5. Java Web开发Tomcat中三种部署项目的方法
  6. java web hello world(一)
  7. c++抛出异常与栈展开(stack unwinding)
  8. ASP.NET WebAPI String 传值问题
  9. uoj22 外星人(dp)
  10. webpack4.x加vue模板文件简单还原vue-cli