2017.11.21 正式开始FFmpeg的学习 学习充实自己提高自己
来源:互联网 发布:java校验图片尺寸 编辑:程序博客网 时间:2024/05/16 12:08
关于音视频编解码等一系列知识,打算实际操作一个demo代码然后通过代码深入学习ffmpeg,下列代码打算:ffmpeg作编解码,SDL作视频音频显示。
1.vc下FFmpeg开发环境的搭建:头文件(.h)拷贝到项目文件的include子文件夹下;(.lib)拷贝到项目的lib子文件夹下;(.dll)拷贝到项目文件夹下。
2.FFmpeg一共8个库:
1.avcodec:编解码(最重要的库)
2.avfomat:封装格式处理
3.avfilter:滤镜特效处理
4.avdevice:各种设备的输入输出
5.avutil:工具库(大部分库都需要这个库的支持)
6.postproc:后加工
7.swresample:音频采样数据格式转换
8.swscale:视频像素数据格式转换
3.FFmpeg解码流程图:
av_register_all()----------->
avformat_open_input()------------->
avfomat_find_stream_info()--------------------->
avcodec_find_decoder()-------------->
avcodec_open2()------------------>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
av_read_frame()---->Get Packet?------------->(TRUE)AVPacket------------>avcodec_decode_vodeo2()----------->AVFrame--------------->Show On Screen.......
(FALSE)Close...
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
整个解码的流程大概是这样:
av_register_all(首先都会注册一下)------------>avfomat_open_input(打开输入的文件)----------------------------->avfomat_find_stream_info(查找视频流相关信息)
----------------->avcodec_find_decoder(根据视频流相关信息,查找对应的解码器)------------------->avcodec_open2(打开查找到的解码器)
----------------->av_read_frame(开始循环读取一帧一帧的视频流数据)---------------------->如果读取失败则度到了文件末尾,则关闭。-------------------->如果读取成功---------------->AVPacket(调用该函数,该函数里放的是H。264这样形式的数据)----------------------->avcodec_decode_video2(真正的开始进行解码)--------------------------->AVFrame(该函数里放的是YUV此类型的像素数据)----------->Show On Screen
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FFmpeg解码的数据结构体:
----------->AVInputFomat(说明编码其类型以及封装格式有哪些)
|
AVFomatContext(Audio And Vdieo封装格式上下文)----------->AVStream[0](视频流)-------->AVCodecContext(视频流上下文)------>AVCodec(指明了编码器类型)
|
---------->AVStream[1](音频流)--------->AVCodecContext(音频流上下文)------>AVCodec(指明了编码器类型)
AVPaket(解码前保存的一帧一帧的数据)--------------------->Decode------------------------->AVFrame(解码后保存的一帧一帧的数据)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
FFmpeg数据结构体简介:
AVFomatContext:封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装格式相关信息。
AVInputFormat:每种封装格式(例如FLV,MKV,MP4,AVI)对应一个该结构体
AVStream:视频文件中每个视频/音频流对应一个该结构体
AVCodecContext:编码器上下文结构体,保存了视频音频编解码相关信息
AVcodec:每种音视频编解码器(例如H264解码器)对应一个该结构体
AVPacket:存储一帧压缩编码数据
AVFrame:存储一帧解码后像素(采样)数据
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
几个结构体的初始化销毁函数列表:
结构体
初始化
销毁
AVFormatContext
avformat_alloc_context()
avformat_free_context()
AVIOContext
avio_alloc_context()
AVStream
avformat_new_stream()
AVCodecContext
avcodec_alloc_context3()
AVFrame
av_frame_alloc();
av_image_fill_arrays()
av_frame_free()
AVPacket
av_init_packet();
av_new_packet()
av_free_packet
https://wenku.baidu.com/view/21edbceedc3383c4bb4cf7ec4afe04a1b071b081.html
http://blog.csdn.net/ethercat_i7/article/details/52858758
- 2017.11.21 正式开始FFmpeg的学习 学习充实自己提高自己
- 毕业了!开始学习,努力充实自己!
- 用学习来充实自己
- 正式开始记录自己学习历程
- 正式开始写自己的java&android学习博客
- 正式入住CSDN,开始自己的算法学习
- 充实自己从读书开始
- 充实自己的博客
- 学习从自己开始
- 充实自己
- 如果提高自己的学习能力
- 如何提高自己的学习能力
- 学习别人的东西,提高自己
- 正式开始玩自己的博客了
- 正式开始管理自己的博客
- 正式开始写自己的博客
- 做一个充实的自己
- 给自己一个充实自己的机会
- input type=file accept中可以限制的文件类型
- nodejs window下安装与配置淘宝镜像
- tensorflow 简单测试例程
- 机器学习之线性回归:算法兑现为python代码
- Javaweb中的绝对路径和相对路径(简单易懂)
- 2017.11.21 正式开始FFmpeg的学习 学习充实自己提高自己
- leetcode 279. Perfect Squares
- 手动安装docker-ce版本
- kubeadm快速部署kubernetes(HA)
- python脚本,完成mulan项目的输入文件生成
- 使用Python模拟蒙蒂霍尔悖论游戏
- Launcher壁纸来源
- Word2010中插入自定义的图片作为项目符号
- 关于CameraDS类