MP4大文件虚拟HLS分片技术,避免服务器大量文件碎片

简介: MP4大文件虚拟HLS分片技术,避免服务器大量文件碎片

MP4大文件虚拟HLS分片技术,避免点播服务器的文件碎片

本文主要介绍了通过虚拟分片技术,把MP4文件,映射为HLS协议中的一个个小的TS分片文件,实现了在不实际切分MP4文件的情况下,通过HLS协议播放MP4文件,从而避免了对MP4进行点播,尤其是大的MP4文件,需要长时间缓冲MP4头部数据的问题,同时可以解决对MP4文件进行切分,会在服务器制造出大量的文件碎片的不利情况。而且本技术,几乎可以不需要对流媒体服务器(HTTP服务)做修改。

背景

  • HLS全称Http Live Streaming是当前广泛使用的直播和点播技术,最早是苹果公司实现的,跟MPEG-DASH一样是基于HTTP协议传输,可嵌入HTML5标签中播放,现在已经被移动平台的浏览器广泛支持,在pc上也可以通过js和MSE(Media Source Extensions)来实现。HLS的特点是分片文件小,加载很快,使用TS容器,格式简单,通过HTTP传输,基本不需要考虑防火墙问题,所以很快就被推广开了。
  • MP4大家就更熟悉了,就是由一个个box组成的媒体文件容器,就不多说了。需要指出的一点是,MP4基本上是可以分为普通MP4和FragmentMP4来,后者主要特征包含许多moof box把mp4文件分割为许多可以单独解码的单元,更适合与流媒体场景下的数据传输,我最早见到它的应用,是在微软早年推出的“SilverLight + Smooth Streaming”技术中(微软已弃坑?)。FMP4的应用也在逐渐发展中,不过比TS有一点不太好的地方是它格式有点复杂了,关于FMP4相关的技术我之后写文章介绍。

对于大家经常见到和使用到的普通MP4来说,作为电影、电视文件的存储容器,是很好的,不过对于流媒体点播来说,最大的缺点就是它的媒体信息和关键帧索引都集中存放在moov box中,而导致越大的文件,moov box越大,对播放器来说,获取不到moov box,根本无从解码,所以就导致MP4文件点播,需要缓冲很久,加载头部数据。当然常见解决方案,就是文件切分,把大的MP4文件,切为小一点的MP4文件,这样每块的MP4的加载就会快很多,这个也是很多视频网站的解决方式,这样的切分也还好,分片数量不算很多。然而到了HLS时代,为了支持HLS协议,就需要把大的MP4文件,都转换为了更小的HLS-TS分片文件,这就出现问题了,服务器太多碎片一样的TS文件,难以管理,也影响性能。怎么解决呢?那就是虚拟HLS分片技术。

技术分析

1. 虚拟分片逻辑

一个常见的mp4文件结构如下图所见。其中最重要的即是MoovBox,记录了后续所有音频帧和视频帧的解码信息、时间戳、位置等非常关键的数据,图里称做索引数据,而在视频帧中,关键帧是最重要的节点,播放器会在关键帧位置对整个图像进行刷新,可以认为是图像解码的起点。

虚拟HLS分片,顾名思义,就是不实际切片,只记录实际MP4文件和需要切分的TS分片直接的数据对应关系,然后在播放器实际请求播放的时候,通过对应关系,把相应的音频视频数据,在内存中拼装为TS文件。比如,对上述MP4文件,请求02秒的数据,那么就需要通过对应记录,找到02秒的数据,组合成MPEG-TS格式,生成HLS分片文件。当然,切分的过程需要注意,就是分片起点必须是视频关键帧的节点,否则生成文件就无法正常解码。

2. 设计方案

根据之前分析的描述分片逻辑,就可以根据moov box中罗列的音频和视频帧索引,把整个mp4文件,根据关键帧为界限,进行虚拟分片的划分,每个分段就对应一个ts文件,并把这种对应关系写入到索引文件(我这里定义为xxx.index文件)。整个方案的示意图如下,图里描述的很清楚了

上图中Sample1 Sample2 ... 指代的是音频和视频帧,这里没有做区分,不影响理解。

简单说明一下:

xxx.mp4是要点播的原始文件,xxx.m3u8是给HLS播放器使用的播放地址文件,里面罗列了所有的ts分片地址,(对m3u8和HLS更具体介绍可以看我另一片文章“HTTP Live Streaming直播(iOS直播)技术分析与实现”)。xxx.index是根据虚拟分片的情况,生成的描述文件,或者说索引文件,内部记录每个TS分片(索引文件里被记录为segment)在真实MP4文件中的分布地址。这样,xxx.mp4,xxx.m3u8和xxx.index,共同组成了本方案的全部相关文件。实际应用过程中,客户端或者服务器端根据m3u8文件和index文件的内容,很容易就计算出HLS播放器请求的TS分片所对应的实际数据位置,从而拼装数据,实现HLS点播流。

3. 流程

下图的流程展示了从HLS播放器请求m3u8地址开始,到HLS播放器获取到第一个TS分片文件为止的逻辑过程。这里面除了服务器端和播放器端,还有一个我定义的“适配端”,这个适配端主要做的工作就是根据index文件和m3u8文件,计算出真实数据位置,然后向服务器发送Range请求,并将服务器返回的数据,组成TS分片文件,再回传给HLS播放器。这个适配端是整个流程的关键之处。

适配端可以放在服务器上,也可以放在客户端上。如果放在客户端,那服务器端就几乎不需要任何改动,就可以实现虚拟HLS分片技术。如果整合到服务器端,那客户端也基本不需要什么改动。

实现

  1. 首先是对mp4文件进行处理,生成对应的index文件和m3u8文件

进行切片,并计算index文件中segment和ts对应关系的过程如下:

  1. 然后是编写适配端,为请求的TS分片组合数据

目录
相关文章
|
7天前
|
大数据 云栖大会 云计算
2024云栖大会 预告:磐久服务器技术创新和实践
2024云栖大会 预告:磐久服务器技术创新和实践
2024云栖大会 预告:磐久服务器技术创新和实践
|
20天前
|
缓存 安全 Java
Java服务器端技术:Servlet与JSP的集成与扩展
Java服务器端技术:Servlet与JSP的集成与扩展
14 3
|
2天前
|
安全 关系型数据库 API
深入理解后端技术:构建高效、可靠的服务器端应用
本文将深入探讨后端技术的核心概念和最佳实践,包括服务器端编程、数据库管理、API设计与开发等方面。我们将从基础开始,逐步深入,帮助读者建立起对后端开发的全面理解,从而能够独立构建高效、可靠的服务器端应用。
9 0
|
6天前
|
存储 负载均衡 数据库
探索后端技术:从服务器架构到数据库优化的实践之旅
在当今数字化时代,后端技术作为支撑网站和应用运行的核心,扮演着至关重要的角色。本文将带领读者深入后端技术的两大关键领域——服务器架构和数据库优化,通过实践案例揭示其背后的原理与技巧。无论是对于初学者还是经验丰富的开发者,这篇文章都将提供宝贵的见解和实用的知识,帮助读者在后端开发的道路上更进一步。
|
19天前
|
UED
JSF文件下载:解锁终极文件传输秘籍,让你的Web应用瞬间高大上!
【8月更文挑战第31天】掌握JSF文件下载功能对构建全面的Web应用至关重要。本文通过具体代码示例,详细介绍如何在JSF中实现文件下载。关键在于后端Bean中的文件读取与响应设置。示例展示了从创建实体类到使用`<h:commandLink>`触发下载的全过程,并通过正确设置响应头和处理文件流,确保文件能被顺利下载。这将显著提升Web应用的实用性与用户体验。
33 0
|
19天前
|
JavaScript 搜索推荐 API
Angular携手Angular Universal:全面实现服务器端渲染技术——从环境搭建到部署的详尽指南
【8月更文挑战第31天】在现代Web开发中,服务器端渲染(SSR)对于提升应用加载速度和SEO至关重要。Angular Universal作为Angular的SSR解决方案,允许在服务器上渲染应用,再发送至客户端,显著提高初始加载速度。本文将详细介绍如何使用Angular和Angular Universal实现SSR,并分享最佳实践。
27 0
|
21天前
|
数据可视化 Python
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
通过python建立一个web服务查看服务器上的文本、图片、视频等文件
20 0
|
22天前
|
前端开发 JavaScript API
Web服务器与前端技术的集成
【8月更文第28天】随着Web开发技术的发展,现代前端框架如React、Vue.js等已经成为构建复杂Web应用的标准工具。为了提供更好的用户体验,这些前端应用通常需要与后端Web服务器进行紧密集成。本文将详细介绍如何将React和Vue.js与后端Web服务器无缝集成,以创建高性能且用户友好的Web应用。
19 0
|
9天前
|
Cloud Native Java 编译器
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
随着云计算技术的不断发展,云服务商们不断推出高性能、高可用的云服务器实例,以满足企业日益增长的计算需求。阿里云推出的倚天实例,凭借其基于ARM架构的倚天710处理器,提供了卓越的计算能力和能效比,特别适用于云原生、高性能计算等场景。然而,有的用户需要将传统基于x86平台的应用迁移到倚天实例上,本文将介绍如何将基于x86架构平台的应用迁移到阿里云倚天实例的服务器上,帮助开发者和企业用户顺利完成迁移工作,享受更高效、更经济的云服务。
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
|
7天前
|
编解码 前端开发 安全
通过阿里云的活动购买云服务器时如何选择实例、带宽、云盘
在我们选购阿里云服务器的过程中,不管是新用户还是老用户通常都是通过阿里云的活动去买了,一是价格更加实惠,二是活动中的云服务器配置比较丰富,足可以满足大部分用户的需求,但是面对琳琅满目的云服务器实例、带宽和云盘选项,如何选择更适合自己,成为许多用户比较关注的问题。本文将介绍如何在阿里云的活动中选择合适的云服务器实例、带宽和云盘,以供参考和选择。
通过阿里云的活动购买云服务器时如何选择实例、带宽、云盘

热门文章

最新文章