官网:http://ffmpeg.org/documentation.html

http://ffmpeg.org/ffmpeg.html

简介:https://blog.csdn.net/qq_36688143/article/details/79162121

使用:https://www.cnblogs.com/leisure_chn/p/10040202.html

ffmpeg中文网站:http://www.ffmpeg.club

ffmpeg论坛:http://bbs.chinaffmpeg.com/forum.php

ffmpeg:腾讯云社区:https://cloud.tencent.com/developer/article/1072264

基础总结:https://blog.csdn.net/weixin_38372482/article/details/79703703

雷神:https://blog.csdn.net/leixiaohua1020/category_9262578.html

ffmpeg参数中文详细解释:https://blog.csdn.net/leixiaohua1020/article/details/12751349

图像算法ISP:https://blog.csdn.net/lz0499/article/details/71156291

DTS和PTS的解释:https://blog.csdn.net/ai2000ai/article/details/77367481

H.264码流:VBR、ABR、CBR:https://blog.csdn.net/ivy_reny/article/details/47144993

四种简单的图像显著性区域特征提取方法-----AC/HC/LC/FT。https://blog.csdn.net/wangyaninglm/article/details/44020489

码率(Bitrate)、帧率(FPS)、分辨率和清晰度的联系与区别https://blog.csdn.net/pc9319/article/details/79621352

数字视频编码概述(熵编码/Huffman编码);https://blog.csdn.net/u013354805/article/details/50112353

图片大小计算(根据分辨率,位深度计算):https://blog.csdn.net/fr_han/article/details/8921641

FFMPEG结构体分析:https://blog.csdn.net/leixiaohua1020/article/details/14214577

FFmpeg编码支持与定制:不仅支持本地多媒体的处理,还支持网络流媒体的处理;FFmpeg本身支持一些音视频编码格式、文件封装格式、流媒体传输协议;但是数量有限,FFmpeg作为一套基础的框架,所有的音视频编码格式、文件封装格式、流媒体传输协议都可以作为FFmpeg的一个模块挂在在FFmpeg的框架中;这些模块以第三方外部库的方式提供支持,可通过./configure --enable-xx 添加或者./configure --disabel-xx去除;

查看第三方外部库:configure --help

查看支持的编码器: ./configure --list-encoders

查看支持的解码器: ./configure --list-decoders

查看支持的封装(复用)格式: ./configure --list-muxers

查看支持的解封装(解复用)格式: ./configure --list-demuxers

支持的流媒体协议: ./configure --list-protocols

产看ffmpeg的版本号:在ffmpeg文件夹下有一个RELEASE文件,里面放的是版本号;

基础概念:

容器/文件:特定格式的多媒体文件,比如mp4;

媒体流:表示时间轴上的一段连续的数据,

数据帧:编解码中最小处理单元,一般是压缩前的数据;

数据包:数据帧编解码后把多个帧组成包队列;用来存放编码后的视频帧数据;

复用器:音视频按照一定的规则放入容器,封装成特定格式就得到音视频文件;

解复用:把音视频文件按照一定的规则分解出来数据;

编解码器codec:以帧为单位实现压缩数据和原始数据之间的相互转换;

时钟:采样率,单个声音源输出只能设置一个采样率;单个声音源可以是单声道、多声道;

重采样:调整成和声卡时钟一样的频率;

dts:解码的时间,是AVPacket里的一个成员,表示压缩包应该什么时候被解码 ;如果视频里各帧的编码是按输入顺序(也就是显示顺序)依次进行的,那么解码和显示时间应该是一致的。可事实上,在大多数编解码标准(如H.264或HEVC,当出现B帧的时候)中,编码顺序和输入顺序并不一致。于是才会需要PTS和DTS这两种不同的时间戳。

pts:显示的时间,就是这一帧图像什么时候显示给用户;

gop:关键帧的周期.

根据包含关系从大到小顺序排列 :  序列(GOP)-> 帧(I/IDR/P/B)-> 片组 -> 片(slice)-> 宏块(Block)-> 块(Macro  Block)-> 像素(pixel)

1.宏块(Macro Block):是H.264编码的基本单位,一个编码图像首先要划分成多个块(4x4 像素)才能进行处理,显然宏块应该是整数个块组成,通常宏块大小为16x16个像素。

宏块分为I、P、B宏块:

I宏块只能利用当前片中已解码的像素作为参考进行帧内预测;

P宏块可以利用前面已解码的图像作为参考图像进行帧内预测;

B宏块则是利用前后向的参考图形进行帧内预测

2.片(Slice):一帧视频图像可编码成一个或者多个片,每片包含整数个宏块,即每片至少一个宏块,最多时包含整个图像的宏块。

片的目的:为了限制误码的扩散和传输,使编码片相互间保持独立。

片共有5种类型:I片(只包含I宏块)、P片(P和I宏块)、B片(B和I宏块)、SP片(用于不同编码流之间的切换)和SI片(特殊类型的编码宏块)。

以下是片的句法结构:

片头规定了片的类型、属于哪个图像、有关的参考图像等;片的数据包含了一系列宏块和不编码数据。

3.片组,是一个编码图像中若干宏块的一个子集,包含一个或若干个片。

一般一个片组中,每片的宏块是按扫描次序进行编码的,除非使用任意片次序(Arbitrary Slice Order, ASO)一个编码帧中的片之后可以跟随任一解码图像的片。

4.序列

参照一段时间内图像的统计结果表明,在相邻几幅图像画面中,一般有差别的像素只有10%以内的点,亮度差值变化不超过2%,而色度差值的变化只有1%以内。所以对于一段变化不大图像画面,我们可以先编码出一个完整的图像帧A,随后的B帧就不编码全部图像,只写入与A帧的差别,这样B帧的大小就只有完整帧的1/10或更小!B帧之后的C帧如果变化不大,我们可以继续以参考B的方式编码C帧,这样循环下去。这段图像我们称为一个序列(序列就是有相同特点的一段数据),当某个图像与之前的图像变化很大,无法参考前面的帧来生成,那我们就结束上一个序列,开始下一段序列,也就是对这个图像生成一个完整帧A1,随后的图像就参考A1生成,只写入与A1的差别内容。
    在H264协议里定义了三种帧,完整编码的帧叫I帧,参考之前的I帧生成的只包含差异部分编码的帧叫P帧,还有一种参考前后的帧编码的帧叫B帧。 H264采用的核心算法是帧内压缩和帧间压缩,帧内压缩是生成I帧的算法,帧间压缩是生成B帧和P帧的算法。在H264中图像以序列为单位进行组织,一个序列是一段图像编码后的数据流, 以I帧开始,到下一个I帧结束。一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。这样,如果前一个序列出现重大错误,在这里可以获得重新同步的机会。IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码。一个序列就是一段内容差异不太大的图像编码后生成的一串数据流。当运动变化比较少时,一个序列可以很长,因为运动变化少就代表图像画面的内容变动很小,所以就可以编一个I帧,然后一直P帧、B帧了。当运动变化多时,可能一个序列就比较短了,比如就包含一个I帧和3、4个P帧。

编码方式

CBR:静态编码,每一秒的码流都一样;

VBR:动态编码,根据画面的复杂程度调整码流;

ABR:平均码率,是VBR的一种,在一定范围内控制码流;ABR在指定的文件大小内,以每50帧(30帧约1秒)为一段,低频和不敏感频率使用相对低的流量,高频和大动态表现时使用高流量,可以做为VBR和CBR的一种折衷选择。

I帧,P帧,B帧:https://www.cnblogs.com/lifan3a/articles/6667489.html、https://blog.csdn.net/abcjennifer/article/details/6577934

I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成,压缩率7;P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面,压缩率20。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据);B帧是双向预测内插编码帧,也就是B帧记录的是本帧与前后帧的差别,B帧的压缩率高,但是解码时CPU会比较累;压缩率50;

h264的压缩方法:H264采用的核心算法是帧内压缩和帧间压缩,帧内压缩是生成I帧的算法,帧间压缩是生成B帧和P帧的算法。在H264中图像以序列为单位进行组织,一个序列是一段图像编码后的数据流,以I帧开始,到下一个I帧结束。一个序列就是一段内容差异不太大的图像编码后生成的一串数据流。当运动变化比较少时,一个序列可以很长,因为运动变化少就代表图像画面的内容变动很小,所以就可以编一个I帧,然后一直P帧、B帧了。当运动变化多时,可能一个序列就比较短了,比如就包含一个I帧和3、4个P帧。GOP,也就是一个序列;

1.分组:把几帧图像分为一组(GOP,也就是一个序列),为防止运动变化,帧数不宜取多。 
2.定义帧:将每组内各帧图像定义为三种类型,即I帧、B帧和P帧; 
3.预测帧:以I帧做为基础帧,以I帧预测P帧,再由I帧和P帧预测B帧; 
4.数据传输:最后将I帧数据与预测的差值信息进行存储和传输。

宏块: 在H.264中,句法元素被组织成五个层次:序列(sequence)、图像(frame/field-picture)、片(slice)、宏块(macroblock)、子块(sub-block)。https://blog.csdn.net/ivy_reny/article/details/47144121

宏块是编码处理的基本单元,通常宏块大小为16x16个像素。一个编码图像首先要划分成多个块(4x4 像素)才能进行处理,显然宏块应该由整数个块组成. 输入的帧或场Fn以宏块为单位被编码器处理。

视频压缩中,一幅图像(picture)可以分成一帧(frame)或两场(field)。在H.264中,一幅图像可以编码为一个或多个片(slice),每个slice由宏块组成,一个宏块由一个16×16亮度像素和附加的一个8×8 Cb和一个8×8 Cr彩色像素块组成。宏块是H.264编码的基本单位,可以采用不同的编码类型。slice共有5种类型。slice的目的是为了限制误码的扩散和传输,使编码片相互间保持独立。一个slice编码之后被打包进一个NALU(NALU相当一个片),NALU除了容纳slice还可以容纳其它数据,如序列参数集SPS、PPS、SEI等。

一个frame是可以分割成多个Slice来编码的,而一个Slice编码之后被打包进一个NAL单元,不过NAL单元除了容纳Slice编码的码流外,还可以容纳其他数据,比如序列参数集SPS。
(1)SODB:最原始 的编码数据,没有任何附加数据 
(2)RBSP:在 SODB 的基础上加了rbsp_stop_ont_bit(bit 值为 1)并用 0 按字节补位对齐 
(3)EBSP:在 RBSP 的基础上增加了防止伪起始码字节(0X03) 
(4)NALU是对RBSP的封装。而RTP之类的是对NALU的封装。

AVPacket:存储压缩数据(视频对应H.264等码流数据,音频对应AAC/MP3等码流数据);是存储压缩编码数据相关信息的结构体.这是典型的解复合器的输出然后塞入解码器,或者是接收编码器的输出然后塞入复合器(解复合器 --> AVPacket --> 解码器 --> YUV/RGB --> 编码器 --> AVPacket -->复合器);对视频而言, 它通常包含一个压缩帧. 对音频而言,则它可能包含多个压缩帧;AVPacket实际上可用看作一个容器,它本身并不包含压缩的媒体数据,而是通过data指针引用数据的缓存空间。对于多个Packet共享同一个缓存空间,FFmpeg使用的引用计数的机制(reference-count):当有新的Packet引用共享的缓存空间时,就将引用计数+1;当释放了引用共享空间的Packet,就将引用计数-1;引用计数为0时,就释放掉引用的缓存空间。一般是从视频流中读取每一帧放入AVpacket中,然后AVPacket插入到packet队列中;https://blog.csdn.net/davidsguo008/article/details/72628675

在使用av_packet_alloc创建packet的时候,并没有给数据域分配空间,数据域的空间是在av_read_frame内分
配的,所以在每次循环的结束不能忘记调用av_packet_unref减少数据域的引用技术,当引用技术减为0时,会自
动释放数据域所占用的空间。在循环结束后,调用av_packet_free来释放AVPacket本身所占用的空间。在将AVPacket加入缓冲队列如queue或deque时必须将原始的packet备份一份或者增加引用后再入队,否则该数据包会被释放。

AVStream是存储每一个视频/音频流信息的结构体,是一段连续的数据;视音频流对应的结构体;

AVCodec是存储编解码器信息的结构体.

AVIOContext是FFMPEG管理输入输出数据的结构体,输入输出对应的结构体,用于输入输出(读写文件,RTMP协议等);

AVFormatContext:统领全局的基本结构体。主要用于处理封装格式(FLV/MKV/RMVB等)。

AVCodecContext:用于视音频编解码。

AVFrame:存储非压缩的数据或者说是存储的是经过解码后的原始数据(视频对应RGB/YUV像素数据,音频对应PCM采样数据);

FFMPEG中结构体可以分成以下几类

a)        解协议(http,rtsp,rtmp,mms)

AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音频使用的封装格式。每种协议都对应一个URLProtocol结构。(注意:FFMPEG中文件也被当做一种协议“file”)

b)        解封装(flv,avi,rmvb,mp4)

AVFormatContext主要存储视音频封装格式中包含的信息;AVInputFormat存储输入视音频使用的封装格式。每种视音频封装格式都对应一个AVInputFormat 结构。

c)        解码(h264,mpeg2,aac,mp3)

每个AVStream存储一个视频/音频流的相关数据;每个AVStream对应一个AVCodecContext,存储该视频/音频流使用解码方式的相关数据;每个AVCodecContext中对应一个AVCodec,包含该视频/音频对应的解码器。每种解码器都对应一个AVCodec结构。

d) 存数据

视频的话,每个结构一般是存一帧;音频可能有好几帧,AVFrame(存储YUV像素数据)编码为AVPacket(存储H.264等格式的码流数据)

解码前数据:AVPacket

解码后数据:AVFrame

FFmpeg中的数据结构
AVFormatContext 封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装 格式相关信息。
iformat:输入视频的AVInputFormat
nb_streams :输入视频的AVStream 个数
streams :输入视频的AVStream []数组
duration :输入视频的时长(以微秒为单位)
bit_rate :输入视频的码率AVInputFormat 每种封装格式(例如FLV, MKV, MP4, AVI)对应一个该结构体。
name:封装格式名称
long_name:封装格式的长名称
extensions:封装格式的扩展名
id:封装格式ID
一些封装格式处理的接口函数AVStream 视频文件中每个视频(音频)流对应一个该结构体。
id:序号
codec:该流对应的AVCodecContext
time_base:该流的时基
r_frame_rate:该流的帧率AVCodecContext编码器上下文结构体,保存了视频(音频)编解码相关信息。
codec:编解码器的AVCodec
width, height:图像的宽高(只针对视频)
pix_fmt:像素格式(只针对视频)
sample_rate:采样率(只针对音频)
channels:声道数(只针对音频)
sample_fmt:采样格式(只针对音频)AVCodec 每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体。
name:编解码器名称
long_name:编解码器长名称
type:编解码器类型
id:编解码器ID
一些编解码的接口函数AVPacket 存储一帧压缩编码数据。
pts:显示时间戳
dts :解码时间戳
data :压缩编码数据
size :压缩编码数据大小
stream_index :所属的AVStreamAVFrame存储一帧解码后像素(采样)数据。
data:解码后的图像像素数据(音频采样数据)。
linesize:对视频来说是图像中一行像素的大小;对音频来说是音频帧的大小。
width, height:图像的宽高(只针对视频)。
key_frame:是否为关键帧(只针对视频) 。
pict_type:帧类型(只针对视频) 。例如I,P,B。

视频的录制原理:

解协议
将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如 HTTP,RTMP,或是 MMS 等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用 RTMP 协议传输的数据,经过解协议操作后,输出 FLV 格式的数据。

https://www.cnblogs.com/jiankeaibiancheng/p/4594094.htmlav_register_all():注册所有组件。avformat_open_input():打开输入视频文件。avformat_find_stream_info():获取视频文件信息。avcodec_find_decoder():查找解码器。avcodec_open2():打开解码器。av_read_frame():从输入文件读取一帧压缩数据。avcodec_decode_video2():解码一帧压缩数据。avcodec_close():关闭解码器。avformat_close_input():关闭输入视频文件。

编译FFmpeg:

进入FFmpeg的源码目录,执行./configure->make->make install;

默认编译的时候需要用到yasm汇编器对FFmpeg中的汇编部分进行编译;如果没有按准过yasm,则执行默认配置的时候会报错;如果用不到汇编部分的代码,则不需要安装yasm汇编器;可以使用--disable-yasm取消yasm编译配置;

安装汇编器:

1、下载 安装包http://www.tortall.net/projects/yasm/releases/2、解压文件
tar xzvf yasm.tar.gz3  切换目录
cd yasm-1.3.04、运行
./configure
//configure脚本会寻找最合适的C编译器,并生成相应的makefile文件5、编译文件
make6、安装软件
sudo make install说明:
(1) 多个终端命令也可以连写,命令与命令之间采用 && 来连接,这样多个命令就会顺序执行了
比如: ./configure && make  && sudo make install
(2) 其实很多 xxx.tar.gz 文件的安装方法都是3大步:第一步:  ./configure   主要是生成makefile文件第二步:   make 编译生成二进制安装文件第三步: sudo make install 或 make install 安装.

ffmpeg的文件夹进行卸载清理:make uninstall

确认Makefile中指定的config.mak(在ffmpeg根目录下ffbuild文件夹中)中:CONFIG_FFPLAY=yes,如果不是,则需要执行 ./configure --enable-shared   --enable-ffplay --prefix=/ffmpeg安装路径/ffmpeg

如果CONFIG_FFPLAY=yes前面有感叹号,说明在生成配置文件时由于某些原因并没有成功生成编译ffplay的配置,可能缺少SDL库;

查看ffplay是否成功:ffplay -version;

FFmpeg编译方法二:如果使用HomeBrew安装FFmpeg带ffplay功能,按照下面的方法:(要提前下载好SDL)

使用HomeBrew下载安装FFmpeg并且带有ffplay功能:
在之前的版本中如果想要使用ffplay,则需要在安装ffmpeg时指定安装ffplay
brew install ffmpeg --with-ffplay
现在要使用下面:
brew install ffmpeg --with-sdl2

ffmpeg主要是解封装、编解码;SDL主要是播放视频;

SDL官网:https://www.libsdl.org/ 

SDL库:下载http://www.libsdl.org/release/

文档:sdl联机文档.http://www.libsdl.org/archives/sdldoc-html.zip 或http://www.libsdl.org/archives/SDLRef.chm

参考:https://blog.csdn.net/qq_29350001/article/details/76113152

详细教程:https://blog.csdn.net/lf426/category_364048_1.html

SDL (Simple DirectMedia Layer)是一套开源代码的跨平台多媒体开发库,使用C语言写成。  Simple DirectMedia Layer(SDL)是一个跨平台开发库,主要提供对音频,键盘,鼠标,操纵杆的操作,通过OpenGL和Direct3D来实现直接访问图像硬件。 主要应用在视频播放软件,模拟器和游戏开发。让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS等)的应用软件。SDL是用C编写的,我们可以使用C ++开发,同时SDL也绑了一些其他几种语言,包括C#和Python。SDL的主要任务,便是完成图像的加载,渲染显示,其他方向都比较单薄

SDL将功能分成下列数个子系统(subsystem)

Video(图像)—图像控制以及线程(thread)和事件管理(event)。

Audio(声音)—声音控制
Joystick(摇杆)—游戏摇杆控制
CD-ROM(光盘驱动器)—光盘媒体控制
Window Management(视窗管理)-与视窗程序设计集成,不过android默认就是对应的surfaceView的窗口,只允许存在一个。
Event(事件驱动)-处理事件驱动

haptic 触摸事件响应

Time 时间管理

SDL库分为 Video、Audio、CD-ROM、Game、Joystick 和 Timer 等若干子系统,除此之外,还有一些单独的官方扩充函数库。这些库由官方网站提供,并包含在官方文档中,共同组成了SDL的“标准库”,具体如下:

SDL_image—支持时下流行的图像格式:BMP、PPM、XPM、 PCX、GIF、JPEG、PNG、TGA。

SDL_mixer—更多的声音输出函数以及更多的声音格式支持。支持常见的WAV,MP3,OGG等基础格式。

SDL_net—网络支持。

SDL_ttf—TrueType字体渲染支持。

SDL_rtf—简单的RTF渲染支持

如果需要安装的ffplay的话,由于ffplay依赖SDL,所以需要先安装SDL库.

SDL_image库的安装下载 http://www.libsdl.org/projects/SDL_image/release
解压下载的sdl-》cd到sdl文件-》执行./configure-》make-》make install;
查看版本:sdl2-config --version
下面的版本要更新:预先安libpng,否则png 格式不支持,RHEL自带了相关库执行
rpm -ivh libpng-1.2.10-7.i386.rpm
rpm -ivh libpng-devel-1.2.10-7.i386.rpm
预先安装libjpeg,否则jpeg,gif,tiff 很多格式不支持.RHEL自带了相关库执行.
rpm -ivh libjpeg-6b-37.i386.rpm
rpm -ivh libjpeg-devel-6b-37.i386.rpm
解压 tar xvzf SDL_image-1.2.8.tar.gz
cd SDL_image-1.2.8
生成makefile ./configure
编译,安装 make & make installSDL_ttf库的安装下载 http://www.libsdl.org/projects/SDL_ttf/release/SDL_ttf-2.0.9.tar.gz
解压 tar xvzf SDL_ttf-2.0.9.tar.gz
cd SDL_ttf-2.0.9
SDL_ttf 可以用freetype支持库
下载 http://ftp.twaren.net/Unix/NonGNU/freetype/freetype-2.3.11.tar.gz
解压 tar xvzf freetype-2.3.11.tar.gz
然后./confgiure & make & make install
生成makefile ./configure
编译,安装 make & make installSDL-mixer库安装下载http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.11.tar.gz
SDL-mixer 需要libmad 支持
下载ftp://ftp.mars.org/pub/mpeg/libmad-0.15.1b.tar.gz
解压 tar xvzf libmad-0.15.1b.tar.gz
然后然后./confgiure & make & make install
建议安装libid3tag库
下载 ftp://ftp.mars.org/pub/mpeg/libid3tag-0.15.1b.tar.gz
解压 tar xvzf libid3tag-0.15.1b.tar.gz
然后然后./confgiure & make & make install
解压 tar xvzf SDL_mixer-1.2.9.tar.gz
cd SDL_mixer-1.2.9
生成Makefile ./configure --enable-music-mp3-mad-gpl --enable-music-mp3=no
关于为什么用libmad 请参见http://blog.chinaunix.net/u3/105675/showart_2096192.html
注意安装时,请用LINUX下的系统->管理->声卡检测来是否正常.
SDL-net库安装下载http://www.libsdl.org/projects/SDL_net/release/SDL_net-1.2.7.tar.gz
解压 tar xvzf SDL_net-1.2.7.tar.gz cd SDL_net-1.2.7生成makefile ./configure
编译,安装 make & make installSDL-gfx库安装主页 : http://www.ferzkopp.net/Software/SDL_gfx-2.0/下载http://www.ferzkopp.net/Software/SDL_gfx-2.0/SDL_gfx-2.0.20.tar.gz
解压 tar xvzf SDL_gfx-2.0.20.tar.gzcd SDL_gfx-2.0.20
生成makefile ./configure
编译,安装 make & make install

ffmpeg和SDL的区别:

SDL是一个媒体抽象层,把显卡图形、音频、键鼠杆输入等都用统一的接口定义,让使用SDL的源码不须大改动,能在不同操作系统上的编译运行。
ffmpeg是对一些影音编解码器、容器格式读写器、效果处理滤镜的整合,提供转换和改动的统一接口。
比如用ffmpeg做数据解码,用SDL绘图显示和键鼠操控,就成了一个媒体播放器。

iOS之ffmpeg开发音视频编解码概要、SDL相关推荐

  1. 【幻灯片分享】iOS平台上开发音视频处理 | 盛大微酷 赵志猛 | iOS DevCamp

    专业视频处理算法在移动开发中的优化:<iOS平台上开发音视频处理>| 盛大微酷赵志猛 | iOS DevCamp 主题简介:视频处理技术,已经在专业设备上得到了几十年的发展.但是这些处理方 ...

  2. 基于FFMPEG 的跨平台视频编解码研究

    第33卷 第11期 2011年11月 武 汉 理 工 大 学 学 报 JOURNALOF WUHANUNIVERSITYOFTECHNOLOGY Vol.33 No.11 췍췍췍췍췍췍췍췍췍췍췍췍췍췍 ...

  3. 使用FFMPEG进行音视频编解码(C++) 0.简介

    FFMPEG介绍 FFMPEG是一个开源的编解码软件,读作"ef ef em peg".官方网址是:http://ffmpeg.org/.FFMPEG几乎支持所有的格式,当然了像一 ...

  4. FFMPEG总结 -- 音视频编解码和转码(全)

    在经过一周的学习后,现将其稍加总结下:附代码及详细注释. 简单分为如下六个部分 一.播放一个视频文件的流程 二.ffmpeg 视频编码 (YUV编码为H.264) 三.ffmpeg 视频解码 (解码为 ...

  5. 【FFmpeg】音视频编解码

    FFmpeg 常识 常用数据结构: AVCodex 编码器结构体 AVCodexContext编码器上下文 AVFrame解码后的帧 结构体的分配与释放: av_frame_alloc() / av_ ...

  6. 视频编解码的理论和实践2:Ffmpeg视频编解码

    近几年,视频编解码技术在理论及应用方面都取得了重大的进展,越来越多的人想要了解编解码技术.因此,网易云信研发工程师为大家进行了归纳梳理,从理论及实践两个方面简单介绍视频编解码技术. 相关阅读推荐 &l ...

  7. 【Android 音视频开发打怪升级:FFmpeg音视频编解码篇】一、FFmpeg so库编译

    转自:https://juejin.im/post/5e130df55188253a8b42ebac 目录 一.Android音视频硬解码篇: 1,音视频基础知识 2,音视频硬解码流程:封装基础解码框 ...

  8. 【FFMPEG】各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    目录(?)[-] 编解码学习笔记二codec类型 编解码学习笔记三Mpeg系列Mpeg 1和Mpeg 2 编解码学习笔记四Mpeg系列Mpeg 4 编解码学习笔记五Mpeg系列AAC音频 编解码学习笔 ...

  9. 【ffmpeg for wince】音视频编解码多平台移植(for window/wince)

    from: http://www.cnblogs.com/windwithlife/archive/2009/05/31/1492728.html 终于完成了了第二个Client side原型(for ...

最新文章

  1. 比Visio快10倍的画图工具来了!赶紧整上~
  2. (23)zabbix单位符号Unit symbols
  3. (十四)访问标志 Access_flags
  4. AUC 评价指标详解,准确率(ACC),敏感性(sensitivity),特异性(specificity)计算 Python3【TensorFlow2入门手册】
  5. iOS App开发的那些事儿1:如何建立合适的规范
  6. 让div margin属性消失_为什么div里面打一个字之后就会有高度了呢?
  7. vcode tsconfig.json 无故报错 -- 找不到任何输入
  8. vue从入门到精通之高级篇(一)vue-router的高级用法
  9. ubuntu下面的git服务器搭建
  10. win10家庭版删除文件提示没有权限最简单的方式
  11. java 变量名 字符串_如何使字符串值在java中调用特定的现有JButton变量名?
  12. FTP主动模式和被动模式学习笔记
  13. Java程序员必经的实践之路:Java中高级核心知识全面解析(11)
  14. CodeForces615A-Bulbs-模拟
  15. 链表:头插法与尾插法(简易图解和代码)
  16. android paint 圆角 绘制_android 绘制椭圆 圆角矩形 详细解析
  17. Microsoft edge 下载阿里云excel
  18. 计算机图形学中的经常使用模型
  19. Docker 【Nginx集群部署】
  20. .Net开发者开发效率提升大合集

热门文章

  1. 微信小程序下载word,excel,doc,pdf并打开预览并可以转发收藏
  2. BlueTeam 应急
  3. 渗透测试之突破口——web服务突破
  4. 【Delphi】IOS 15 UDP 广播消息(局域网)
  5. Polkadot + DeFi | 透明公平、高效交易的去中心化金融未来可期
  6. 11.12. ACLs
  7. Java之于Javascript就好比Car(汽车)之于Carpet(地毯)。
  8. PBOOTCMS后台模板管理修改插件
  9. unity开发抽奖系统
  10. Gartner发布《2021年企业低代码平台魔力象限》低码一体化平台成趋势