跟着雷神学FFmpeg(二)
引言
在前面已经扫盲式的恶补了相关的音视频的知识点,下面将根据雷神的思路写一些demo
书写第一个FFmpeg控制台程序
// FFmpegLen2.cpp : 定义控制台应用程序的入口点。
//
//#include "stdafx.h"
#include <stdio.h>//下面是为了兼容调用FFmpeg
#define __STDC_CONSTANT_MACROS#ifdef _WIN32
//Windows,告诉调用的是C语言
extern "C"
{
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
};
#else
//Linux...
#ifdef __cplusplus
extern "C"
{
#endif
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#ifdef __cplusplus
};
#endif
#endif
int _tmain(int argc, _TCHAR* argv[])
{//用于测试FFmpeg是否加载成功,打印出FFmpeg的配置信息,运行无误说明配置成功了printf("%s",avcodec_configuration());system("pause");return 0;
}
- 在调用的时候,需要简单的配置
- 在项目的属性中,C/C++ 常规添加头文件
- 链接中添加lib和依赖项
FFmpeg的解码函数
- av_register_all() 注册所有组件
- avformat_open_input() 打开输入视频文件
- avformat_find_stream_info() 获取视频文件信息
- avcodec_find_decoder() 查找编码器
- avcodec_open2() 打开编码器
- av_read_frame() 从输入文件读取一帧压缩数据
- AVPacket
- avcodec_decode_video2() 解码一阵压缩数据
- AVFrame
- avcodec_close() 关闭解码器
- avformat_close_input() 关闭输入视频文件
#FFmpeg解码的数据结构
AVFormatContext 要申请AVFormatContext 作为操作上下的线索是核心内容
AVFormatContext 包含了
- AVInputFortmat 文件的封装格式
- AVStream 是个数组,一般视频就是两个,视频流和音频流,AVStream[0]视频流,AVStream[1]音频流
- AVCodecContext 处理编解码,分装格式在编解码之上
- AVCodec 每个解码器都会拥有一个自己的静态对像,每种音视频对应一个结构体
- AVPacket 存储一帧压缩编码数据
- AVFrame 存储一帧解码后像素(采样)数据
跟着雷神学FFmpeg(二)相关推荐
- 跟着雷神学FFmpeg(一)
引言 在网上看到很多的资料,都没有雷神讲的好,下面以一个初学者的角度,去总结FFmpeg,对音视频没有任何基础的做一些基础知识的扫盲. 并且做一些C++的demo,以供学习 目录 封装格式(MP4,r ...
- 跟着狂神学Redis(NoSql+环境配置+五大数据类型+三种特殊类型+Hyperloglog+Bitmap+事务+Jedis+SpringBoot整合+Redis持久化+...)
跟着狂神学Redis 狂神聊Redis 学习方式:不是为了面试和工作学习!仅仅是为了兴趣!兴趣才是最好的老师! 基本的理论先学习,然后将知识融汇贯通! 狂神的Redis课程安排: nosql 讲解 阿 ...
- 跟着狂神学SpringCloud(Rest环境搭建+Eureka服务注册与发现+ribbon+Feign负载均衡+Hystrix+服务熔断+Zuul路由网关+SpringCloud config分布)
跟着狂神学SpringCloud SpringCloud 回顾之前的知识- JavaSE 数据库 前端 Servlet Http Mybatis Spring SpringMVC SpringBoot ...
- FFmpeg二次开发
本文主要讲解 FFmpeg 的二次开发,ffmpeg.exe 的命令行功能特别强大,很多需求都能直接用命令行实现,但是总有一些需求用 命令行实现不太好做. 而你实现那些特殊需求,通常需要把 ffmpe ...
- ffmpeg (二):ffmpeg结合SDL2.0解码视频流
转自:http://blog.csdn.net/oldmtn/article/details/20284721 看了http://blog.csdn.NET/leixiaohua1020/articl ...
- 深入浅出FFMPEG(二) SDK version 0.11
用户接口 数据结构 基本概念 编解码器.数据帧.媒体流和容器是数字媒体处理系统的四个基本概念. 首先需要统一术语: 容器/文件(Conainer/File):即特定格式的多媒体文件. 媒体流(Stre ...
- 跟着狂神学Docker(精髓篇)
容器数据卷 什么是容器数据卷 docker的理念回顾 将应用和环境打包成一个镜像! 数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化 MySQL,容器删除了,删库跑路!需 ...
- javaweb总——注:跟着狂神学的
1.JavaWeb 1.1基本概念 web开发: web:网页的意思, www.baidu.com 静态网页web html 提供给所有人看的数据始终不会发生改变 动态web 淘宝,几乎是所有的网站都 ...
- 跟着大神学zookeeper分布式锁实现-----来自Ruthless
前几天分享了@Ruthless大神的Redis锁,发现和大家都学习了很多东西.因为分布式锁里面,最好的实现是zookeeper的分布式锁.所以在这里把实现方式和大家分享一下. zookeeper分布式 ...
最新文章
- AI一分钟 | 特朗普以国家安全为由否决博通收购高通;阿里发起时尚AI算法大赛
- python构造icmp数据包_如何在python中构造ICMP数据包
- java ipv6校验_JS及java验证 IPV6,IPV4地址的 正则表达式 | 学步园
- MySQL-5.5.33主从复制
- java integer最大值_五分钟学会java中的基础类型封装类
- mysql分页概念_MySQL学习笔记之数据定义表约束,分页方法总结
- [总结]用U盘安装Ubuntu 16.04
- 机器学习和算法学习网址
- java实现mqtt服务端_基于Swoole使用MQTT协议连接阿里云物联网平台设备实现消息订阅
- wifi连指定ssid和password
- 协同过滤推荐算法详解
- C语言判断100以内的素数的两种方法
- endnote找不到国标_电动车新国标实施首日,实况如何?遇到这些问题别急!
- 毕达哥拉斯定理/勾股定理
- Dedecms错误警告:连接数据库失败,可能数据库密码不对或数据库服务器出错怎么解决?
- Scrapy学习笔记(3)爬取知乎首页问题及答案
- Tenda u6 免驱无线网卡无法连接这个网络解决办法
- 计算机打开文件的原理,电脑删除文件是怎么实现的?它的原理是什么?
- 蓝桥杯 调和级数 Java
- python按回车_python中回车键