[时间:2017-12] [状态:Open]
[关键词:流媒体,stream,协议]
0 引言
流媒体已经在我们日常生活中扮演重要的角色。本文主要是对现有的流媒体技术做一个简要的概况,并给出本人的对于流媒体协议知识整理的初步规划。希望可以通过本系列文章理清不同协议的内容,并熟悉如何处理、满足不同的应用场景。
本文是我的“流媒体网络协议”系列文章的引言部分。
首先说明一点,本文可能会随时更新,每个版本不太一样。
流媒体网络协议可以看成一种特殊的通信机制,也可以认为是一种特殊的容器格式(自然其中包含容器中常见的概念和核心逻辑)。本文将结合这两部分内容,描述我如何对协议本身的认识,其中会针对不同流媒体协议给出一个源码实现分析,以强化理解。也就是说会先从理论上对协议本身有个大致的介绍,然后结合一个实现源码进行分析。
1 流媒体的概念
我理解的多媒体是从单机开始,最初通过物理介质传输,比如磁带、电影录影带、CD、VCD、DVD、U盘、硬盘、网盘,这个阶段你只能在拿到完整的文件之后才能播放;接下来引入网络,从普通的文件分发服务器到专用的流媒体服务器,这个阶段基本可以实现边下边播,可以达到较小的延时和较好的互动新,也因为网络的引入带啦各种不同的协议和应用,比如直播、点播、卫星电视等等。
从字面上来看,流媒体的目标就是把多媒体文件流化、串行化,已达到分段分发、分段播放的目的。流媒体的概念如下(来自wiki):
流媒体(Streaming media)是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网络上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送;如果不使用此技术,就必须在使用前下载整个媒体文件。
流媒体文件一般定义在bit层次结构,因此流数据包并不一定必须按照字节对齐,虽然通常的媒体文件都是按照这种字节对齐的方式打包的。流媒体的三大操作平台是微软公司、RealNetworks、苹果公司提供的。
从这个定义来看,流媒体主要涉及协议部分。但在考虑到不同的网络环境时会有不同的协议以实现不同的目标。
从构成上来看,一般流媒体系统分为:服务器端、分发网络及客户端。服务器端主要负责编码、封装到特定格式;分发端主要负责流式文件服务及网络包分发,这部分可能会涉及到CDN;客户端需要针对不同的平台、操作系统和运行环境而定,比较多样化,最主要的目标是解码渲染及音视频同步,但通常会附加很多增值行为,比如广告、日志分析、运维数据收集、用户习惯收集。 更多的细节建议阅读参考文献2--观止云的系列文章。
通常每篇文章内容主要回答下面几个问题:
- 协议的名称和主要解决的问题
- 该协议实现概述及其核心概念
- 该协议如何实现seek、pause/resume
- 服务器端和客户端的具体实现逻辑
2 有哪些多媒体常用协议
- HTTP/TCP/UDP
涵盖传统的私有协议,以及基于HTTP的流式传输协议。 - RTP/RTSP/RTMP
- HLS
- MMS (Microsoft Media Server Protocol)
- DASH
3 我的流媒体协议整理计划
我希望自己在2018年可以完成上面几个协议的学习和整理。基本的规划如下:
第一季度 (截止2018.03.31)
完成HLS协议整理,包括协议综述、ffmpeg中HLS实现、AOSP中HLS实现、使用ffmpeg搭建HLS系统四篇文章。
第二季度 (截止2018.06.30, 工作量较大)
完成RTMP、RTP、RTSP的协议整理,使用ffmpeg搭建RTMP服务器、学习librtmp的实现及调用。
第三季度 (截止2018.09.30)
了解DASH基本内容,并整理 (上一个季度如果有未完成的,完成之)
第四季度 (截止2018.12.25)
概述MMS,并了解基本概念;了解浏览器中的播放器实现(webrtc);
4 更新说明
- 2017-12-26 添加引言部分
- 2018-01-01 更新技术要点部分内容
- 2018-01-11 完成整篇概述部分,及整理计划安排。