# HLS介紹
---
## 什麼是HLS
----
HLS,HTTP Live Streaming
一種影片串流通訊協定
被用於直播平台,像是Twtich, Youtube
----
HLS 由三個部分組成
HTTP, M3U8, TS
----
* HTTP: 通訊協定
* M3U8: UTF-8編碼的M3U文件,作為索引文件
* TS: 一種影片封裝格式
---
## M3U8
----
以UTF-8編碼的M3U檔案,M3U格式是純文本檔案,可以根據他的索引找到對印的視訊檔案的網址執行線上播放
----
以Twitch VOD為例
----
當用戶點進去一個VOD時
會先request該VOD的m3u8檔


----
該m3u8檔的格式會長得像這樣

----
<div style="text-align: left; padding-left:10vw; font-size:32px;">
當用戶選擇解析度之後<br>
網頁就會根據這個m3u8檔的內容<br>
去找到解析度相對應另一個m3u8檔<br>
</div>
----
個別解析度的m3u8檔會長得像這樣

這樣就可以分別知道要去request哪些TS檔了
---
## TS
----
就,一種影片封裝格式
----
Why TS not MP4
----
* TS: 各片段之間的撥放,無縫接軌
* MP4: header file更大,下載緩存需花更多時間
---
## 簡單直播平台架設介紹
----
如何架一個RTMP推流,HLS拉流的直播平台
----
架構圖

----
首先你要有一台Server
----
然後我是用nginx和nginx-rtmp-module架的
----
[nginx-rtmp-module](https://github.com/sergey-dryabzhinsky/nginx-rtmp-module)
讓一切變得簡單
----
在config檔調整一下
* TS file的長度
* 推流的暫存檔案數量
* 和一些網站ㄉ基本設定
----
接著再用你的OBS推流到伺服器
----
然後就完成了
[不斷直播春日影的網站(關掉了)]()
<div style="font-size: 22px">
(不要來ddos我拜託)
</div>
----
小缺陷 <br>
<div style="font-size: 24px; text-align: left; padding-left:10vw;">
因為直播會有延遲 <br>
所以當 用戶的延遲 > 伺服器暫存的檔案數 <br>
就會造成直播卡頓<br>
<br>
再者我的直播檔案沒有做到解析度自適應<br>
所以當用戶網路不好時<br>
沒辦法調整解析度改下載較小的低畫質檔案<br>
<br>
然後播放器問題<br>
我用的套件可能與對應的Browser支援的不好<br>
所以也產生一些問題<br>
<br>
還有一部分應該是因為我伺服器流量不夠
</div>
----

----

{"title":"HLS介紹","description":"HLS,HTTP Live Streaming一種影片串流通訊協定","contributors":"[{\"id\":\"2baaeab1-53c2-4b44-8c07-1317122a8416\",\"add\":2118,\"del\":310}]"}