流媒体知识点

视频帧:
  1. 在MPEG编码的过程中,部分视频帧序列压缩成为I帧,部分压缩成P帧,还有部分压缩成B帧。I帧法是帧内压缩法,也称为“关键帧”压缩法。
  2. 两个I帧之间的长度就是一个GOP的长度。
  3. I帧:又称Intra-Picture。帧内编码帧是一种自带全部信息的独立帧,无需参考其它图像便可独立进行解码,视频序列中的第一个帧始终都是I帧。I帧通常是每个GOP的第一个帧,经过适度的压缩,可以当成图像。I帧实际上就是完整的图像经过压缩后的数据帧。
  4. P帧:又称Predictive-Picture。称帧间预测编码帧,需要参考前面的I帧才能进行编码。 通过充分的降低图象序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫前向预测帧。这个帧不能单独作为图像进行观看,其不能成为完整的一张图,需要参考前面一张I帧或B帧来形成完整图。
  5. B帧: 又称Bi-directional interpolated prediction frame。 既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧,也同样不能成为完整的一张图,需要参考前面的I或P帧以及后面的一个P帧来形成一张完整的图。
常见点播文件格式

FLV、mp4、TS。

FLV(FLASH VIDEO):
  1. FLV是流媒体格式的一种,FLV是一个二进制文件,FLV封装格式是由一个文件头(flie header)和 文件体(file Body)组成。。
  2. Flv body是由很多tag组成,tag又分成三种类型:audio,video,script,分别代表音频流,视频流,脚本流(关键字或者文件信息之类)。
  3. FLV文件=FLV头文件+ tag1+tag内容1 + tag2+tag内容2 + …+… + tagN+tag内容N
  4. FLV包括文件头(File Header)和文件体(File Body)两部分:
  5. FLV tags结构:| TagType(8) | DataSize(24) | Timestamp(24) |TimestampExtended(8) | StreamID(24) | Data(DataSize) |。 当前帧时戳,单位是毫秒。相对于FLV文件的第一个TAG时戳。第一个tag的时戳总是0。——不是时戳增量,rtmp中是时戳增量。
  6. Metadata Tag:该类型Tag又通常被称为Script Tag Data。会放一些关于FLV视频和音频的参数信息,如duration、width、height等。通常该类型Tag会跟在File Header后面作为第一个Tag出现,而且只有一个。该Tag Data结构包含两个AMF包。AMF(Action Message Format)是Adobe设计的一种通用数据封装格式,在Adobe的很多产品中应用,简单来说,AMF将不同类型的数据用统一的格式来描述。第一个AMF包封装字符串类型数据,用来装入一个“onMetaData”标志,这个标志与Adobe的一些API调用有,在此不细述。第二个AMF包封装一个数组类型,这个数组中包含了音视频信息项的名称和值。
  7. 如回包的content-length不加,则持续回包即直播
MP4:

mp4或称[MPEG-4]第14部分(MPEG-4 Part 14)是一种多媒体容器格式。
MP4文件中的所有数据都装在box中。也就是说MP4文件由若干个box组成,每个box有类型和长度,可以将box理解为一个数据对象块。box中可以包含另一个box,这种box称为container box。
“ftyp”类型box:一个MP4文件首先会有且只有一个“ftyp”类型的box,作为MP4格式的标志并包含关于文件的一些信息
“moov”类型box:之后会有且只有一个“moov”类型的box(Movie Box),它是一种container box,子box包含了媒体的metadata信息
“mdat”类型box:MP4文件的媒体数据包含在“mdat”类型的box(Midia Data Box)中,该类型的box也是container box,媒体数据的结构由metadata进行描述。

TS:
  1. MPEG-2中规定TS传输包的长度是固定的,长度为188字节。
  2. 所有的TS包都分为包头和净荷部分。
  3. 包头:提供关于传输方面的信息:同步、有无差错、有无加扰、PCR(节目参考时钟)等标志。
  4. 净荷:所传输的信息包括两种类型:视频、音频的PES包以及辅助数据;节目专用信息PSI。分为三层:ts层(Transport Stream)、pes层(Packet Elemental Stream)、es层(Elementary Stream)。
  5. es层:就是音视频数据
  6. pes层:是在音视频数据上加了时间戳等对数据帧的说明信息
  7. ts层:是在pes层上加入了数据流识别和传输的必要信息。
TS形成过程:
  1. 将原始音视频数据压缩之后,压缩结果组成一个基本码流(ES)
  2. 对ES(基本码流)进行打包形成PES
  3. 在PES包中加入时间戳信息(PTS/DTS)。 DTS(Decoding Time Stamp)解码时间和PTS(Presentation Time Stamp)显示时间。
  4. 将PES包内容分配到一系列固定长度的传输包(TS Packet)中
  5. 在传输包中加入定时信息(PCR)。在传输包中加入节目专用信息(PSI)。 其中PSI表有4种类型:节目关联表(PAT)、节目映射表(PMT)、网络信息表(NIT)和条件访问表(CAT)
  6. 连续输出传输包形成具有恒定比特率的MPEG-TS流
常用直播协议总结
RTMP:
  1. RealTime Messaging Protocol,实时消息传送协议。工作在TCP之上的明文协议,使用端口1935。传送的协议,负载的是flv格式的文件。
  2. RTMPT封装在HTTP请求之中,可穿越防火墙。RTMPS类似RTMPT,但使用的是HTTPS连接。
  3. 消息是rtmp的基本数据单元,块是用于将消息重新封装在网络上传输。
消息:
  1. 是rtmp的基本数据单元,服务端和客户端通过在网络上发送RTMP消息进行通讯。消息可能包含音频,视频,数据,或其他的消息。RTMP消息,分为消息头和载荷两部分。
  2. 消息头:message type、payload length、timestamp、stream id。
  3. 载荷:载荷中消息中包含的真实数据。例如,它可以是音频样本或压缩的视频数据。
chunk:
  1. chunk(消息组成):消息是rtmp协议的基本数据单元,在网络传输时,消息会被重新封装成块进行传输,每个块都有固定的大小,如果消息大小大于块的大小,消息就会被拆分成几个块发送。块由块头和载荷组成。
    块头:basic header(fmt、cs id)、chunk msg header(timestamp、message length、message type id、message stream id)、extended timestamp
  2. 载荷:块的载荷就是消息的载荷内容。
rtmp的消息类型:
  1. rtmp的消息类型可分为三大类:协议控制消息、用户控制消息、RTMP命令消息
  2. 协议控制消息:设置块大小消息(Message Type=1)、终止消息(Message Type=2)、确认消息(Message Type=3)、确认窗口大小消息(Message Type=5)、设置对端带宽消息(Message Type=6)
  3. 用户控制消息:用户控制消息(Message Type=4)
  4. RTMP命令消息:数据消息(Message Type=18或15)、共享对象消息 (Message Type=19或16)、音频消息 (Message Type=8)、视频消息 (Message Type=9)、聚合消息(Message Type=22)、命令消息(Message Type=20或17)
HDL:
  1. HTTP+FLV将RTMP封装在HTTP协议之上的,可以更好的穿透防火墙等。
  2. FLV是最简单的流媒体封装,HTTP是最广泛的协议,这两个组合在一起维护性更高,比RTMP简单多了。
  3. HTTP协议中有个约定:content-length字段,http的body部分的长度。服务器回复http请求的时候如果有这个字段,客户端就接收这个长度的数据然后就认为数据传输完成了。如果服务器回复http请求中没有这个字段,客户端就一直接收数据,直到服务器跟客户端的socket连接断开。
  4. http-flv直播就是利用第二个原理,服务器回复客户端请求的时候不加content-length字段,在回复了http内容之后,紧接着发送flv数据,客户端就一直接收数据了。
HLS:
  1. HTTP Live Streaming,是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。
  2. 它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。
  3. 在开始一个流媒体会话时,客户端会下载一个包含元数据的extended M3U (m3u8)playlist文件,用于寻找可用的媒体流。视频的封装格式是TS。
  4. 在stream segmenter模块将视频切片,切片的结果就是index file(m3u8)和ts文件了。
  5. hls最大的优点HTML5可以直接打开播放;这个意味着可以把一个直播链接通过微信等转发装任何独立的APP,有浏览器即可。
优势:
  1. 主要是为了解决RTMP协议存在的一些问题。比如RTMP协议不使用标准的HTTP接口传输数据,所以在一些特殊的网络环境下可能被防火墙屏蔽掉。但是HLS由于使用的HTTP协议传输数据,不会遇到被防火墙屏蔽的情况(该不会有防火墙连80接口都不放过吧)。
  2. 另外于负载,RTMP是一种有状态协议,很难对视频服务器进行平滑扩展,因为需要为每一个播放视频流的客户端维护状态。而HLS基于无状态协议(HTTP),客户端只是按照顺序使用下载存储在服务器的普通TS文件,做负责均衡如同普通的HTTP文件服务器的负载均衡一样简单。
  3. 另外HLS协议本身实现了码率自适应,不同带宽的设备可以自动切换到最适合自己码率的视频播放。
播放模式:
  1. 点播VOD的特点就是当前时间点可以获取到所有index文件和ts文件,二级index文件中记录了所有ts文件的地址。这种模式允许客户端访问全部内容。上面的例子中就是一个点播模式下的m3u8的结构。
  2. Live 模式就是实时生成M3u8和ts文件。它的索引文件一直处于动态变化的,播放的时候需要不断下载二级index文件,以获得最新生成的ts文件播放视频。如果一个二级index文件的末尾没有#EXT-X-ENDLIST标志,说明它是一个Live视频流。
  3. 客户端在播放VOD模式的视频时其实只需要下载一次一级index文件和二级index文件就可以得到所有ts文件的下载地址,除非客户端进行比特率切换,否则无需再下载任何index文件,只需顺序下载ts文件并播放就可以了。但是Live模式下略有不同,因为播放的同时,新ts文件也在被生成中,所以客户端实际上是下载一次二级index文件,然后下载ts文件,再下载二级index文件(这个时候这个二级index文件已经被重写,记录了新生成的ts文件的下载地址),再下载新ts文件,如此反复进行播放。
HDS:
  1. Http Dynamic Streaming,是一个由Adobe公司模仿HLS协议提出的另一个基于Http的流媒体传输协议。
  2. 其模式跟HLS类似,但是又要比HLS协议复杂一些,也是索引文件和媒体切片文件结合的下载方式。
  3. 多码率适应场景
DASH:
  1. Dynamic Adaptive Streaming over HTTP。
  2. DASH协议原理跟HLS协议差不多,都是将文件分成一片片小段进行分发,也是分为MPD索引文件和媒体分片文件。
  3. 多码率适应场景
QUCI:
  1. Quick UDP Internet Connection。 是谷歌制定的一种基于UDP的低时延的互联网传输层协议。
  2. QUIC很好地解决了当今传输层和应用层面临的各种需求,包括处理更多的连接,安全性,和低延迟。
  3. QUIC融合了包括TCP,TLS,HTTP/2等协议的特性,但基于UDP传输。
  4. QUIC的一个主要目标就是减少连接延迟,当客户端第一次连接服务器时,QUIC只需要1RTT(Round-Trip Time)的延迟就可以建立可靠安全的连接,相对于TCP+TLS的1-3次RTT要更加快捷。
  5. 针对金山云涉及nginx改造,通过lvs-caddy-nginx,通过caddy代理支持
RTSP:
  1. RealTime Streaming Protocol,实时流传输协议。RTSP定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。
    协议目的在于控制多个数据发送连接,为选择发送通道如UDP、组播UDP与TCP提供途径,并为选择基于RTP、RTCP上发送机制提供方法。
  2. 适合IPTV应用场景。
  3. RTSP与RTP协议最大却别,RTSP是一种双向实时数据传输协议,它允许客户端向服务器端发送请求,如回放、快进、倒退等操作。
RTP:
  1. Real-timeTransport Protocol,实时传输协议。RTP是针对多媒体数据流的一种传输层协议,详细说明了在互联网上传递音频和视频的标准数据包格式。
  2. RTP协议常用于流媒体系统(配合RTCP协议),视频会议和一键通系统(配合H.323或SIP),使它成为IP电话产业的技术基础。
  3. RTP是建立在UDP协议上的,常与RTCP一起使用,其本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于低层服务去实现这一过程。
RTCP:

Real-timeTransport Control Protocol,实时传输控制协议。RTCP是RTP的配套协议,为RTP媒体流提供信道外的控制。
RTCP的主要功能是为RTP所提供的服务质量(QoS)提供反馈,收集相关媒体连接的统计信息,例如传输字节数,传输分组数,丢失分组数,单向和双向网络延迟等等。

内容由流媒体协议等基本知识,视频媒体基本知识流媒体服务器搭建实战,流媒体工具使用实战等内容组成。由本人“天地会珠海分舵”(http://blog.csdn.net/zhubaitian)耗时一个月整理而成,现分享给大家。 章节内容分布如下: 第1章Streaming 协议和服务器概览学习摘录 7 1.1 Protocol support 8 1.2 Media Container format support 12 第2章Streaming 协议学习摘录 15 2.1 MMS协议简介 15 2.2 RTP相关协议简介 15 2.2.1 RTP与RTCP协议简介 15 2.2.2 RTSP协议简介 16 2.2.3 流传输过程 17 2.3 RTMP vs RTMFP 18 2.3.1 RTMP协议简介 18 2.3.3 RTMFP 简介 19 2.3.4 RTMP VS RTMFP 20 2.4 MPEG-TS 20 2.4.1 MPEG2-TS与MPEG2-PS的区别 20 2.4.2 PES/ES/TS简介 20 2.5 Smooth Streaming 21 2.5 HLS简介 24 2.6 MPEG-DASH 26 2.6.1 简介 26 2.6.2 Dash播放器列表 28 2.6.3 MPD格式 30 2.6.5 MPD在线检查器 31 2.6.5 MPD 格式理解个人小结 31 2.6.6 PMD格式的多样性 32 2.6.7 MPD 支持的Profiles 44 2.6.8 DASH传输协议支持 44 2.7 HLS VS MPEG-DASH 45 2.8 Real Data Transport Protocol 45 2.9 webM 45 第3章 视频容器格式学习摘录 47 3.1 视频容器VS 视频编码 47 3.2 3GP容器 48 3.2 AVI容器(.avi) 49 3.3 WMV vs ASF 容器(.wmv/.asf) 49 3.3.1 ASF高级串流格式简介以及和WMA/WMV的区别 49 3.3.2 ASF和WMA/WMV的区别官方解析 50 3.4 QuickTime容器(.mov) 50 3.5 Ogg vs Ogm容器(.ogg) 51 3.5.1 Ogg容器格式 51 3.5.2 Ogm 51 3.5.3 Ogg vs Ogm 52 3.6 Matroska容器(.mkv|.mka|.mks) 52 3.7 MP4容器 53 3.7.1 简介 53 3.7.2 MP4格式详解 53 3.8 MPEGE TS容器 61 3.9 FLV容器 62 3.10 ABS – Adaptive Bitrate Streaming 自适应串流容器 62 3.11 码率 63 3.12 流媒体的3种格式 63 3.12.1 压缩媒体文件格式 63 3.12.2 流文件格式 64 3.12.3 流媒体发布格式 64 第4章 视频编码格式学习摘录 66 4.1视频编码格式简介 66 4.2主流视频编码格式比较 67 4.2.1 MPEG编码格式 67 4.2.2 DivX/XviD编码格式 68 4.2.3 H.264/X264编码格式 69 4.2.4 WMA-HD/VC-1编码格式 71 4.2.5 各主流编码格式比较 72 4.3 视频解码 73 第5章ffmpeg学习摘录 74 5.1 简介 74 5.2 功能 74 5.3 支持的格式和编码 75 5.4 支持的流媒体协议 76 5.5 ffmpeg视频解码架构示例简略 76 5.5.1 解复用(Demux) 77 5.5.2 解码 (Decode) 78 5.5.3 Ffmpeg中解码流程对应的API函数 78 第6章GStreamer学习摘录 80 6.1 GStreamer简介 80 6.2 GStreamer编写MP3播放器实例 80 6.2.1 初始化GStreamer 80 6.2.2 创建GStreamer管道元件 81 6.2.3 创建元件三元组之GStreamer数据源 81 6.2.4 创建元件三元组之解码器 (即GStreamer过滤器) 插件 81 6.2.5 创建元件三元组之GStreamer接收器 81 6.2.6 链接GStreamer元件三元组到管道 – 播放 82 6.2.7 启动GStreamer管道数据处理流程 82 6.2.8 MP3命令行播放器源代码完整实例 82 第7章 ffmpeg VS GStreamer比较学习摘录 85 7.1 Pipeline设计模式简介 85 7.2 ffmpeg vs GStreamer 86 7.2.1 网上解析翻译 86 7.2.1 FFmpeg和GStreamer异同小结 87 第8章 流媒体服务器搭建摘录 88 8.1 VLC 88 8.1.1 VLC编码和容器兼容性 88 8.1.1 VLC 配置VOD点播 88 8.1.2 VLC 配置组播服务器 90 8.2 Wowza Streaming Engine 91 8.2.1 简介及安装 91 8.2.2 MPEG-DASH 支持 92 8.2.3 如何使用VLC作为直播源 95 8.2.4 点播VOD配置 112 8.3 Nex Gen Media Server (NGMS) 114 8.3.1 Introduction 114 8.3.2 Feature List 115 8.3.3 Practice in Action 116 8.4 IIS Smooth Streaming(IIS Media Service) 117 8.4.1 Getting Started with IIS Smooth Streaming 117 8.4.2 Use VLC to play the Smooth Stream 128 8.4.3 创建Smooth Stream 文件 129 8.4.4 提供DASH服务时IIS的关键设置 129 8.4.5 Dash on IIS步骤 130 第9章 相关工具学习摘录 137 9.1 Bento4 MP4工具包 137 9.1.1 Introduction 137 9.1.2 所包含的工具简介 138 9.1.3 MPEG DASH Adaptive Streaming 139 9.1.4 Serving DASH Streams 147 9.2 MP4Box 149 9.2.1 简介 149 9.2.2 对DASH的支持命令帮助 150 9.2.3 MP4Box: fragmentation, segmentation, splitting and interleaving 153 9.2.4 把MP4转换成TS 155 9.2.5生成不同profile的MPD 155 9.2.6指定每个Representation的bandwidth 156 9.2.7生成多个period的MPD 156 9.2.8生成多个Representation的MPD 156 9.2.9 生成多个Segment的MPD 156 9.2.10 生成(Subsegment) SegmentBase拥有 indexRangeExact 为true的MPD 157 9.2.11 生成多个AdaptionSet的MPD 158 9.2.12 模拟live直播 158 第10章 流媒体服务器搭建指导 159 10.1 所需搭建服务器Matrix 159 第11章 附录 163 11.1 Wowza支持格式 163 11.2 ISO Base Media File Format (IBMFF) 163 11.3 DASH所支持Profile分类 164
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

查里王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值