流媒体网络协议概述

[时间:2017-12] [状态:Open]
[关键词:流媒体,stream,协议]

0 引言

流媒体已经在我们日常生活中扮演重要的角色。本文主要是对现有的流媒体技术做一个简要的概况,并给出本人的对于流媒体协议知识整理的初步规划。希望可以通过本系列文章理清不同协议的内容,并熟悉如何处理、满足不同的应用场景。

本文是我的“流媒体网络协议”系列文章的引言部分。
首先说明一点,本文可能会随时更新,每个版本不太一样。

流媒体网络协议可以看成一种特殊的通信机制,也可以认为是一种特殊的容器格式(自然其中包含容器中常见的概念和核心逻辑)。本文将结合这两部分内容,描述我如何对协议本身的认识,其中会针对不同流媒体协议给出一个源码实现分析,以强化理解。也就是说会先从理论上对协议本身有个大致的介绍,然后结合一个实现源码进行分析。

1 流媒体的概念

我理解的多媒体是从单机开始,最初通过物理介质传输,比如磁带、电影录影带、CD、VCD、DVD、U盘、硬盘、网盘,这个阶段你只能在拿到完整的文件之后才能播放;接下来引入网络,从普通的文件分发服务器到专用的流媒体服务器,这个阶段基本可以实现边下边播,可以达到较小的延时和较好的互动新,也因为网络的引入带啦各种不同的协议和应用,比如直播、点播、卫星电视等等。

从字面上来看,流媒体的目标就是把多媒体文件流化、串行化,已达到分段分发、分段播放的目的。流媒体的概念如下(来自wiki):

流媒体(Streaming media)是指将一连串的媒体数据压缩后,经过网络分段发送数据,在网络上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送;如果不使用此技术,就必须在使用前下载整个媒体文件。
流媒体文件一般定义在bit层次结构,因此流数据包并不一定必须按照字节对齐,虽然通常的媒体文件都是按照这种字节对齐的方式打包的。流媒体的三大操作平台是微软公司、RealNetworks、苹果公司提供的。

从这个定义来看,流媒体主要涉及协议部分。但在考虑到不同的网络环境时会有不同的协议以实现不同的目标。

从构成上来看,一般流媒体系统分为:服务器端、分发网络及客户端。服务器端主要负责编码、封装到特定格式;分发端主要负责流式文件服务及网络包分发,这部分可能会涉及到CDN;客户端需要针对不同的平台、操作系统和运行环境而定,比较多样化,最主要的目标是解码渲染及音视频同步,但通常会附加很多增值行为,比如广告、日志分析、运维数据收集、用户习惯收集。 更多的细节建议阅读参考文献2--观止云的系列文章。

通常每篇文章内容主要回答下面几个问题:

  • 协议的名称和主要解决的问题
  • 该协议实现概述及其核心概念
  • 该协议如何实现seek、pause/resume
  • 服务器端和客户端的具体实现逻辑

2 有哪些多媒体常用协议

  1. HTTP/TCP/UDP
    涵盖传统的私有协议,以及基于HTTP的流式传输协议。
  2. RTP/RTSP/RTMP
  3. HLS
  4. MMS (Microsoft Media Server Protocol)
  5. 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 完成整篇概述部分,及整理计划安排。

5 参考文献

  1. 流媒体-wiki
  2. 观止云-流媒体——从入门到出家
  3. 流媒体传输协议综述(RTP-RTCP RTSP RTMP HTTP)
posted @ 2017-12-26 22:54  Tocy  阅读(1769)  评论(0编辑  收藏  举报