SlideShare a Scribd company logo
1 of 24
Download to read offline
Claire Chang 2021/11/27
從零開始架設直播伺服器
⼤綱
• 關於我
• 什麼是直播
• 直播的流程
• 相關技術與軟體
• 串流伺服器⽅案
• SRS介紹及教學
• 如何設定SRS伺服器
• 如何推流
• 如何播放串流
關於我
• 寫了⼗幾年的Flash,陪著Flash⾛過他的光榮與衰敗。
• Flash過世後,改使⽤Javascript去重寫過去所撰寫的Flash遊戲,因此熟悉WebGL網⾴
遊戲的開發。
• 三年前開始斜槓,負責開發/維護/架設即時直播伺服器,並開發OCR智慧辨識功能,依
據直播串流內容,處理並解析影像內容,以取得所需資訊。
• 兩寶媽,八⽉初才⽣下⼆寶,是⼀個獅⼦寶寶。
• ⼤寶六歲,在⼤寶出⽣後接觸了基督教,現為基督徒⼀名。
什麼是直播
• 現場直播,或稱實況轉播、即時轉播
• 直播與上傳⾃⼰錄影最⼤差異在觀眾可以透過留⾔和主播即
時互動,主播可根據觀眾反應及時調整節⽬內容或取悅觀
眾。
• 網路直播現今仍最常應⽤於轉播娛樂相關內容,當中演出或
主持網路直播的主持⼈⼀般稱之為「實況主」或直播主。
• 相關的服務平台有Youtube、Facebook Live、Twitch等…
直播的流程
• 影⽚⼀般會以串流的形式推到伺服器上。
• 在推流之前因為網路頻寬的限制,會先對影⽚做編碼(如H.264)。
• 伺服器收到串流後,對串流做即時的轉碼,封裝成可於網⾴播放的格式(HLS, HTTP-FLV)
• 同時間如果有觀眾收看直播,伺服器收到⽤⼾的請求後,會回傳影⽚串流,若是HTTP-FLV
會是⼀個FLV檔案的下載,若為HLS則會下載多個m3u8的描述檔。
• 客⼾端收到串流,由瀏覽器對串流做解封裝與解碼,並在網⾴的播放器即時播放影⽚。
相關技術與軟體
求懶⼈包
怎麼這麼複雜....
天呀!
直播的流程
今天的主題
串流伺服器⽅案
• 由於串流服務很吃即時性及網路的順暢性,若是⽬標客⼾群在美國,⽽主機卻在台灣,
客⼾觀看串流需要經過跨海的網路傳輸,則觀看串流的體驗會非常的不好。因此,主機
的位置⼗分重要。若今天⽬標客⼾群散布世界各地,則會需要在各地都能有⼀個串流伺
服器,根據客⼾所在位置去使⽤最靠近的主機資源,以取得最佳體驗。
• 使⽤CDN(Content Delivery Network)的配套服務
• 優點:有完整配套⽅案,無需⾃⼰架設伺服器,可快速開始使⽤
• 缺點:價格昂貴,主機穩定度無法掌握,特殊的需求未必能做到
• 範例:
• ⾃架伺服器:優點為可更加客製化,缺點為串流技術複雜,學習⾨檻⾼
⾃架串流伺服器有那些選擇
• FMS:已死
• NGINX-RTMP:https://github.com/arut/nginx-rtmp-module
• WOWZA: https://www.wowza.com/
• SRS: ⼀個輕量⾼效能的即時串流開源伺服器
https://github.com/ossrs/srs
為何選擇SRS
• 完全免費
• 輕量,專案非常的⼩
• ⾼效能
• ⽂檔齊全且中⽂化
• ⽀持RTMP/WebRTC/HLS/HTTP-FLV/SRT等多種串流格式
• ⽀持容器化,可輕易放進docker裡
• 功能齊全,⽀持web hook,錄影,API可踢流或取得伺服器資訊,可達成伺服器集群功
能
• 維護頻繁,使⽤者近年來⼤幅增加
幾個開源串流伺服器星星數比較
安裝SRS
https://github.com/ossrs/srs/wiki/v4_CN_Home
推流與播放
設定你的SRS伺服器
• 在SRS的啟動指令(./objs/srs -c conf/srs.conf)中,後⾯-c所帶入的路徑就是SRS設定檔
的路徑,SRS的開發者在conf資料夾裡⾯幫我們寫好了各種不同的狀況可能會使⽤的
conf設定
• 位置在此:https://github.com/ossrs/srs/tree/4.0release/trunk/conf
• 其中full.conf包含了所有可使⽤的設定指令及說明
• 其他每個不同的conf代表了不同狀況下可能會使⽤到的設定檔範本,如:dvr.mp4.conf
是錄影mp4檔案的設定檔,hls.conf則為客⼾端下載格式為HLS的設定檔,
了解影⽚壓縮技術
了解I,P,B幀及GOP
• 編碼器將多張圖像進⾏編碼後⽣產成⼀段⼀段的GOP
( Group of Pictures )
了解不同的封裝格式-RTMP
• 優點:
• 專為流媒體開發的協議,對底層的優化比其它協議更加優秀。
• 適合長時間播放
• 延遲相對較低,⼀般延時在1-3s 之間
• 缺點:
• 播放端需依賴Flash
• ⾏動設備不⽀援
• 因Flash於網⾴的全⾯死亡,出現了http-flv的格式,可以有較短的延遲,且可以在
網⾴播放,但現在仍蘋果系列仍然不⽀援於網⾴播放http-flv
了解不同的封裝格式-HLS
• 優點:
• Apple 及Android以及⼀般網⾴播放器皆可以原⽣⽀持播放HLS
• 在HTML5 ⾴⾯上播放HLS串流非常簡單
• 使⽤HTTP/80做 傳輸,可避免防⽕牆攔截,且CDN ⽀持良好
• 缺點:
• 延遲⾼,延遲基本在10s+ 以上
• 並非連續串流,使⽤ts 切⽚,會造成非常多的⼩⽂件,對存儲和緩存都有⼀
定的挑戰
了解不同封裝格式-WebRTC,SRT
• WebRTC是由Google在 2011 年開發的⼀個開源協議。有著極低的
延遲(少於⼀秒),很常⽤在網路電話及視訊中,也可透過網⾴
直接做WebRTC推流。
• ⾏動裝置及電腦的網⾴皆可⽀持播放WebRTC,但是仍然較少直
播使⽤,因為在網⾴上的播放較不穩定。
• SRT(Secure Reliable Transport,安全可靠傳輸)是由 Haivision
在 2012 年開發的⼀個協議,可使⽤於推流上,有著極低的延遲以
及抗丟包的特性。
開始推流
• 使⽤OBS推流
• 使⽤ffmpeg推流
下載ffmpeg: https://ffmpeg.org/download.html
於CMD使⽤此指令推流:
ffmpeg -re -i ./doc/source.flv -c copy -f flv -y rtmp://localhost/
live/livestream
觀看推流
• 下載播放軟體: VLC (https://www.videolan.org/vlc/index.zh_TW.html)
• 在網⾴播放:僅⽀援WebRTC及HLS
• 在網⾴播放HTTP-FLV:Flv.js (https://github.com/Bilibili/flv.js/)
• 觀看位置:
Q&A
Thanks

More Related Content

What's hot

採用開源軟體打造企業資安監測系統 [2022/10/06] @InfoSec Taiwan 2022
採用開源軟體打造企業資安監測系統 [2022/10/06] @InfoSec Taiwan 2022採用開源軟體打造企業資安監測系統 [2022/10/06] @InfoSec Taiwan 2022
採用開源軟體打造企業資安監測系統 [2022/10/06] @InfoSec Taiwan 2022Jason Cheng
 
アジャイル品質パターン (Agile Quality, QA2AQ)
アジャイル品質パターン (Agile Quality, QA2AQ)アジャイル品質パターン (Agile Quality, QA2AQ)
アジャイル品質パターン (Agile Quality, QA2AQ)Hironori Washizaki
 
Combinatorial testing in Japan
Combinatorial testing in JapanCombinatorial testing in Japan
Combinatorial testing in JapanKeizo Tatsumi
 
ソフトウェアの品質保証の基礎とこれから
ソフトウェアの品質保証の基礎とこれからソフトウェアの品質保証の基礎とこれから
ソフトウェアの品質保証の基礎とこれからYasuharu Nishi
 
QM-07-田口方法簡介
QM-07-田口方法簡介QM-07-田口方法簡介
QM-07-田口方法簡介handbook
 
西方社會障礙歷史與文化
西方社會障礙歷史與文化西方社會障礙歷史與文化
西方社會障礙歷史與文化于濟 劉
 
SQiP2016発表資料_プロセス改善の黒歴史(slideshare共有版)
SQiP2016発表資料_プロセス改善の黒歴史(slideshare共有版)SQiP2016発表資料_プロセス改善の黒歴史(slideshare共有版)
SQiP2016発表資料_プロセス改善の黒歴史(slideshare共有版)Adachi Kenji
 
Proxmox VE 企業應用經驗分享 [2017/07/29] @台中資策會
Proxmox VE 企業應用經驗分享 [2017/07/29] @台中資策會Proxmox VE 企業應用經驗分享 [2017/07/29] @台中資策會
Proxmox VE 企業應用經驗分享 [2017/07/29] @台中資策會Jason Cheng
 
2014年5月21日「パーティクルフィルタの癖から知るロボットへの確率的手法の正しい適用方法」---第58回システム制御情報学会研究発表講演会チュートリアル講演
2014年5月21日「パーティクルフィルタの癖から知るロボットへの確率的手法の正しい適用方法」---第58回システム制御情報学会研究発表講演会チュートリアル講演2014年5月21日「パーティクルフィルタの癖から知るロボットへの確率的手法の正しい適用方法」---第58回システム制御情報学会研究発表講演会チュートリアル講演
2014年5月21日「パーティクルフィルタの癖から知るロボットへの確率的手法の正しい適用方法」---第58回システム制御情報学会研究発表講演会チュートリアル講演Ryuichi Ueda
 
レビュー目的・観点設定の効果と課題
レビュー目的・観点設定の効果と課題レビュー目的・観点設定の効果と課題
レビュー目的・観点設定の効果と課題Adachi Kenji
 
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」fukuoka.ex
 
面試心得
面試心得面試心得
面試心得澐 向
 
テスコン優勝事例におけるテスト分析公開用
テスコン優勝事例におけるテスト分析公開用テスコン優勝事例におけるテスト分析公開用
テスコン優勝事例におけるテスト分析公開用Tetsuya Kouno
 
突破困境:資安開源工具之應用分享 [2019/03/21] @臺灣資安大會
突破困境:資安開源工具之應用分享 [2019/03/21] @臺灣資安大會突破困境:資安開源工具之應用分享 [2019/03/21] @臺灣資安大會
突破困境:資安開源工具之應用分享 [2019/03/21] @臺灣資安大會Jason Cheng
 
"Accelerating Deep Learning Using Altera FPGAs," a Presentation from Intel
"Accelerating Deep Learning Using Altera FPGAs," a Presentation from Intel"Accelerating Deep Learning Using Altera FPGAs," a Presentation from Intel
"Accelerating Deep Learning Using Altera FPGAs," a Presentation from IntelEdge AI and Vision Alliance
 
アジャイルコーチが現場で学んだプロダクトオーナーの実際と勘所 POの二番目に大事なことと
アジャイルコーチが現場で学んだプロダクトオーナーの実際と勘所 POの二番目に大事なこととアジャイルコーチが現場で学んだプロダクトオーナーの実際と勘所 POの二番目に大事なことと
アジャイルコーチが現場で学んだプロダクトオーナーの実際と勘所 POの二番目に大事なこととYasui Tsutomu
 
知っておきたいASTERIA WARPの強制終了
知っておきたいASTERIA WARPの強制終了知っておきたいASTERIA WARPの強制終了
知っておきたいASTERIA WARPの強制終了ASTERIA User Group
 

What's hot (20)

採用開源軟體打造企業資安監測系統 [2022/10/06] @InfoSec Taiwan 2022
採用開源軟體打造企業資安監測系統 [2022/10/06] @InfoSec Taiwan 2022採用開源軟體打造企業資安監測系統 [2022/10/06] @InfoSec Taiwan 2022
採用開源軟體打造企業資安監測系統 [2022/10/06] @InfoSec Taiwan 2022
 
アジャイル品質パターン (Agile Quality, QA2AQ)
アジャイル品質パターン (Agile Quality, QA2AQ)アジャイル品質パターン (Agile Quality, QA2AQ)
アジャイル品質パターン (Agile Quality, QA2AQ)
 
Combinatorial testing in Japan
Combinatorial testing in JapanCombinatorial testing in Japan
Combinatorial testing in Japan
 
Ipc簡介
Ipc簡介Ipc簡介
Ipc簡介
 
ソフトウェアの品質保証の基礎とこれから
ソフトウェアの品質保証の基礎とこれからソフトウェアの品質保証の基礎とこれから
ソフトウェアの品質保証の基礎とこれから
 
QM-07-田口方法簡介
QM-07-田口方法簡介QM-07-田口方法簡介
QM-07-田口方法簡介
 
西方社會障礙歷史與文化
西方社會障礙歷史與文化西方社會障礙歷史與文化
西方社會障礙歷史與文化
 
SQiP2016発表資料_プロセス改善の黒歴史(slideshare共有版)
SQiP2016発表資料_プロセス改善の黒歴史(slideshare共有版)SQiP2016発表資料_プロセス改善の黒歴史(slideshare共有版)
SQiP2016発表資料_プロセス改善の黒歴史(slideshare共有版)
 
ARM Compute Library
ARM Compute LibraryARM Compute Library
ARM Compute Library
 
Proxmox VE 企業應用經驗分享 [2017/07/29] @台中資策會
Proxmox VE 企業應用經驗分享 [2017/07/29] @台中資策會Proxmox VE 企業應用經驗分享 [2017/07/29] @台中資策會
Proxmox VE 企業應用經驗分享 [2017/07/29] @台中資策會
 
2014年5月21日「パーティクルフィルタの癖から知るロボットへの確率的手法の正しい適用方法」---第58回システム制御情報学会研究発表講演会チュートリアル講演
2014年5月21日「パーティクルフィルタの癖から知るロボットへの確率的手法の正しい適用方法」---第58回システム制御情報学会研究発表講演会チュートリアル講演2014年5月21日「パーティクルフィルタの癖から知るロボットへの確率的手法の正しい適用方法」---第58回システム制御情報学会研究発表講演会チュートリアル講演
2014年5月21日「パーティクルフィルタの癖から知るロボットへの確率的手法の正しい適用方法」---第58回システム制御情報学会研究発表講演会チュートリアル講演
 
レビュー目的・観点設定の効果と課題
レビュー目的・観点設定の効果と課題レビュー目的・観点設定の効果と課題
レビュー目的・観点設定の効果と課題
 
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
 
面試心得
面試心得面試心得
面試心得
 
テスコン優勝事例におけるテスト分析公開用
テスコン優勝事例におけるテスト分析公開用テスコン優勝事例におけるテスト分析公開用
テスコン優勝事例におけるテスト分析公開用
 
3 Placa base practica
3 Placa base practica3 Placa base practica
3 Placa base practica
 
突破困境:資安開源工具之應用分享 [2019/03/21] @臺灣資安大會
突破困境:資安開源工具之應用分享 [2019/03/21] @臺灣資安大會突破困境:資安開源工具之應用分享 [2019/03/21] @臺灣資安大會
突破困境:資安開源工具之應用分享 [2019/03/21] @臺灣資安大會
 
"Accelerating Deep Learning Using Altera FPGAs," a Presentation from Intel
"Accelerating Deep Learning Using Altera FPGAs," a Presentation from Intel"Accelerating Deep Learning Using Altera FPGAs," a Presentation from Intel
"Accelerating Deep Learning Using Altera FPGAs," a Presentation from Intel
 
アジャイルコーチが現場で学んだプロダクトオーナーの実際と勘所 POの二番目に大事なことと
アジャイルコーチが現場で学んだプロダクトオーナーの実際と勘所 POの二番目に大事なこととアジャイルコーチが現場で学んだプロダクトオーナーの実際と勘所 POの二番目に大事なことと
アジャイルコーチが現場で学んだプロダクトオーナーの実際と勘所 POの二番目に大事なことと
 
知っておきたいASTERIA WARPの強制終了
知っておきたいASTERIA WARPの強制終了知っておきたいASTERIA WARPの強制終了
知っておきたいASTERIA WARPの強制終了
 

More from Claire Chang

我們要做什麼」20230707
我們要做什麼」20230707我們要做什麼」20230707
我們要做什麼」20230707Claire Chang
 
Pixi.js網頁遊戲開發實戰
Pixi.js網頁遊戲開發實戰Pixi.js網頁遊戲開發實戰
Pixi.js網頁遊戲開發實戰Claire Chang
 
Git版本管理控管實戰
Git版本管理控管實戰Git版本管理控管實戰
Git版本管理控管實戰Claire Chang
 
薩提爾的對話練習
薩提爾的對話練習薩提爾的對話練習
薩提爾的對話練習Claire Chang
 
Learn to code 2 - Beyond the Basics
Learn to code 2 - Beyond the BasicsLearn to code 2 - Beyond the Basics
Learn to code 2 - Beyond the BasicsClaire Chang
 
Auto layout in i os 7
Auto layout in i os 7Auto layout in i os 7
Auto layout in i os 7Claire Chang
 

More from Claire Chang (9)

我們要做什麼」20230707
我們要做什麼」20230707我們要做什麼」20230707
我們要做什麼」20230707
 
Pixi.js網頁遊戲開發實戰
Pixi.js網頁遊戲開發實戰Pixi.js網頁遊戲開發實戰
Pixi.js網頁遊戲開發實戰
 
Git版本管理控管實戰
Git版本管理控管實戰Git版本管理控管實戰
Git版本管理控管實戰
 
ansible
ansibleansible
ansible
 
薩提爾的對話練習
薩提爾的對話練習薩提爾的對話練習
薩提爾的對話練習
 
Learn to code 2 - Beyond the Basics
Learn to code 2 - Beyond the BasicsLearn to code 2 - Beyond the Basics
Learn to code 2 - Beyond the Basics
 
Ane
AneAne
Ane
 
Starling
StarlingStarling
Starling
 
Auto layout in i os 7
Auto layout in i os 7Auto layout in i os 7
Auto layout in i os 7
 

從零架設直播伺服器