您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何利用HLS創(chuàng)建一個Golang視頻流服務(wù)器,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
HLS 是 HTTP Live Streaming 的縮寫,是蘋果開發(fā)的一種基于 HTTP 的自適應(yīng)比特率流媒體傳輸協(xié)議, 并于 2009 年. HLS 流媒體已經(jīng)成為應(yīng)用最廣泛的實時視頻協(xié)議。它是一種將流分解成基于文件小段的格式, 可以通過 HTTP 下載,HLS 可以通過標(biāo)準(zhǔn)的 HTTP 或代理服務(wù)器等,這和基于 UDP 的協(xié)議(例如 RTP)不同。
應(yīng)用廣泛
首先,剛才已經(jīng)提到過,HLS 是應(yīng)用最慣犯的實時視頻協(xié)議。雖然最初蘋果是為了自己的生態(tài)設(shè)計的,例如 IOS,Safari 瀏覽器等,但是背靠蘋果,有強(qiáng)大的生態(tài)和研發(fā)能力,現(xiàn)在它幾乎在所有瀏覽器上實現(xiàn)了。雖然現(xiàn)在的主流瀏覽器都支持一個類似的標(biāo)準(zhǔn),稱為 MPEG DASH,但是由于蘋果 Safari 瀏覽器和 IOS 設(shè)備不支持它,個人認(rèn)為 HLS 是一個更好的選擇。
自適應(yīng)比特率
HLS 另一個巨大的優(yōu)勢是,它允許客戶端根據(jù)可用帶寬,從各種質(zhì)量流中選出合適的。HLS 分解成一個個大約 10 秒的文件小段,通過分解,客戶端應(yīng)用程序只需要提前緩沖 10 秒。為用戶節(jié)約了大量潛在帶寬。
糟糕的延遲
雖然 HLS 設(shè)計出來是為了高效的處理多質(zhì)量的流,但它并不是為了快速傳輸視頻設(shè)計的。實際上,HLS 在流中引入流相當(dāng)長的延遲,一般 20 秒左右,甚至更久。
說到這里,你可能想問為什么?HLS 需要三個片段在隊列中才允許回放,片段被視頻中的關(guān)鍵幀分割。用 HLS 創(chuàng)建超低延遲流的唯一方法就是每 250 毫秒出現(xiàn)一個關(guān)鍵幀的視頻進(jìn)行編碼,HLS 播放列表窗口將是四項長度,增加正在發(fā)生的 HTTP 調(diào)用頻率,并給服務(wù)器增加額外的壓力。
未發(fā)布
HLS 是一個僅供用戶使用的協(xié)議。不像 WebRTC 有從瀏覽器發(fā)布的規(guī)范,HLS 僅支持播放流,如果你想發(fā)布一個設(shè)備的實時視頻流,你只需要尋找其他的 SDK ,國外的例如 Red5 Pro(場景較為單一,巨貴), 來創(chuàng)建使用 RTP 的發(fā)布應(yīng)用程序,然后通過 HLS 中繼這些流,讓人們在瀏覽器中查看。
國內(nèi)有幾個較為成熟的音視頻 SDK,例如聲網(wǎng)等平臺,提供很多場景的音視頻解決方案。
HLS 簡單介紹完了,接下來演示一個小 Demo, 使用 FFmpeg,可以很輕易的將 mp3 文件轉(zhuǎn)換為 HLS 格式,它由多個文件組成,其中一個包含元數(shù)據(jù)(.m3u8),元數(shù)據(jù)告訴客戶端從哪里獲取每個數(shù)據(jù)文件,以及數(shù)據(jù)文件中包含什么內(nèi)容。數(shù)據(jù)文件拓展名是.ts,通常包含 10 秒的音頻。
首先準(zhǔn)備一個 mp3 文件。然后安裝 FFmpeg,在 Mac 上安裝 FFmpeg,如果速度很慢可以嘗試切換鏡像。
brew install ffmpeg
成功安裝后,進(jìn)入 mp3 所在文件夾,執(zhí)行以下指令。
ffmpeg -i 江南.mp3 -c:a libmp3lame -b:a 128k -map 0:0 -f segment -segment_time 10 -segment_list outputlist.m3u8 -segment_format mpegts output%03d.ts
執(zhí)行完畢后應(yīng)該會看到一些結(jié)果,大致內(nèi)容如下.
1 output000.ts output008.ts output016.ts output024.ts
2 output001.ts output009.ts output017.ts output025.ts
3 output002.ts output010.ts output018.ts output026.ts
4 output003.ts output011.ts output019.ts outputlist.m3u8
5 output004.ts output012.ts output020.ts 江南.mp3
6 output005.ts output013.ts output021.ts
7 output006.ts output014.ts output022.ts
8 output007.ts output015.ts output023.ts
到這一步你已經(jīng)完成了文件格式轉(zhuǎn)換,接下來進(jìn)入 Coding 階段。
代碼如下
package main import ( "fmt" "log" "net/http" ) func main() { // 設(shè)置文件目錄 const songsDir = "song" const port = 8888 http.Handle("/", http.FileServer(http.Dir(songsDir))) log.Printf("Serving %s on HTTP port: %v\n", songsDir, port) log.Fatal(http.ListenAndServe(fmt.Sprintf(":%v", port), nil)) }
運行代碼
go run main.go
關(guān)于如何利用HLS創(chuàng)建一個Golang視頻流服務(wù)器就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。