互联网多媒体内容传输从大方向上可以分为下载传输和流式传输,而流式传输又可以分为顺序流式传输和实时流式传输,换句话来说就是点播(Video on Demand)和直播(Live Streaming),顾名思义,前者的媒体内容是提前存储在服务器上供客户端请求播放,而后者是实时产生并分发给客户端播放。

本文是网易视频云骨灰级研发工程师罗伟基于HTTP的流媒体点播技术入门,讲述了一些基本的概念以及这一技术的变革演进。

HTTP流媒体点播技术优势

互联网上传播音视频内容最早从上世纪90年代开始,RTP等专有协议的提出就是定义音视频的包格式以获得更低的网络传递开销。不过现如今的互联网世界,CDN扮演着非常重要的角色,而绝大部分CDN厂商是不支持RTP等协议的。基于HTTP的流媒体点播技术则占据着主流,其有几点优势:

  • 防火墙友好;

  • 客户端控制媒体流的访问,服务端不需要为每一个客户端连接维护媒体session状况

  • 采用标准的HTTP服务器即可,支撑大规模客户端访问不需要额外的服务器技术资源开销,最重要的就是CDN技术的良好支持优化。

HTTP流媒体技术变革

HTTP流媒体技术的变革大致经过了以下四个阶段:

最初,我们只能先下载完整视频文件到本地磁盘后,然后才能播放观赏。这意味着你必须等待视频下载操作的完成,严格来讲,根据我们第一段的划分,这不能称作为流媒体传输,不过我们还是列出来,以作对比。

在上面简单下载文件的基础上,一个明显的提升就是渐进式下载技术。这种情况下不需要完整下载视频文件,可以边下载边播放,这就要求视频的元数据信息得放在视频文件的开头。但是,我们只能在已经下载的那一部分自由拖拽播放,而未下载的部分是不能播放的。

在渐进式下载的基础上,pseudo-streaming(伪流)出现了,其增强了seek播放功能,也就是支持直接切到未下载的地方进行观看,所以也可以称之为渐进式播放。

其实,到pseudo-streaming 这一步,流媒体播放的技术已经很成熟了,而且目前绝大多数的视频网站都是这种技术,比如Youtube、优酷、腾讯视频等。如果,要在这个基础上再一步的优化,可以从哪些方面呢?比较容易想到的就是带宽优化,能够链路感知,这就是下面的自适应比特率流。其原理就是,同一视频内容会有不同的码率版本,客户端播放器会动态地根据网络质量切换请求带宽匹配的的视频片段。

自适应码率流媒体技术,业内比较常见的实现是Apple的HTTP Live Streaming (HLS)以及Adobe的HTTP Dynamic Streaming (HDS),下图简单展示了HLS的文件结构,可以看到master playlist包含了两种不同码率的播放列表,当然如果你只有一种版本,那么就不需要master playlist了。基于HTTP的自适应码率流媒体是有国际标准的,那就是3GPP组织和MPEG小组所提出的MPEG-DASH(DynamicAdaptive Streaming over HTTP)。

点播流媒体服务器工作原理

目前,很常见的一种搭建方式就是基于nginx,而nginx本身对音视频媒体的处理就有一定的支持,官方就有flv和mp4的插件,即ngx_http_flv_module和ngx_http_mp4_module。前者支持以字节偏移的渐进式seek播放,后者支持以时间偏移的渐进式seek播放。

要想达到这种渐进式播放的目的,大部分情况下,我们是要对服务端的媒体文件进行一定的处理的。首先播放之前,服务端需要先返回一定的视频元数据信息,其次我们需要知道媒体时间和媒体数据的映射关系。为什么呢?

目前大部分的视频编码都采用H264标准,而H264的不同视频帧采用了不同的压缩编码方式,其中I帧的作用很大,其通常是每个 GOP(Group of Picture)的第一个帧,我们简单点说,I帧依靠自身就可以解码出完整图像,而其后面帧的解码则需要依赖I帧,这意味着什么?

是的,这决定了我们在拖拽播放的时候,播放器会seek到最近的I帧处,所以有时候会有一个现象,就是你拖到一个精确的时间点,但是播放器却在另一个靠近的时间点开始播放,这就是因为那个时间点是I帧所在之处。

播放器的seek播放通常是让用户选择时间偏移,而服务端最终对文件的请求处理只能是字节偏移,所以问题来了,我们要有一个时间偏移和字节偏移的映射表,严格一点说,是每一个I帧的时间偏移与字节偏移映射。

问题又来了,这个映射是放在客户端还是服务端处理呢?当然是都可以。如果客户端发出字节偏移请求,那么服务端就很轻松,只需要提供HTTP range访问的功能,但是client端需要提前知道时间与字节的映射关系,比如flv格式的metadata就提供了这个信息,有的flv文件没有加入metadata,这时候就需要用相应的flv工具(比如flvmeta)去处理成这样的格式,这样客户端的播放器就可以直接发送字节偏移量了。MP4则不需要这么处理,因为MP4格式本身就要求带这样的信息,其记录metadata的Movie Box (moov)中的Media Information Box (minf)就存储了媒体时间和媒体数据的映射关系。如果客户端只发出时间请求,那么服务端就得将时间偏移请求转换为字节偏移请求,然后处理并响应请求。

——【特别推荐】——

这里藏着我给你的福利↓

HTTP流媒体播放技术发展以及nginx点播源站相关推荐

  1. 智源沙龙 | 人工智能的技术发展与创业投资

    9月20日,"科创·创享会第五期:人工智能的技术发展与创业投资"沙龙活动在中关村朔黄发展大厦召开.本次活动由北京市科技创新基金联合北京智源人工智能研究院共同举办. 本次创享会汇聚了 ...

  2. 前沿技术创新是人工智能发展的动力之源 不断拓展能力边界

    近日,WAIC2022上海人工智能开发者大会在中国(上海)自由贸易试验区临港新片区举行.记者从会上获悉,上海将加大力度推动算法开源.数据开放.算力开发,与国内外知名开源社区互联互通,打造国际人工智能开 ...

  3. AI 技术发展飞快,高校 AI 教师的知识储备能满足学生旺盛的求知欲吗?

    2019 年,AI 技术以惊人的速度发展:2020 年,AI 技术成熟的时机已经到来,随之而来的,是越来越旺盛的 AI 人才需求. 近日,国家正式发布了一份<2020 年人工智能产业人才发展报告 ...

  4. 美军认知技术发展态势

    来源:人机与认知实验室 摘要:美军正在大力发展人工智能中的认知技术,认知技术的进步将极大的促进人机融合智能的发展.首先,综述了美军认知技术的发展历史,从自然语言处理.环境感知.机器人自主控制.自主编组 ...

  5. 英特尔虚拟化技术发展蓝图

     当前非常热门的Virtualization虚拟化技术的出现和应用其实已经有数十年的历史了,在早期,这个技术主要应用在服务器以及大型主机上面,现在,随着PC性能的不断增长,Virtualizati ...

  6. 数据中心液冷技术发展分析

    电力信息与通信技术,中国知网 | 来源 数据中心液冷技术发展分析 | 题目 王艳松1,张琦2,孙聪3,庄泽岩2,黄子轩2,翟天一4 | 作者 1国网北京市电力公司,2华为技术有限公司,3中国信息通信研 ...

  7. BAT解密:互联网技术发展之路(5)- 开发层技术剖析

    BAT解密:互联网技术发展之路(5)- 开发层技术剖析 1. 开发框架 在系列文章的第2篇"BAT解密:互联网技术发展之路(2)- 业务如何驱动技术发展"中我们深入分析了互联网业务 ...

  8. 云信技术系列课 | RTC 系统音频弱网对抗技术发展与实践

    导读:本文整理自线上直播[MCtalk Live#2 :RTC 系统音频弱网对抗技术发展与实践]网易云信资深音视频引擎开发专家崔承宗分享内容,文末也可查看直播回顾视频. 文|崔承宗 网易云信资深音视频 ...

  9. 双时隙的工作原理_智能天线工作原理是什么 智能天线技术发展介绍【图文】...

    智能天线,智能天线工作原理是什么? 背景:随着移动用户数量的快速增加,尤其在我国人口密度较大的城市地区,移动业务运营公司和频率资源管理部门将面临频率资源短缺的巨大挑战,频率资源已经成为制约继续发展的瓶 ...

最新文章

  1. Java中常见数据结构Map之HashMap
  2. 你不知道的console.log
  3. 在Coding.net创建项目开发
  4. 使用Consul实现服务发现:instance-id自定义(3种方式)
  5. Tarjan求lca
  6. flink实时流遇到的问题排查——部分数据未落库redis问题
  7. IBM并购网络视频会议商WebDialogs 加入Lotus Sametime
  8. python利器-python利器app下载-python利器手机版 _5577安卓网
  9. 史上最全计算机类编程资料大集合
  10. chrome 恐龙 html源码,Chrome 小恐龙游戏源码探究二 -- 让地面动起来
  11. c语言程序函数由什么两部分组成,C语言中一个函数由函数首部和_____两部分组成. 答案:函数体...
  12. python读取桌面上的文件夹怎么加密_python给文件夹加密 怎么样给python文件加密...
  13. qpython3l最新版下载_qpython3l
  14. np.array数组的切片
  15. python爬取百度图片,自定义关键字和页数
  16. python应用——分治法实现循环赛
  17. 栈(Stack)的应用—试探回溯法:八皇后问题、迷宫寻径
  18. 转:拥抱挣扎:创造组织的同时,也创造了崭新的自我
  19. Android仿微信聊天界面布局
  20. 山东电网计算机专业录取率,国家电网太难进?网友:这个二本高校进山东电网的人数仅次于山大...

热门文章

  1. [技术分享]利用MSBuild制作msf免杀的后门
  2. 数据分页 THINKPHP3.2 分页 三种分页方法
  3. 在Windows下基于libx264.a的Qt 4.8.2视频压缩
  4. 腾讯、百度、阿里、微软面试题精选(不断更新)
  5. 这几个GraphPad Prism使用的小技巧让你绘图效率直接翻倍
  6. 12本接收率高的医学SCI期刊
  7. vb excel遍历列_EXCEL如何把多个表格合并成一个表格
  8. HFSS安装提示failed to check out license during initialization,怎么解决?
  9. 计算机视觉与深度学习 | 基于Faster R-CNN的目标检测(深度学习Matlab代码)
  10. OpenCV | 基于visual studio 2010版本的OpenCV3.0.0配置文件