close

引用網址:http://jamchen1025.blogspot.tw/2015/01/p2p-live-streaming.html

序-原因

Yo~
GOOGLE網誌第一篇,
碩論需要做這個,
給補習班撥放教學串流使用,
然後廠商有建議WebRTC這個東西,
所以就開始摸摸看囉!
希望到最後可以做出東西來,
因為做不出來就畢不了業啦啦啦啦!!

第1章-想法

首先我什麼都不知道阿QQ, 
我只是一個寫Android的被抓來做這個東西, 
所以第一步先把需求和使用者情境整理好!
之後就開始查一些背景知識, 
列出一些Terminology, 
然後會再把我了解的東西複製進來哈哈, 
希望可以整理出頭緒來。

第2章-整理使用者情境

礙於不知道會不會有什麼敏感原因,
這章我就文字敘述系統的需求了,
希望儘量詳細一點。

目的:
 
  • 補習班使用的Live Streaming系統。

使用情境:
 
  • 老師端:網頁登入帳號->開啟視訊鏡頭->開啟節目->傳送視訊串流
  • 學生端:網頁登入帳號->選擇節目->接收串流
硬體系統:
(這邊都還沒有融入WebRTC的東西,之後會再補上)
 
  • 老師端:一般的電腦,發送串流到Edge Server。
  • 學生端:一般的電腦,從Edge Server接收串流。N個學生端和Edge Server組成P2P Network,以減少Edge Server的頻寬用量。
  • Edge Server:接收老師端的串流再傳給學生端,管理與學生端P2P Network的Routing(誰要從誰那裏接收串流?)。系統有六台Edge Server,一個老師會傳送串流到一台Edge Server,如果該台Edge Server負荷過高,就會從這台Edge Server再傳給另一台Edge Server做分流,因此Edge Server之間也可能會連接起來。
  • Control Sever:負責跟老師端說要傳送串流到哪個Edge Server,跟學生端說要跟哪個Edge Server連線加入P2P Network,接受Edge Server上有那些課程與負荷的狀況,這裡因為角色的關係把Edge Server和Control Sever分開來,其實這一台Control Server應該是某一台Edge Server的工作之一。
  • WWW Server:架設使用者端要登入系統的網頁的網頁伺服器。
困惑的點:
 
  • Q:為什麼要自己做?市面沒有可用的方案嗎?
    A:節省頻寬。(未完待續...)
  • Q:
    A:
 

第3章-了解相關Terminology

Streaming
HLS
Video Chunk
WebRTC
CDN
P2P
Streaming Server
Web Server
Web Socket
 

第4章-找出現有Solution

再找資料的時候有找到一些參考方案和一些教學網頁,
貼在這邊分享:
  • WebRTC.org,官方網站,但是我不太知道怎麼從這裏面找資源...
    http://www.webrtc.org/
  • MDN 的 WebRTC介紹,可以大概知道一下WebRTC有什麼東西。
    https://developer.mozilla.org/zh-TW/docs/Web/Guide/API/WebRTC
  • SimpleWebRTC,幫你包好很多東西可以參考上面的範例熟悉一下WebRTC。
    https://simplewebrtc.com/
  • W3C-WebRTC,Spec~~
    http://dev.w3.org/2011/webrtc/editor/archives/20121019/webrtc.html
  • Git-Swem/WebRTC-on-LAN比較詳細的一個教學範例,有興趣可以去Trace裡面的code
    https://gist.github.com/swem/9731203
  • WebRTC Fundamentals,要付費的教學影片
    http://www.pluralsight.com/courses/description/webrtc-fundamentals
  • 天镶的博客-目前正在參考的教學範例
    http://lingyu.wang/tags/WebRTC/
  • Git-bemtv-好像就是給我這個系統用的哈哈...
    https://github.com/bemtv/bemtv/wiki/tutorial

第5章-bemtv章-HLS

首先就上次找到的"bemtv"專案來研究一下!
在這個專案裡面,
大部分影像的傳輸、分段、處理使用HLS來實作,
WebRTC則是負責點對點傳送一小段一小段的影像片段,

HLS是什麼呢?
可以從參考資料1得知:
HLS跟WebRTC使用的SRTP、RTP不太一樣的是
在HLS直播中,Client端接收的不是一個完整的數據流,
HLS會在Server端將直播數據儲存為連續的、短時間的多媒體文件(MPEG-TS格式),
而Client端則只需要透過不斷的下載撥放這些小文件就可以實現直播,
這樣也導致了HLS的延遲會高於一般的流媒體直播協議。
另外作者也貼心的提供了實作HLS需要注意的技術點:
  1. 採集影音數據(WebRTC-getUserMedia())
  2. 對原始數據進行H264編碼和AAC編碼
  3. 影音數據需封裝成MPEG-TS格式
  4. HLS分段生成的策略以及m3u8影音索引文件
  5. HTTP傳輸協議(WebRTC-RTCDatachannel)
(過了兩天後...)
後來再跟廠商確認系統的需求,
發現延遲只想容許1-1.5秒,
但是網路上搜尋一下HLS大部分推薦的都是把10秒切一個影像片段,
也就是最好的情況也會Delay10秒,
但是切成1秒對media server的負擔又過重...,
所以這幾天會Trace code看看能否修改成WebRTC的RTCPeerConnection,
直接傳送串流以減少延遲,
然後如果還是延遲的話可能就是再從bemtv的routing algorithm的程式碼了。

這邊貼一下我找到的參考資料,想玩HLS可以試試:
  • 搭建HTTP Live Streaming直播系统
    http://nmgfrank.com/?p=56
  • FFMPEG采集摄像头数据并切片为iPhone的HTTP Stream流
    http://blog.csdn.net/langeldep/article/details/9855631
  • linux下搭建生成HLS所需的.ts和.m3u8文件http://www.cnblogs.com/mystory/archive/2013/04/07/3006200.html
  • Linux下用FFMPEG采集usb摄像头到RTMP
    http://blog.sina.com.cn/s/blog_3cb6a78c0100xgo7.html

第6章-確認系統中各角色的功能

首先先確認一下系統的功能,
之後若有改變也會在這邊更新。
 
  • Web Server
    負責架設給老師與學生登入並撥放或觀看直播的網頁。
  • Signal Server
    負責兩個點之間的交換SDP(session description)的連線。
  • Media Server
    負責接收老師端的串流並且轉傳給學生端。
  • Control Server
    負責控制系統的Routing algorithm(Server、Client:S-S、S-C、C-C)。

參考資料:

  1. 媒體協議介紹(rtp/rtcp/rtsp/rtmp/mms/hls)
  2. http://bem.tv/
  3. https://github.com/muaz-khan/WebRTC-Scalable-Broadcast
  4. https://github.com/muaz-khan/WebRTC-Experiment/tree/master/webrtc-broadcasting
  5. https://github.com/muaz-khan/WebRTC-Experiment/issues/2

第7章-Janus WebRTC Gateway

久未更新...
碩論真的好難呀~
最後streaming server是採用janus webrtc gateway,
他的程式滿寫的滿易懂得,
有提供多種plugin(功能),
像是1 to many,1 to 1,等使用情境,
稍微修改一下也可以讓streaming server之間傳遞streaming,
所以採用了這個來當streaming server了。
雖然很抱歉,不過這邊就不詳述了。
有興趣的話可以自己去研究ㄧ下,
"打造P2P Live Streaming系統"就到這邊結束了QQ,
如果之後有機會在深入研究的話會再做更新的。
Goodbye~
 

參考資料:

  1. Demo site
    https://janus.conf.meetecho.com/
  2. Github
    https://github.com/meetecho/janus-gateway
  3. Google Group
    https://groups.google.com/forum/#!forum/meetecho-janus
arrow
arrow
    文章標籤
    webrtc hls p2p
    全站熱搜

    龍之家族 發表在 痞客邦 留言(0) 人氣()