zoukankan      html  css  js  c++  java
  • 流媒体网络协议概述

    [时间: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)
  • 相关阅读:
    redis实时同步工具redis-shake
    elasticsearch单机部署
    ogg从库进程监控
    mha安装部署
    mha自定义路径安装
    gnuplot输出柱状图
    gnuplot输出曲线图
    gnuplot命令行模式不支持中文标题的解决办法
    ogg中logdump使用自动输入执行
    JDK(java se development kit)的构成
  • 原文地址:https://www.cnblogs.com/tocy/p/stream-media-protocol-overview.html
Copyright © 2011-2022 走看看