感謝雲棲大會,親眼見到Redis做者:Salvatore Sanfilippohtml
本文講述經過參與阿里雲【2017雲棲大會】 視頻直播服務單間一套基於阿里雲的視頻直播系統,主要談及到推流、流分發、四層負載、七層負載、反向代理等內容,其中涉及到OpenResty 、Lua小語言、阿里雲OSS、Redis等相關知識內容會做簡單介紹。node
一、推流部分(動態負載均衡)shell
二、播流部分(動態反向代理)數據庫
三、直播系統架構圖:api
這一節是本文的核心內容,重點講述直播系統的架構設計。先看圖:服務器
步驟1:經過openapi 獲取推流地址和播流地址架構
步驟2:客戶開始推流,推流到分發服務器(URL_STREAM)app
步驟3:分發服務器(livenode)會執行一個shell腳本,分發本地數據流到節點負載均衡服務器,主要代碼:負載均衡
events { worker_connections 65535; } #TCP 負載均衡 stream { upstream backend { hash $remote_addr consistent; server 192.168.1.10:1935 weight=2 max_fails=3 fail_timeout=30s; server 192.168.1.11:1935 weight=5 max_fails=3 fail_timeout=30s; server 192.168.1.12.155:1935 weight=1 max_fails=3 fail_timeout=30s; } server { listen 1935; proxy_connect_timeout 1s; proxy_timeout 20s; proxy_pass backend; } } http { include mime.types; default_type application/octet-stream; log_format main '[$time_local][$remote_addr][$http_x_forwarded_for] $status "$request" "$http_referer" "$http_user_agent"'; access_log logs/access.log main; sendfile on; keepalive_timeout 65; }
步驟5:直播節點服務器會自動生成HLs格式的ts文件保存下來,同時定時清理已通過期的ts切片curl
步驟6:直播地址的回源,這裏使用Lua腳本配合Redis去實現。
一、阿里云云存儲OSS的命令行osscmd的安裝和使用,請參照個人另一篇博客:阿里雲(一)雲存儲OSS的命令行osscmd的安裝和使用
二、自動錄像上傳OSS目錄結構
三、關於更多的OSS相關知識,後續會慢慢介紹
一、直播模塊
二、點播模塊
三、錄像模塊
四、視頻編輯模塊
直播模塊
rtmp://live.aliyun.com/live/123456
rtmp://live.aliyun.com/live/123456
https://live.aliyun.com/hls/123456.m3u8
https://live.aliyun.com/dash/123456.mpd
https://live.aliyun.com/stat
錄像控制
返回值:/home/www/videos/123456-150632348720170925151127.flv
curl "https://live.aliyun.com/control/record/stop?app=live&name=123456&rec=rec1"
返回值:/home/www/videos/123456-150632348720170925151127.flv
.flv
格式自動完成截圖、切片、轉碼功能(格式:TS、MP4)點播模塊
https://vod.aliyun.com/vod/123456-150632523520170925154035/index.m3u8
https://vod.aliyun.com/vod/123456-150632523520170925154035.mp4
https://vod.aliyun.com/vod/123456-150632523520170925154035.jpg
http://oss.aliyun.com/data/201710002/video/20171000959120171007092631.mp4
視頻編輯模塊
一個簡單的小demo