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

What's hot (20)

使用 Passkeys 打造無密碼驗證服務
使用 Passkeys 打造無密碼驗證服務使用 Passkeys 打造無密碼驗證服務
使用 Passkeys 打造無密碼驗證服務
 
Lisebelisoa tsa Basotho tsa ka tlung.
Lisebelisoa tsa Basotho tsa ka tlung.Lisebelisoa tsa Basotho tsa ka tlung.
Lisebelisoa tsa Basotho tsa ka tlung.
 
The Google Hacking Database: A Key Resource to Exposing Vulnerabilities
The Google Hacking Database: A Key Resource to Exposing VulnerabilitiesThe Google Hacking Database: A Key Resource to Exposing Vulnerabilities
The Google Hacking Database: A Key Resource to Exposing Vulnerabilities
 
ManageEngine's Patch Manager Plus
ManageEngine's Patch Manager PlusManageEngine's Patch Manager Plus
ManageEngine's Patch Manager Plus
 
Perl/CGI 入門
Perl/CGI 入門Perl/CGI 入門
Perl/CGI 入門
 
Securing MongoDB to Serve an AWS-Based, Multi-Tenant, Security-Fanatic SaaS A...
Securing MongoDB to Serve an AWS-Based, Multi-Tenant, Security-Fanatic SaaS A...Securing MongoDB to Serve an AWS-Based, Multi-Tenant, Security-Fanatic SaaS A...
Securing MongoDB to Serve an AWS-Based, Multi-Tenant, Security-Fanatic SaaS A...
 
Google Dorks and SQL Injection
Google Dorks and SQL InjectionGoogle Dorks and SQL Injection
Google Dorks and SQL Injection
 
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
1日5分でPostgreSQLに詳しくなるアプリの開発 ~PostgRESTを使ってみた~(第38回PostgreSQLアンカンファレンス@オンライン 発...
 
Cordacon 2018 - Cordentity - Hyperledger Indy + Corda
Cordacon 2018 -   Cordentity - Hyperledger Indy + CordaCordacon 2018 -   Cordentity - Hyperledger Indy + Corda
Cordacon 2018 - Cordentity - Hyperledger Indy + Corda
 
ストリーミングのTLS(SSL)化
ストリーミングのTLS(SSL)化ストリーミングのTLS(SSL)化
ストリーミングのTLS(SSL)化
 
Neo4j GraphDay Seattle- Sept19- neo4j basic training
Neo4j GraphDay Seattle- Sept19- neo4j basic trainingNeo4j GraphDay Seattle- Sept19- neo4j basic training
Neo4j GraphDay Seattle- Sept19- neo4j basic training
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414
 
合同会社NEWSKOOL会社概要資料.pdf
合同会社NEWSKOOL会社概要資料.pdf合同会社NEWSKOOL会社概要資料.pdf
合同会社NEWSKOOL会社概要資料.pdf
 
ASP.NET Developer Roadmap 2021
ASP.NET Developer Roadmap 2021ASP.NET Developer Roadmap 2021
ASP.NET Developer Roadmap 2021
 
Neo4j GraphTalk Helsinki - Introduction and Graph Use Cases
Neo4j GraphTalk Helsinki - Introduction and Graph Use CasesNeo4j GraphTalk Helsinki - Introduction and Graph Use Cases
Neo4j GraphTalk Helsinki - Introduction and Graph Use Cases
 
Using Java Mission Control & Java Flight Recorder
Using Java Mission Control & Java Flight RecorderUsing Java Mission Control & Java Flight Recorder
Using Java Mission Control & Java Flight Recorder
 
JANOG53 団体紹介資料.pptx
JANOG53 団体紹介資料.pptxJANOG53 団体紹介資料.pptx
JANOG53 団体紹介資料.pptx
 
Multicast in OpenStack Tips
Multicast in OpenStack TipsMulticast in OpenStack Tips
Multicast in OpenStack Tips
 
2014年10月江戸前セキュリティ勉強会資料 -セキュリティ技術者になるには-
2014年10月江戸前セキュリティ勉強会資料 -セキュリティ技術者になるには-2014年10月江戸前セキュリティ勉強会資料 -セキュリティ技術者になるには-
2014年10月江戸前セキュリティ勉強会資料 -セキュリティ技術者になるには-
 
ライブストリーミング低遅延化の取り組み @ DeNA
ライブストリーミング低遅延化の取り組み @ DeNAライブストリーミング低遅延化の取り組み @ DeNA
ライブストリーミング低遅延化の取り組み @ DeNA
 

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
 

從零架設直播伺服器