参考: http://blog.youkuaiyun.com/yang_xian521/article/details/7697324
http://blog.youkuaiyun.com/leixiaohua1020/article/details/11693997
http://blog.youkuaiyun.com/leixiaohua1020/article/details/14214705
http://my.oschina.net/u/555701/blog/56616
http://my.oschina.net/u/555701/blog?catalog=175975
http://blog.youkuaiyun.com/kidleaf2/article/category/1171659
http://guoh.org/lifelog/2013/10/h-264-bit-stream-sps-pps-idr-nalu/
http://blog.youkuaiyun.com/tx3344/article/category/1234994 ffmpeg完美入门系列
http://blog.youkuaiyun.com/woshinia/article/category/1270366 ffmpeg架构
http://wenku.baidu.com/view/d481f1345a8102d276a22feb.html mpeg-TS 分析
VLC 架构:
http://wenku.baidu.com/view/8f155b252f60ddccda38a04f.html
常用概念:
IPTV Internet Protocol Television
VOD Video on Demand 视频点播,一种可以按用户需要点播节目的交互式视频系统
RTP Real time Transport Protocol
RTSP Real time Streaming Protocol
dts 表示解码时间戳,(英文: decompression time stamp in time_base units)
pts 表示显示时间戳(英文: presentation time stamp in time_base units)
Conainer/File 容器/文件,即特定格式的多媒体文件。
Stream 媒体流:指时间轴上的一段连续数据,如一段声音数据,一段视频数据或一段字幕数据,可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器。
Frame/Packet 数据帧/数据包:通常,一个媒体流由大量的数据帧组成,对于压缩数据,帧对应着编解码器的最小处理单元。通常,分属于不同媒体流的数据帧交错复用于容器之中。
decode/encode 编解码器:编解码器以帧为单位实现压缩数据和原始数据之间的相互转换。
subtitle 字幕
demux 解复用
mux 复用
GOP MPEG-2视频通常包含多个GOP(GroupOf Pictures),每一个GOP包含多个帧(frame)。帧的帧类(frame type)通常包括I-帧(I-frame)、P-帧(P-frame)和B-帧(B-frame)。其中I-帧采用帧内编码,P-帧采用前向估计,B- 帧采用双向估计。
I帧编码是为了减少空间域冗余,P帧和B帧是为了减少时间域冗余。
GOP是由固定模式的一系列I帧、P帧、B帧组成。常用的结构由15个帧组成,具有以下形式 IBBPBBPBBPBBPBB。GOP中各个帧的比例的选取和带宽、图像的质量要求有一定关系。
例如因为B帧的压缩时间可能是I帧的三倍,所以对于计算 能力不强的某些实时系统,可能需要减少B帧的比例。
RSS: "Resident Set Size", 实际驻留"在内存中"的内存数(单位: KB). 不包括已经交换出去的代码. 举一个例子: 如果你有一个程序使用了100K内存, 操作系统交换出40K内存, 那么RSS为60K. RSS还包括了与其它进程共享的内存区域. 这些区域通常用于libc库等.
SHARE: RSS中与其它进程共享的内存部分大小.
VMSIZE: 一个进程占用的总的地址空间大小. 它包括了没有映射到内存中的页面。
sz(Private RSS): 映射到内存中的页面, 这些页面仅由进程单独使用. 这也是我们最关心地方: 进程实际占用的内存数。
FFWD 向前trick
RWD 重头播放
PVR 就是录像
PSI Program Specific Information,意为节目专用信息
HLS apple上面的一种协议,和RTP/RTCP协议类似。支持自适应码率传输(如果当前网络不好,就低码率传输数据; 如果当前网络恢复了,就高码率传输数据)
DRM 英文全称Digital Rights Management, 可以翻译为:内容数字版权加密保护技术
AV_TIME_BASE 微秒
MP3的ID3元数据标签
STB 机顶盒
adaption field 调整字段
PAT 节目关联表
PMT
minGW Minimalist GNU for Windows
1s = 1000ms = 1000 000 μs
多媒体文件/多媒体流 (movie.mkv)
原始流 1 (h.264 video)
原始流 2 (aac audio for Chinese)
原始流 3 (aac audio for english)
原始流 4 (Chinese Subtitle)
原始流 5 (English Subtitle)
动态库的作用:
libavcodec :这是一个用于多个项目中音频和视频的编解码器库
libavformat:一个音频与视频格式转换库
libswscale: 对于图像作缩放的库
libavutil:包含一些工具库
libpostproc: 对于视频做前处理的库
FFMPEG中结构体:
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) 存数据
视频的话,每个结构一般是存一帧;音频可能有好几帧
解码前数据:AVPacket
解码后数据:AVFrame
他们之间的对应关系如下所示: