HLS 是 HTTP Live Streaming 的縮寫,是蘋果開發(fā)的一種基于 HTTP 的自適應比特率流媒體傳輸協(xié)議, 并于 2009 年. HLS 流媒體已經(jīng)成為應用最廣泛的實時視頻協(xié)議。它是一種將流分解成基于文件小段的格式, 可以通過 HTTP 下載,HLS 可以通過標準的 HTTP 或代理服務器等,這和基于 UDP 的協(xié)議(例如 RTP)不同。既然 HLS 現(xiàn)在如此受歡迎,那么它有那些優(yōu)點和缺點呢。
HLS 簡單介紹完了,接下來演示一個小 Demo, 使用 FFmpeg,可以很輕易的將 mp3 文件轉換為 HLS 格式,它由多個文件組成,其中一個包含元數(shù)據(jù)(.m3u8),元數(shù)據(jù)告訴客戶端從哪里獲取每個數(shù)據(jù)文件,以及數(shù)據(jù)文件中包含什么內容。數(shù)據(jù)文件拓展名是.ts,通常包含 10 秒的音頻。
首先準備一個 mp3 文件。然后安裝 FFmpeg,在 Mac 上安裝 FFmpeg,如果速度很慢可以嘗試切換鏡像。
brew install ffmpeg
成功安裝后,進入 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í)行完畢后應該會看到一些結果,大致內容如下.
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)完成了文件格式轉換,接下來進入 Coding 階段。
代碼如下
package main import ( "fmt" "log" "net/http" ) func main() { // 設置文件目錄 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
打開瀏覽器地址
http://127.0.0.1:8888/outputlist.m3u8
恭喜你,你可以聽到這段 mp3 動人的旋律了。但是如果你想進一步進行商業(yè)開發(fā),或者個人開發(fā),推薦使用比較成熟的解決方案,一是音視頻不分家,音頻需求往往伴隨著視頻需求,音視頻往往是開發(fā)過程中的某一個子需求,如果在上面耗費大量時間,往往會耽誤項目進度,而且處理起多個平臺時往往有一些細節(jié)上的坑。使用市面上的 SDK,能夠很大程度上節(jié)約開發(fā)成本。我個人在使用的聲網(wǎng),能夠支持跨平臺,最最最關鍵,每個月能夠白嫖一定的額度,對于個人開發(fā)者來說十分友好。當然了,費用其實是一方面,還有相當重要的一點就是能夠幾行代碼即可接入,大大較少了踩坑量!
正如你所見,HLS 廣泛應用在各種平臺,移動端,瀏覽器的普遍支持,讓它成為開發(fā)者分發(fā)流給用戶的一個很好的選擇。但是,凡事都有但是,因為 HLS 是一個比較慢的協(xié)議,雖然蘋果的規(guī)則似乎相當嚴格,當涉及到 IOS 流媒體需求時,實際上還是比較靈活的。如果你想通過它去構建一些實時通信的程序,那么它可能不太適合你。最后,如果想要實現(xiàn)比較實時的通信系統(tǒng),最好借助于市面上其他比較成熟的解決方案,它更適合實時性要求不那么高的場景,在蘋果的生態(tài)體系下構建的應用。
到此這篇關于基于 HLS 創(chuàng)建 Golang 視頻流服務器的文章就介紹到這了,更多相關Golang 視頻流服務器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!