FMUSER更輕鬆地傳輸視頻和音頻!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org ->荷蘭語
sq.fmuser.org ->阿爾巴尼亞人
ar.fmuser.org ->阿拉伯語
hy.fmuser.org - >亞美尼亞
az.fmuser.org ->阿塞拜疆
eu.fmuser.org ->巴斯克
be.fmuser.org ->白俄羅斯語
bg.fmuser.org - >保加利亞
ca.fmuser.org ->加泰羅尼亞語
zh-CN.fmuser.org ->中文(簡體)
zh-TW.fmuser.org - >中國(繁體)
hr.fmuser.org ->克羅地亞語
cs.fmuser.org ->捷克
da.fmuser.org ->丹麥語
nl.fmuser.org - >荷蘭
et.fmuser.org ->愛沙尼亞語
tl.fmuser.org ->菲律賓
fi.fmuser.org ->芬蘭語
fr.fmuser.org - >法國
gl.fmuser.org ->加利西亞語
ka.fmuser.org ->喬治亞
de.fmuser.org ->德語
el.fmuser.org - >希臘
ht.fmuser.org ->海地克里奧爾語
iw.fmuser.org ->希伯來語
hi.fmuser.org ->印地語
hu.fmuser.org - >匈牙利
is.fmuser.org ->冰島語
id.fmuser.org ->印尼語
ga.fmuser.org ->愛爾蘭
it.fmuser.org - >意大利
ja.fmuser.org ->日語
ko.fmuser.org ->韓文
lv.fmuser.org ->拉脫維亞
lt.fmuser.org - >立陶宛
mk.fmuser.org ->馬其頓語
ms.fmuser.org ->馬來語
mt.fmuser.org ->馬耳他語
no.fmuser.org - >挪威
fa.fmuser.org ->波斯語
pl.fmuser.org ->波蘭語
pt.fmuser.org ->葡萄牙語
ro.fmuser.org - >羅馬尼亞
ru.fmuser.org ->俄語
sr.fmuser.org ->塞爾維亞語
sk.fmuser.org ->斯洛伐克
sl.fmuser.org - >斯洛文尼亞
es.fmuser.org ->西班牙語
sw.fmuser.org ->斯瓦希里語
sv.fmuser.org ->瑞典語
th.fmuser.org - >泰國
tr.fmuser.org ->土耳其語
uk.fmuser.org ->烏克蘭語
ur.fmuser.org ->烏爾都語
vi.fmuser.org - >越南
cy.fmuser.org ->威爾士語
yi.fmuser.org - >意第緒語
背景
MP4是我們常見的視頻格式,通常在我們播放服務器視頻時,它直接是所請求的MP4視頻源。 但是實際上,這不好。 MP4頭文件[ftyp + moov]很大,因此初始播放需要下載完整的頭文件並進行分析,然後下載一定長度的可播放視頻片段進行播放。 另外,隨著視頻大小的增加,頭文件將繼續增長,並且初始播放時間將更長。 針對這種情況,需要一種可以加快視頻初始分析速度的方法。 HLS是Apple為解決此問題而提出的解決方案。
HLS
HLS是HTTP Live Streaming的縮寫。 它是Apple提出的基於HTTP的流媒體網絡傳輸協議。 它可以同時支持實時和點播,以及多分辨率,音視頻雙軌,字幕等功能。 其原理是將整個視頻分成多個小視頻,並通過將這些片段拼接在一起來形成完整的播放。
HLS被廣泛用於移動終端。 當前支持HLS協議的客戶端包括:
iOS 3.0及更高版本,AVPlayer原生支持HLS
Android 3.0及以上版本
Adobe Flash Player 11.0及更高版本
其一般原則是:
1.收集音頻和視頻
2.在服務器上編碼音頻和視頻
3.編碼後,將其以MPEG-2傳輸流的形式移交給流分段器
4.切片器創建一個索引文件和一個ts播放列表,該索引文件用於指示音頻和視頻的位置,ts是真正的多媒體剪輯
5.將上一步的資源放在HTTP服務器上
6.客戶端請求索引文件進行播放,可以通過索引文件找到播放內容
M3U8
實現HLS的關鍵步驟是上面的第四步,即索引文件和ts播放列表的組織。 在此使用M3U8格式。 M3U8是M3U的Unicode版本,8表示使用UTF-8編碼,並且M3U和M3U8都是多媒體列表的文件格式。
M3U8格式說明
有時我們可能需要手動修改M3U8文件的內容以進行測試或在某些特殊情況下,因此我們需要對它的格式有一定的了解。 此格式的定義寫在RFC 8216文檔中。 以下是一些注意事項:
M3U8文件必須以UTF-8編碼,不能使用字節順序標記(BOM)字節順序,並且不能包含utf-8控製字符(U + 0000〜U_001F和U + 007F〜u + 009F)
M3U8文件內容的每一行都是空白行,URI或以#開頭的字符串,並且不能出現空白字符。
內置標籤都是以#EXT開頭的所有字符串,並且區分大小寫。
URI是內容路徑,可以是相對路徑或絕對路徑
主M3U8列表文件
主M3U8索引文件通常用於指定多個索引源。 讓我們首先分析主m3u8文件hls_vod_mvp.m3u8的內容,它的頭是這樣的
標題格式
#EXTM3U
#EXT-X-VERSION:7
#EXT-X-INDEPENDENT-SEGMENTS複製代碼
#EXTM3U表示文件為M3U格式,所有M3U格式的文件都應將內容放在第一行。
#EXT-X-VERSIOn表示播放列表的兼容版本,當前為7。
#EXT-X-INDEPENDENT-SEGMENTS此標籤指示媒體段中的所有媒體樣本都可以獨立解碼,而無需依賴其他媒體段信息。
字幕格式
下面的內容是一些字幕,字幕的內容不是必需的。
#EXT-X-MEDIA:TYPE = SUBTITLES,GROUP-ID =“ subs”,NAME =“ English”,DEFAULT = YES,AUTOSELECT = YES,FORCED = NO,LANGUAGE =“ eng”,URI =“ subtitles / eng / prog_index.m3u8”
#EXT-X-MEDIA:TYPE = SUBTITLES,GROUP-ID =“ subsC”,NAME =“英語”,DEFAULT = YES,AUTOSELECT = YES,FORCED = NO,LANGUAGE =“ eng”,URI =“ subtitles / engc / prog_index.m3u8”
#EXT-X-MEDIA:TYPE = SUBTITLES,GROUP-ID =“ subs”,NAME =“ Japanese”,DEFAULT = YES,AUTOSELECT = YES,FORCED = NO,LANGUAGE =“ jpn”,URI =“ subtitles / jpn / prog_index.m3u8”
#EXT-X-MEDIA:TYPE =字幕,GROUP-ID =“ subsC”,NAME =“日語”,DEFAULT = YES,AUTOSELECT = YES,FORCED = NO,LANGUAGE =“ jpn”,URI =“ subtitles / jpnc / prog_index.m3u8”
#EXT-X-MEDIA:TYPE = SUBTITLES,GROUP-ID =“ subs”,NAME =“ Chinese”,DEFAULT = YES,AUTOSELECT = YES,FORCED = NO,LANGUAGE =“ zho”,URI =“ subtitles / zho / prog_index.m3u8”
#EXT-X-MEDIA:TYPE = SUBTITLES,GROUP-ID =“ subsC”,NAME =“ Chinese”,DEFAULT = YES,AUTOSELECT = YES,FORCED = NO,LANGUAGE =“ zho”,URI =“ subtitles / zhoc / prog_index.m3u8“複製代碼
#EXT-X-MEDIA用於指定相同內容的多語言媒體列表資源。
TYPE是資源類型,可選內容是:AUDIO,VIDEO,SUBTITLES,CLOSED-CAPTIONS。
上面的內容設置了TYPE = SUBTITLES,這是字幕類型。
GROUP-ID是多語言翻譯所屬的組,並且是必需的參數
NAME是翻譯流的可讀描述信息,該值對應於AVMediaSelectionOption的displayName。
DEFAULT,AUTOSELECT,FORCED是三個BOOL值,對應於在缺少必要信息時是否默認選擇轉換流的情況。 當用戶不顯示設置時,播放流。 FORCED僅對字幕類型有效,並用於標記當前自動選擇的翻譯流。 。
LANGUAGE用於指定語言類型,該語言類型是根據[ISO 639語言代碼](https://www.w3.org/WAI/ER/WD-AERT/iso639.htm “ ISO 639語言代碼”)標準。 當系統默認播放器選擇字幕時,根據此值設置顯示的字幕列表的名稱。
URI是資源的位置信息,它對應於帶有字幕的M3U8文件。 subtitles / eng / prog_index.m3u8是相對路徑,
通過以上信息,我們可以將上述內容的含義分析為:當前視頻支持三種字幕:英語,日語和中文。 但是每種語言都有兩個EXT-X-MEDIA消息。 它們之間的區別是分組,一個分組在subs中,另一個分組在subsC中。 為什麼會有兩組? 稍後再說。
視頻格式
再次向下看,以獲得視頻內容的索引:
#EXT-X-STREAM-INF:BANDWIDTH=827299,AVERAGE-BANDWIDTH=747464,CODECS="avc1.64001f,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=29.970,AUDIO="program_audio",SUBTITLES=" subs"
0640 / 0640.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=360849,AVERAGE-BANDWIDTH=320932,CODECS="avc1.64001f",RESOLUTION=640x360,URI="0640/0640_I-Frame.m3u8"Copy code
EXT-X-STREAM-INF:此屬性指定備份源,即視頻播放路徑和一些視頻信息。 以下是相應內容的配置:BANDWIDTH是峰值比特率,827299是827299bit / s,這是最高峰值時間,每秒消耗101KB的流量。
AVERAGE-BANDWIDTH是平均比特率747464
CODECS是編碼信息,avc1.64001f,mp4a.40.2,avc表示h264編碼格式,以下64001f是用十六進製表示的編碼參數,64、00、1f分別表示三個不同的參數值。 mp4a是音頻編碼格式,下面的40.2表示音頻編碼參數。
分辨率是視頻分辨率。 當前的視頻源分辨率為640x360。
FRAME-RATE是最大幀速率,29.970表示當前回放的最大幀速率是每秒29.970幀。
AUDIO是音頻組,program_audio是相應音頻組的名稱。
SUBTITLES表示相應的字幕組,subs是相應字幕組的名稱。 上述字幕信息具有GROUP-ID,並且該值與之相對應。
URI是內容路徑,0640 / 0640.m3u8對應於視頻源的m3u8文件路徑。 這可以在數據包捕獲信息中看到。
EXT-X-STREAM-INF下面是EXT-XI-FRAME-STREAM-INF,它表示播放列表文件中包含的多媒體資源的I幀(關鍵幀)。 因為I幀只是圖片,所以它不包含音頻內容,並且其餘參數與視頻內容格式一致。
之後,會有對應於不同分辨率1920x1080、1280x720、960x540、480x270的視頻源。 因為HLS會根據網絡情況自動切換分辨率,所以通常會準備多種分辨率供選擇。 根據對捕獲數據的分析,播放的第一段為640分辨率,第二段至第八段為8分辨率,然後切換為480分辨率。
音頻格式
往下看是相應音頻的索引
#EXT-X-MEDIA:TYPE = AUDIO,GROUP-ID =“ program_audio”,LANGUAGE =“ eng”,NAME =“備用音頻”,AUTOSELECT = YES,DEFAULT = YES,URI =“ audio1 / audio1.m3u8”複製碼
#EXT-X-MEDIA出現在上方,但未提及多種語言的列表。
TYPE = AUDIO,這次是音頻。
GROUP-ID是組ID,對應於EXT-X-STREAM-INF中的AUDIO內容。
URI = audio1 / audio1.m3u8對應於音頻路徑。
不同編碼格式的替代來源
在主M3U8文件中,我們還可以看到640分辨率的視頻源,它與上述640分辨率不同。 它的內容是這樣的:
#EXT-X-STREAM-INF:BANDWIDTH=1922391,AVERAGE-BANDWIDTH=1276855,VIDEO-RANGE=SDR,CODECS="hvc1.2.4.H150.B0,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=29.970 ,AUDIO="program_audio_0",SUBTITLES="subsC"
0640c / prog_index.m3u8
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1922391,AVERAGE-BANDWIDTH=1276855,CODECS="hvc1.2.4.H150.B0",RESOLUTION=640x360,URI="0640c/iframe_index.m3u8"
#EXT-X-MEDIA:TYPE = AUDIO,GROUP-ID =“ program_audio_0”,LANGUAGE =“ eng”,NAME =“備用音頻”,AUTOSELECT = YES,DEFAULT = YES,URI =“ audioc / prog_index.m3u8”複製碼
CODECS編碼格式為hvc1.2.4.H150.B0,mp4a.40.2,音頻編碼格式未更改,但視頻編碼格式已更改。 hvc1是HEVC(H265)編碼格式之一。 它是Apple推出的新一代視頻編碼格式。 由於兼容性問題,許多客戶端無法解析此格式,因此它不是很流行。 出現這種格式的視頻源這裡應該是備份。 比較具有相同分辨率的兩個內容,可以發現hvc1格式的比特率高於avc1格式的比特率,這表明在相同分辨率下hvc1的內容更大,而avc1的壓縮率更高。
對應於hvc1格式的視頻源,其字幕內容分組和音頻內容分組也已更改,這就是為什麼上述字幕具有相同語言的兩個副本,並且它們對應於avc1和hvc1格式的視頻源的原因。
這是M3U8的主要列表。 此內容的音頻和視頻將分別處理,但也可以合併。
包含媒體信息的M3u8文件
以文件0640.m3u8為例
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:7
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:6.006,
0640_00001.ts
#EXTINF:6.006,
0640_00002.ts
#EXTINF:6.006,
0640_00003.ts
....
#EXT-X-ENDLIST複製代碼
#EXTM3U和#EXT-X-VERSION分別是M3U文件頭和兼容版本號。 此格式是早期版本,因此版本號低於主文件。
EXT-X-TARGETDURATION表示每個播放段的最大持續時間,7表示7秒,此目錄中的段不能超過7s。
EXT-X-MEDIA-SEQUENCE表示播放列表第一段的序列號,而1表示播放段從1開始。
#EXTINF表示段的持續時間,6.006表示當前段為6.006s。 總視頻時長信息是通過累加該值而獲得的。
0640_00001.ts是剪輯的相對路徑。 ts文件代表一段視頻或音頻,並且可以是ts,mp4,aac和其他格式。 因為已指定從1開始
|
輸入電子郵件以獲取驚喜
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org ->荷蘭語
sq.fmuser.org ->阿爾巴尼亞人
ar.fmuser.org ->阿拉伯語
hy.fmuser.org - >亞美尼亞
az.fmuser.org ->阿塞拜疆
eu.fmuser.org ->巴斯克
be.fmuser.org ->白俄羅斯語
bg.fmuser.org - >保加利亞
ca.fmuser.org ->加泰羅尼亞語
zh-CN.fmuser.org ->中文(簡體)
zh-TW.fmuser.org - >中國(繁體)
hr.fmuser.org ->克羅地亞語
cs.fmuser.org ->捷克
da.fmuser.org ->丹麥語
nl.fmuser.org - >荷蘭
et.fmuser.org ->愛沙尼亞語
tl.fmuser.org ->菲律賓
fi.fmuser.org ->芬蘭語
fr.fmuser.org - >法國
gl.fmuser.org ->加利西亞語
ka.fmuser.org ->喬治亞
de.fmuser.org ->德語
el.fmuser.org - >希臘
ht.fmuser.org ->海地克里奧爾語
iw.fmuser.org ->希伯來語
hi.fmuser.org ->印地語
hu.fmuser.org - >匈牙利
is.fmuser.org ->冰島語
id.fmuser.org ->印尼語
ga.fmuser.org ->愛爾蘭
it.fmuser.org - >意大利
ja.fmuser.org ->日語
ko.fmuser.org ->韓文
lv.fmuser.org ->拉脫維亞
lt.fmuser.org - >立陶宛
mk.fmuser.org ->馬其頓語
ms.fmuser.org ->馬來語
mt.fmuser.org ->馬耳他語
no.fmuser.org - >挪威
fa.fmuser.org ->波斯語
pl.fmuser.org ->波蘭語
pt.fmuser.org ->葡萄牙語
ro.fmuser.org - >羅馬尼亞
ru.fmuser.org ->俄語
sr.fmuser.org ->塞爾維亞語
sk.fmuser.org ->斯洛伐克
sl.fmuser.org - >斯洛文尼亞
es.fmuser.org ->西班牙語
sw.fmuser.org ->斯瓦希里語
sv.fmuser.org ->瑞典語
th.fmuser.org - >泰國
tr.fmuser.org ->土耳其語
uk.fmuser.org ->烏克蘭語
ur.fmuser.org ->烏爾都語
vi.fmuser.org - >越南
cy.fmuser.org ->威爾士語
yi.fmuser.org - >意第緒語
FMUSER更輕鬆地傳輸視頻和音頻!
聯絡我們
分類
訂閱成為第一個收到我們最新消息的人。