m3u8文件信息總結(jié)

m3u8文件信息總結(jié)

最近在做視頻下載屏歹,本地播放功能的時(shí)候,發(fā)現(xiàn)的問題,先筆記記錄一下

開發(fā)思路

(1) 在線解析m3u8文件內(nèi)容,把里面的ts對應(yīng)連接的資源下載本地的Document文件下拦键。

?(2) 把下載下來的資源使用本地路徑重新拼接成一個(gè)新的本地m3u8文件。

(3) 然后在開啟一個(gè)http服務(wù)端毅往,把m3u8共享成連接地址耻警,讓播放器播放。

一建瘫、概念

1. Playlist file

一個(gè)M3U的 Playlist 就是一個(gè)由多個(gè)獨(dú)立行組成的文本文件媚朦,每行由回車/換行區(qū)分。每一行可以是一個(gè)URI? 空白行或

是以”#“號開頭的字符串侯嘀,并且空格只能存在于一行中不同元素間的分隔另凌。

一個(gè)URI 表示一個(gè)媒體段或是”variant Playlist file“(最多支持一層嵌套,即一個(gè)mm3u8文件中嵌套另一個(gè)m3u8)戒幔,

以”#EXT“開頭的表示一個(gè)”tag“吠谢,否則表示注釋,直接忽略

2. Tags

#EXTM3U:? 每個(gè)M3U文件第一行必須是這個(gè)tag诗茎。

#EXTINF:指定每個(gè)媒體段(ts)的持續(xù)時(shí)間工坊,這個(gè)僅對其后面的URI有效,每兩個(gè)媒體段URI間被這個(gè)tag分隔開敢订,其格式如下:

#EXTINF:,? :

duration表示持續(xù)的時(shí)間(秒)”Durations MUST be integers if the protocol version of the Playlist file is less

than 3“王污,否則可以是浮點(diǎn)數(shù)。

#EXT-X-BYTERANGE:表示媒體段是一個(gè)媒體URI資源中的一段楚午,只對其后的media URI有效昭齐,格式如下:

#EXT-X-BYTERANGE:[@o]:

其中n表示這個(gè)區(qū)間的大小,o表在URI中的offset矾柜;”The EXT-X-BYTERANGE tag appeared in version 4 of the protocol“阱驾。

#EXT-X-TARGETDURATION:指定最大的媒體段時(shí)間長(秒)。所以#EXTINF中指定的時(shí)間長度必須小于或是等于這個(gè)最大

值把沼。這個(gè)tag在整個(gè)PlayList文件中只能出現(xiàn)一 次(在嵌套的情況下啊易,一般有真正ts url的m3u8才會出現(xiàn)該tag)。格式如下:

#EXT-X-TARGETDURATION::s表示最大的秒數(shù)饮睬。

#EXT-X-MEDIA-SEQUENCE:每一個(gè)media URI 在 PlayList中只有唯一的序號租谈,相鄰之間序號+1。

#EXT-X-MEDIA-SEQUENCE::

一個(gè)media URI并不是必須要包含的捆愁,如果沒有割去,默認(rèn)為0。

#EXT-X-KEY:表示怎么對media segments進(jìn)行解碼昼丑。其作用范圍是下次該tag出現(xiàn)前的所有media URI呻逆,格式如下:

#EXT-X-KEY::

NONE 或者 AES-128。如果是NONE菩帝,則URI以及IV屬性必須不存在咖城,如果是AES-128(Advanced Encryption

Standard)茬腿,則URI必須存在,IV可以不存在宜雀。

對于AES-128的情況切平,keytag和URI屬性共同表示了一個(gè)key文件,通過URI可以獲得這個(gè)key辐董,如果沒有

IV(Initialization Vector),則使用序列號作為IV進(jìn)行編解碼悴品,將序列號的高位賦到16個(gè)字節(jié)的buffer中,左邊補(bǔ)0简烘;如果

有IV苔严,則將改值當(dāng)成16個(gè)字節(jié)的16進(jìn)制數(shù)。

#EXT-X-PROGRAM-DATE-TIME:將一個(gè)絕對時(shí)間或是日期和一個(gè)媒體段中的第一個(gè)sample相關(guān)聯(lián)孤澎,只對下一個(gè)meida URI有效届氢,格式如下:

#EXT-X-PROGRAM-DATE-TIME:

For example:

#EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00

#EXT-X-ALLOW-CACHE:是否允許做cache,這個(gè)可以在PlayList文件中任意地方出現(xiàn)覆旭,并且最多出現(xiàn)一次悼沈,作用效果是所有的媒體段。格式如下:

#EXT-X-ALLOW-CACHE:

#EXT-X-PLAYLIST-TYPE: 提供關(guān)于PlayList的可變性的信息姐扮, 這個(gè)對整個(gè)PlayList文件有效,是可選的衣吠,格式如下:

#EXT-X-PLAYLIST-TYPE: :如果是VOD茶敏,則服務(wù)器不能改變PlayList 文件;如果是EVENT缚俏,則

服務(wù)器不能改變或是刪除PlayList文件中的任何部分惊搏,但是可以向該文件中增加新的一行內(nèi)容。

#EXT-X-ENDLIST:表示PlayList的末尾了忧换,它可以在PlayList中任意位置出現(xiàn)恬惯,但是只能出現(xiàn)一個(gè),格式如下:

#EXT-X-ENDLIST

#EXT-X-MEDIA:被用來在PlayList中表示相同內(nèi)容的不用語種/譯文的版本亚茬,比如可以通過使用3個(gè)這種tag表示3中不用語音的音

頻酪耳,或者用2個(gè)這個(gè)tag表示不同角度的video在PlayLists中。這個(gè)標(biāo)簽是獨(dú)立存在的刹缝,其格式如下:

#EXT-X-MEDIA::該屬性列表中包含:URI碗暗、TYPE、GROUP-ID梢夯、LANGUAGE言疗、NAME、DEFAULT颂砸、AUTOSELECT噪奄。

URI:如果沒有死姚,則表示這個(gè)tag描述的可選擇版本在主PlayList的EXT-X-STREAM-INF中存在;

TYPE:AUDIO and VIDEO;

GROUP-ID:具有相同ID的MEDIAtag,組成一組樣式勤篮;

LANGUAGE:identifies the primary language used in the rendition都毒。

NAME:The value is a quoted-string containing a human-readable description of the rendition. If the LANGUAGE attribute is present then this description SHOULD be in that language。

DEFAULT: YES或是NO叙谨,默認(rèn)是No温鸽,如果是YES,則客戶端會以這種選項(xiàng)來播放手负,除非用戶自己進(jìn)行選擇涤垫。

AUTOSELECT:YES或是NO,默認(rèn)是No竟终,如果是YES蝠猬,則客戶端會根據(jù)當(dāng)前播放環(huán)境來進(jìn)行選擇(用戶沒有根據(jù)自己偏好進(jìn)行選擇的前提下)。

The EXT-X-MEDIA tag appeared in version 4 of the protocol统捶。

o All EXT-X-MEDIA tags in the same group MUST have the same TYPE

attribute.

o All EXT-X-MEDIA tags in the same group MUST have different NAME

attributes.

o A group MUST NOT have more than one member with a DEFAULT

attribute of YES.

o All members of a group whose AUTOSELECT attribute has a value of

YES MUST have LANGUAGE [RFC5646] attributes with unique values.

o All members of a group with TYPE=AUDIO MUST use the same audio

sample format.

o All members of a group with TYPE=VIDEO MUST use the same video

sample format喘鸟。

#EXT-X-STREAM-INF:指定一個(gè)包含多媒體信息的 media URI 作為PlayList什黑,一般做M3U8的嵌套使用,它只對緊跟后面的URI有

效拣凹,格式如下:

#EXT-X-STREAM-INF:

有以下屬性:

BANDWIDTH:帶寬,必須有恨豁。

PROGRAM-ID:該值是一個(gè)十進(jìn)制整數(shù)嚣镜,惟一地標(biāo)識一個(gè)在PlayList文件范圍內(nèi)的特定的描述。一個(gè)PlayList 文件中可

能包含多個(gè)有相同ID的此tag橘蜜。

CODECS:不是必須的菊匿。

RESOLUTION:分辨率。

AUDIO:這個(gè)值必須和AUDIO類別的“EXT-X-MEDIA”標(biāo)簽中“GROUP-ID”屬性值相匹配扮匠。

VIDEO:同上

m3u8的組成格式有多種捧请,下面給出一個(gè)實(shí)例,http://ipadlive.cntv.soooner.com/cctv_p2p_hdcctv2.m3u8這個(gè)是CCTV-2財(cái)經(jīng)的一個(gè)源棒搜,內(nèi)容如下

#EXTM3U

#EXT-X-ALLOW-CACHE:NO

#EXT-X-TARGETDURATION:10

#EXT-X-MEDIA-SEQUENCE:8453235

#EXTINF:19,

http://124.232.164.44:80/ipad/160_15601_4572/20130804075250.ts?userid=VSNDNP-183061027101_160_15601_4572

#EXTINF:2,

http://124.232.164.44:80/ipad/160_15601_4572/20130804075300.ts?userid=VSNDNP-183061027101_160_15601_4572

#EXTINF:10,

http://124.232.164.44:80/ipad/160_15601_4572/20130804075310.ts?userid=VSNDNP-183061027101_160_15601_4572

如果是這種的話疹蛉,就很方便其中http一行就是完整的一個(gè)鏈接,否則還要進(jìn)行拼接力麸。

目錄

1 簡介?2

2 概述?2

3 播放列表文件?3

3.1 介紹?3

3.2新標(biāo)簽?4

3.2.1?EXT-X-TARGETDURATION?4

3.2.2?EXT-X-MEDIA-SEQUENCE?4

3.2.3?EXT-X-KEY?4

3.2.4?EXT-X-PROGRAM-DATE-TIME?5

3.2.5?EXT-X-ALLOW-CATCH?5

3.2.6?EXT-X-ENDLIST?5

3.2.7?EXT-X-STREAM-INF?5

3.2.8?EXT-X-DISCONTINUITY?6

3.2.9?EXT-X-VERSION?6

4 多媒體文件?7

5 密鑰文件?7

5.1 介紹?7

5.2? IV FOR AES-128?7

6 客戶端/服務(wù)器行為?8

6.1 介紹?8

6.2 服務(wù)器進(jìn)程?8

6.2.1介紹?8

6.2.2 滑動窗口播放列表?9

6.2.3 加密媒體文件?9

6.2.4 提供變種數(shù)據(jù)流?10

6.3 客戶端進(jìn)程?10

6.2.1 介紹?10

6.2.2 加載播放列表文件?11

6.2.3播放播放列表文件?11

6.2.4重新載入播放列表文件?11

6.2.5 確定下一個(gè)要加載的文件?12

6.2.6 解密經(jīng)加密的媒體文件?12

7 協(xié)議版本的兼容性?12

8 例子?12

8.1 簡單的播放列表文件?12

8.2 滑動窗口播放列表可款,使用https?13

8.3 加密的媒體文件與播放列表文件?13

8.4 變種的播放列表文件?13

1?簡介

本文檔介紹了通過HTTP傳輸極大的多媒體數(shù)據(jù)流的協(xié)議[RFC2616]育韩。該協(xié)議支持媒體數(shù)據(jù)的加密,并提供流的備用版本(如比特率)闺鲸。媒體數(shù)據(jù)可以在創(chuàng)建后被很快地傳輸筋讨,允許它在近實(shí)時(shí)被接收。

在第11章中列出了悉罕,如HTTP的,描述相關(guān)標(biāo)準(zhǔn)的外部引用嗜逻。

2?概述

3?播放列表文件

3.1介紹

播放列表必須是擴(kuò)展的M3U文件,該文檔通過定義新的標(biāo)簽擴(kuò)展了m3u文件的格式萄凤。M3U播放列表是一個(gè)文本文件,它包含了各自獨(dú)立的行,行以一個(gè)LF字符或者LF字符緊跟一個(gè)CR字符來結(jié)束。行可以是一個(gè)URI垛耳,空行,或者以字符#開頭缔莲≈В空行將會被忽略∈钪睿空格只能作為一行中不同元素間的分隔。

一個(gè)URI?表示一個(gè)媒體文件或是變種播放列表文件(見3.2.7)

??? URI可以是相對的笛洛,一個(gè)相對的URI必須被包含該URI的播放列表文件中的URI所解析。

以注釋字符#開頭的行可能是注釋或者標(biāo)簽狱杰,標(biāo)簽以#EXT開頭,其他所有行都應(yīng)該被忽略错沽。播放列表文件的持續(xù)時(shí)間是他所指向的媒體文件的時(shí)長的總和。

以.M3U8作為文件名后綴或者HTTPContent-Type(RFC2616)為“Application/vnd.apple.mpegurl”的M3U播放列表文件使用UTF-8(RFC3629)編碼。以.M3U作為文件名后綴或者HTTPContent-Type為“audio/mpegurl”的M3U播放列表文件使用US-ASCII編碼耀里。

播放列表文件名必須以.M3U8為后綴、HTTPContent-Type為“Application/vnd.apple.mpegurl”(如果使用http傳輸)或者以.M3U為后綴织堂、HTTPContent-Type為“audio/mpegurl”附较。

擴(kuò)展的M3U文件格式定義了兩種標(biāo)簽:EXTM3U和EXTINF。區(qū)分?jǐn)U展的M3U文件與普通M3U文件的關(guān)鍵在于前者的首行為#EXTM3U早像。

EXTINF是一個(gè)記錄標(biāo)記劝堪,該標(biāo)記描述了后邊URI所指定的媒體文件熬粗。每個(gè)媒體文件URI前邊必須有EXTINF標(biāo)簽。格式如下:

#EXTINF: ,

DURATION是一個(gè)整數(shù),它指定了媒體文件以秒為單位的持續(xù)時(shí)間答渔,時(shí)間應(yīng)四舍五入到最接近的整數(shù)。行內(nèi)逗號后邊的剩余部分是媒體文件的名字,該名字是媒體分片的人眼可讀的信息標(biāo)題嗦明。

該文檔定義了如下的新標(biāo)簽:EXT-X-TARGETDURATION奔浅,EXT-X-MEDIA-SEQUENCE汹桦,EXT-X-KEY,EXT-X-PROGRAM-DATE-TIME督禽,EXT-X-ALLOW-CATCH,EXT-X-ENDLIST胧谈,EXT-X-STREAM-INF,EXT-X-DISCONTINUITY蔑滓,EXT-X-VERSION

3.2新標(biāo)簽

3.2.1????? EXT-X-TARGETDURATION

3.2.2????? EXT-X-MEDIA-SEQUENCE

3.2.3????? EXT-X-KEY

3.2.4????? EXT-X-PROGRAM-DATE-TIME

3.2.5????? EXT-X-ALLOW-CATCH

3.2.6????? EXT-X-ENDLIST

??? EXT-X-ENDLIST標(biāo)簽標(biāo)示沒有更多媒體文件將會加入到播放列表中摹闽,它可能會出現(xiàn)在播放列表文件的任何地方澜汤,但是不能出現(xiàn)兩次或以上。其格式如下:

#EXT-X-ENDLIST

3.2.7????? EXT-X-STREAM-INF

#EXT-X-STREAM-INF:[attribute=value][,attribute=value]*

3.2.8????? EXT-X-DISCONTINUITY

3.2.9????? EXT-X-VERSION

4?多媒體文件

5?密鑰文件

5.1介紹

5.2 ?IV FOR AES-128

6?客戶端/服務(wù)器行為

6.1介紹

6.2服務(wù)器進(jìn)程

6.2.1介紹

6.2.2滑動窗口播放列表

6.2.3加密媒體文件

6.2.4提供變種數(shù)據(jù)流

6.3客戶端進(jìn)程

6.3.1介紹

6.3.2加載播放列表文件

6.3.3播放播放列表文件

6.3.4重新載入播放列表文件

6.3.5確定下一個(gè)要加載的文件

6.3.6解密經(jīng)加密的媒體文件

7?協(xié)議版本的兼容性

8?例子

8.1簡單的播放列表文件

#EXTM3U

#EXT-X-TARGETDURATION:5220

#EXTINF:5220,

http://media.example.com/entire.ts

#EXT-X-ENDLIST


8.2滑動窗口播放列表,使用https

#EXTM3U

#EXT-X-TARGETDURATION:8

#EXT-X-MEDIA-SEQUENCE:2680

#EXTINF:8,

https://priv.example.com/fileSequence2680.ts

#EXTINF:8,

https://priv.example.com/fileSequence2681.ts

#EXTINF:8,

8.3加密的媒體文件與播放列表文件

#EXTM3U

#EXT-X-MEDIA-SEQUENCE:7794

#EXT-X-TARGETDURATION:15

#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52"

#EXTINF:15,

http://media.example.com/fileSequence52-1.ts

#EXTINF:15,

http://media.example.com/fileSequence52-2.ts

#EXTINF:15,

http://media.example.com/fileSequence52-3.ts

#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=53"

#EXTINF:15,

變種的播放列表文件

#EXTM3U

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000

http://example.com/low.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000

http://example.com/mid.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000

http://example.com/hi.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS="mp4a.40.5"

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挫掏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子爸邢,更是在濱河造成了極大的恐慌,老刑警劉巖券敌,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異卑雁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來示辈,“玉大人,你說我怎么就攤上這事射富。” “怎么了柴灯?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵查描,是天一觀的道長。 經(jīng)常有香客問我勾笆,道長,這世上最難降的妖魔是什么酸舍? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任双妨,我火速辦了婚禮泣特,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己弊决,他們只是感情好飘诗,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布貌嫡。 她就那樣靜靜地躺著,像睡著了一般该溯。 火紅的嫁衣襯著肌膚如雪岛抄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天狈茉,我揣著相機(jī)與錄音夫椭,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛实昨,可吹牛的內(nèi)容都是我干的曙咽。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼终吼,長吁一口氣:“原來是場噩夢啊……” “哼肠虽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起想暗,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤慈参,失蹤者是張志新(化名)和其女友劉穎猜绣,沒想到半個(gè)月后召烂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體麻削,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡黄鳍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年蔫敲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片眉厨。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丈秩,死狀恐怖识椰,靈堂內(nèi)的尸體忽然破棺而出锉走,到底是詐尸還是另有隱情疹尾,我是刑警寧澤秕豫,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布回铛,位于F島的核電站欧募,受9級特大地震影響慨蛙,放射性物質(zhì)發(fā)生泄漏辽聊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一期贫、第九天 我趴在偏房一處隱蔽的房頂上張望跟匆。 院中可真熱鬧,春花似錦通砍、人聲如沸玛臂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迹冤。三九已至,卻和暖如春虎忌,著一層夾襖步出監(jiān)牢的瞬間泡徙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工膜蠢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堪藐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓挑围,卻偏偏與公主長得像庶橱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子贪惹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容