cjh804263197 / blog Goto Github PK
View Code? Open in Web Editor NEW博客
博客
起初m3u8文件对我来说还是很陌生的一个东西,学习一项新事物首先要搞明白它的本质,以及它的优缺点,下面我就首先讲一下我对m3u8文件的理解。
m3u8文件是指UTF-8编码格式的m3u文件。它与mp4、avi等一些视频文件的区别在于后者属于视频文件,而前者是索引纯文本文件,视频播放器可以通过它找到对应的音视频文件的网络地址进行在线播放。它的优点在于:可以做多码率的适配,根据网络带宽,客户端会自动选择一个适合自己码率的文件进行播放,保证视频流的流畅,该m3u8文件的访问地址为:http://cdn.theoplayer.com/video/star_wars_episode_vii-the_force_awakens_official_comic-con_2015_reel_(2015)/index.m3u8,文件内容如下:
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="en",URI="subtitles/en/index.m3u8"
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="French",DEFAULT=NO,AUTOSELECT=NO,LANGUAGE="fr",URI="subtitles/fr/index.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=611000,AVERAGE-BANDWIDTH=532000,RESOLUTION=480x270,CODECS="avc1.42c00d,mp4a.40.2",SUBTITLES="subs"
stream-400/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1024000,AVERAGE-BANDWIDTH=891000,RESOLUTION=640x360,CODECS="avc1.42c00d,mp4a.40.2",SUBTITLES="subs"
stream-800/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1837000,AVERAGE-BANDWIDTH=1598000,RESOLUTION=960x540,CODECS="avc1.4d001e,mp4a.40.2",SUBTITLES="subs"
stream-1600/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2291000,AVERAGE-BANDWIDTH=1993000,RESOLUTION=1280x720,CODECS="avc1.4d001e,mp4a.40.2",SUBTITLES="subs"
stream-2000/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3271000,AVERAGE-BANDWIDTH=2845000,RESOLUTION=1920x1080,CODECS="avc1.64001e,mp4a.40.2",SUBTITLES="subs"
stream-3000/index.m3u8
在该文件中(m3u8文件具体的格式语法参考点击这里),分别展示了不同分辨率下视频的m3u8文件路径,播放器可以根据当前网络环境来选取最优分辨率的m3u8文件路径,例如当前播放器判断当前网络环境下播放分辨率为960x540的视频文件为最优方案,则其会继续访问分辨率为960x540的视频的m3u8文件,访问路径为http://cdn.theoplayer.com/video/star_wars_episode_vii-the_force_awakens_official_comic-con_2015_reel_(2015)/stream-1600/index.m3u8,文件内容如下:
#EXTM3U
#EXT-X-TARGETDURATION:4
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PROGRAM-DATE-TIME:2015-07-30T12:36:33Z
#EXTINF:4,
segment-00000.ts
#EXTINF:4,
segment-00001.ts
#EXTINF:4,
segment-00002.ts
#EXTINF:4,
segment-00003.ts
#EXTINF:4,
segment-00004.ts
#EXTINF:4,
segment-00005.ts
#EXTINF:4,
segment-00006.ts
#EXTINF:4,
segment-00007.ts
#EXTINF:4,
segment-00008.ts
#EXTINF:4,
segment-00009.ts
#EXTINF:4,
segment-00010.ts
#EXTINF:4,
segment-00011.ts
#EXTINF:4,
segment-00012.ts
#EXTINF:4,
segment-00013.ts
#EXTINF:4,
segment-00014.ts
#EXTINF:4,
segment-00015.ts
#EXTINF:4,
segment-00016.ts
#EXTINF:4,
segment-00017.ts
#EXTINF:4,
segment-00018.ts
#EXTINF:4,
segment-00019.ts
#EXTINF:4,
segment-00020.ts
#EXT-X-ENDLIST
在该文件中#EXT-X-TARGETDURATION:4
表示文件中所有的视频切片长度为4秒,#EXTINF:4
表示当前视频切片的长度为4秒,segment-00017.ts
表示视频切片的路径(该视频切片的下载路径就是http://cdn.theoplayer.com/video/star_wars_episode_vii-the_force_awakens_official_comic-con_2015_reel_(2015)/stream-1600/segment-00017.ts)。当视频播放器读取该m3u8文件时,会按顺序依次加载视频切片文件,从而组成一个完成的视频。因此m3u8的第二个优点就在于对服务器的要求较低,如果你要在一段长达一小时的视频中跳转,如果使用单个 MP4 格式的视频文件,并且也是用 HTTP 协议,那么需要代理服务器支持 HTTP range request 以获取大文件中的一部分。不是所有的代理服务器都对此有良好的支持。而 HTTP Live Streaming 则只需要根据列表文件中的时间轴找出对应的 TS 片段下载即可,不需要 range request,对代理服务器的要求小很多。。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.