视频文件M3U8和TS格式切片,了解一下?

栏目: 服务器 · Nginx · 发布时间: 5年前

内容简介:先来简要介绍一下什么是MPEG2-TS吧,先献上一段来自百度百科的科普。MPEG2格式大家都通过对DVD的接触而多多少少了解了一些,DVD节目中的MPEG2格式,确切地说是MPEG2-PS,全称是Program Stream,而TS的全称则是Transport Stream。MPEG2-PS主要应用于存储的具有固定时长的节目,如DVD电影,而MPEG-TS则主要应用于实时传送的节目,比如实时广播的电视节目。这两种格式的主要区别是什么呢?简单地打个比喻说,你将DVD上的VOB文件的前面一截cut掉(或者干脆就

先来简要介绍一下什么是MPEG2-TS吧,先献上一段来自百度百科的科普。MPEG2格式大家都通过对DVD的接触而多多少少了解了一些,DVD节目中的MPEG2格式,确切地说是MPEG2-PS,全称是Program Stream,而TS的全称则是Transport Stream。MPEG2-PS主要应用于存储的具有固定时长的节目,如DVD电影,而MPEG-TS则主要应用于实时传送的节目,比如实时广播的电视节目。这两种格式的主要区别是什么呢?简单地打个比喻说,你将DVD上的VOB文件的前面一截cut掉(或者干脆就是数据损坏),那么就会导致整个文件无法解码了,而电视节目是你任何时候打开电视机都能解码(收看)的,所以,MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的。更多请参考百度百科

一些个人认知

大多数视频网站都采用渐进式下载,这意味着视频会下载到我的设备上。视频一般采用流式传输,这意味着我们不只是下载了1个文件,而是下载了很多小包(本文指的是.ts传输流切片文件)。比如我最近在极客帮学习视频课程时,看到他们对视频进行了分流加载,而且还是一个个的.ts格式传输流文件,给视频文件进行加密的同时又是一种性能优化手段,打开浏览器的开发者 工具 就可以清楚地看到它们在异步加载,此处先贴上2张截图:

视频文件M3U8和TS格式切片,了解一下?
视频文件M3U8和TS格式切片,了解一下?

图一就是一个几十兆的视频文件分流加载的效果,图二可以看到这些ts文件的http响应头的 content-type 的值为 application/octet-stream ,是个二进制传输的流文件格式,不妨再看看 accept-ranges 的值为 bytes 。从中还可以看到,他们采用的服务器是Tengine,经查阅资料可知,Tengine是由淘宝网发起的Web服务器项目,已是个开源项目,此前对Tengine一无所知,还请自行查阅资料:joy:。

补充Accept-Range

服务器使用 HTTP 响应头 Accept-Range 标识自身支持范围请求(partial requests)。字段的具体值用于定义范围请求的单位。当浏览器发现 Accept-Range 头时,可以尝试继续中断了的下载,而不是重新开始。 Accept-Ranges 的值可以为 bytesnone

  • bytes 范围请求的单位是bytes(字节)。
  • none 其中none表示不支持任何范围请求单位,由于其等同于没有返回此头部,因此很少使用。不过一些浏览器,比如IE9,会依据该头部去禁用或者移除下载管理器的暂停按钮。

浅谈m3u8文件格式

M3U8是 Unicode 版本的M3U,用 UTF-8 编码。"M3U" 和 "M3U8" 文件都是苹果公司使用的 HTTP Live Streaming(HLS) 协议格式的基础,这种协议格式可以在 iPhone 和 Macbook 等设备播放。m3u8文件其实是 HTTP Live Streaming(缩写为 HLS) 协议的部分内容,而 HLS 是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。

HLS 的工作原理是把整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的 extended M3U (m3u8) playlist文件,用于寻找可用的媒体流。 HLS 只请求基本的 HTTP 报文,与实时传输协议(RTP)不同,HLS 可以穿过任何允许 HTTP 数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络 CDN 来传输媒体流。更详细介绍请参考m3u8文件格式详解

m3u8文件简介

m3u8文件实质是一个播放列表(playlist),其可能是一个媒体播放列表(Media Playlist),或者是一个主列表(Master Playlist)。但无论是哪种播放列表,其内部文字使用的都是 utf-8 编码。 当 m3u8 文件作为媒体播放列表(Meida Playlist)时,其内部信息记录的是一系列媒体片段资源,顺序播放该片段资源,即可完整展示多媒体资源,由此可知,整个视频的总时长就是各个.ts切片资源的时长之和。其格式如下图所示:

视频文件M3U8和TS格式切片,了解一下?
视频文件M3U8和TS格式切片,了解一下?

继续探究ts文件

既然.ts文件只是一种视频切片文件,那么它应该是可以播放的,把它下载到本地后,果然可以单独播放,真是大开眼界了:joy:(可以自行下载该ts文件试试ts文件链接),此截图是极客帮最新推出的视频课程《玩转Webpack》其中一小节(希望腾讯大佬可以授权):

视频文件M3U8和TS格式切片,了解一下?

请求m3u8播放列表的方法

  • 一是通过m3u8的URI进行请求,则该文件必须以.m3u8或.m3u结尾;
  • 二是通过 HTTP 进行请求,则请求头 Content-Type 必须设置为 "application/vnd.apple.mpegurl" 或者 "audio/mpegurl";

写在最后

本文参考了一些资料,因自己对这方面没啥经验,只能贴贴文字和图片了。很久没写文章了,阅读过程中如有不爽,还请轻拍~


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Letting Go of the Words

Letting Go of the Words

Janice (Ginny) Redish / Morgan Kaufmann / 2007-06-11 / USD 49.95

"Redish has done her homework and created a thorough overview of the issues in writing for the Web. Ironically, I must recommend that you read her every word so that you can find out why your customer......一起来看看 《Letting Go of the Words》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

html转js在线工具
html转js在线工具

html转js在线工具