基于SRS的RTMP分发技术方案
生活随笔
收集整理的這篇文章主要介紹了
基于SRS的RTMP分发技术方案
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、采集
SRS支持兩種方式得到RTMP直播源。一種是使用FFmpeg, 設備或其它方式將流推送到SRS。
另一種方式是SRS本身帶采集功能。
采集(Ingest)指的是將文件(flv,mp4,mkv,avi,rmvb等等),
流(RTMP,RTMPT,RTMPS,RTSP,HTTP,HLS等等),設備等的數(shù)據(jù),
轉封裝為RTMP流(若編碼不是h264/aac則需要轉碼),推送到SRS。
采集基本上就是使用FFMPEG作為編碼器,或者轉封裝器,將外部流主動抓取到SRS。
采集的部署實例參考:Ingest
1.1 應用場景
采集的主要應用場景包括:1.虛擬直播: ? ? ?
? 將文件編碼為直播流。可以指定多個文件后,SRS會循環(huán)播放。
2.RTSP攝像頭對接:
? 以前安防攝像頭都支持訪問RTSP地址,RTSP無法在互聯(lián)網(wǎng)播放。
? 可以將RTSP采集后,以RTMP推送到SRS,后面的東西就不用講了。
3.直接采集設備: ?
? SRS采集功能可以作為編碼器采集設備上的未壓縮圖像數(shù)據(jù),
? 譬如video4linux和alsa設備,編碼為h264/aac后輸出RTMP到SRS。
4.將HTTP流采集為RTMP:
? 有些老的設備,能輸出HTTP的ts或FLV流,可以采集后轉封裝為RTMP,支持HLS輸出。
總之,采集的應用場景主要是“SRS拉流”;
能拉任意的流,只要ffmpeg支持;
不是h264/aac都沒有關系,ffmpeg能轉碼。
SRS默認是支持“推流”,即等待編碼器推流上來,
可以是專門的編碼設備,FMLE,ffmpeg,xsplit,flash等等。
如此,SRS的接入方式可以是“推流到SRS”和“SRS主動拉流”,
基本上作為源站的功能就完善了。
1.2 編譯
Ingest需要在編譯時打開:--with-ingest。參考:BuildIngest默認使用自帶的ffmpeg,也可以不編譯ffmpeg,使用自己的編轉碼工具。
禁用默認的ffmpeg在編譯時指定--without-ffmpeg即可。
參考:Build
1.3 配置
Ingest的配置如下:vhost your_vhost {
? ? # ingest file/stream/device then push to SRS over RTMP.
? ? # the name/id used to identify the ingest, must be unique in global.
? ? # ingest id is used in reload or http api management.
? ? ingest livestream {
? ? ? ? # whether enabled ingest features
? ? ? ? # default: off
? ? ? ? enabled ? ? ?on;
? ? ? ? # input file/stream/device
? ? ? ? # @remark only support one input.
? ? ? ? input {
? ? ? ? ? ? # the type of input.
? ? ? ? ? ? # can be file/stream/device, that is,
? ? ? ? ? ? # ? file: ingest file specifies by url.
? ? ? ? ? ? # ? stream: ingest stream specifeis by url.
? ? ? ? ? ? # ? device: not support yet.
? ? ? ? ? ? # default: file
? ? ? ? ? ? type ? ?file;
? ? ? ? ? ? # the url of file/stream.
? ? ? ? ? ? url ? ? ./doc/source.200kbps.768x320.flv;
? ? ? ? }
? ? ? ? # the ffmpeg?
? ? ? ? ffmpeg ? ? ?./objs/ffmpeg/bin/ffmpeg;
? ? ? ? # the transcode engine, @see all.transcode.srs.com
? ? ? ? # @remark, the output is specified following.
? ? ? ? engine {
? ? ? ? ? ? # @see enabled of transcode engine.
? ? ? ? ? ? # if disabled or vcodec/acodec not specified, use copy.
? ? ? ? ? ? # default: off.
? ? ? ? ? ? enabled ? ? ? ? ?off;
? ? ? ? ? ? # output stream. variables:
? ? ? ? ? ? # [vhost] current vhost which start the ingest.
? ? ? ? ? ? # [port] system RTMP stream port.
? ? ? ? ? ? output ? ? ? ? ?rtmp://127.0.0.1:[port]/live?vhost=[vhost]/livestream;
? ? ? ? }
? ? }
}
ingest指令后面是ingest的id,全局需要唯一,用來標識這個ingest。
在reload/http-api管理時才知道操作的是哪個。
譬如,reload時用來檢測哪些ingest更新了,需要通知那些已經(jīng)存在的ingest,停止已經(jīng)不存在的ingest。
其中,type指定了輸入的幾種類型:
file: ? ?輸入為文件,url指定了文件的路徑。srs會給ffmpeg傳遞-re參數(shù)。
stream: ?輸入為流,url指定了流地址。
device: ?暫時不支持。
engine: 指定了轉碼引擎參數(shù):
enabled: 指定是否轉碼,若off或者vcodec/acodec沒有指定,則不轉碼,使用ffmpeg-copy。
output: 輸出路徑。
? ? ? ? ?有兩個變量可以使用:
? ? ? ? ? ?port為系統(tǒng)偵聽的RTMP端口,
? ? ? ? ? ?vhost為配置了ingest的vhost。
其他參考轉碼的配置:FFMPEG
注意:engine默認為copy,當:
engine的enabled為off,沒有開啟轉碼engine,則使用copy。
engine的vcodec/acodec沒有指定,則使用copy。
采集多個文件。
實現(xiàn)方法:
可以把輸入文件變成文件列表。自己寫工具實現(xiàn)采集列表。
二、Forward模式搭建小型集群
srs定位為直播服務器,其中一項重要的功能是forward,即將服務器的流轉發(fā)到其他服務器。備注:SRS的邊緣RTMP參考Edge,支持訪問時回源,為大規(guī)模并發(fā)提供最佳解決方案。
注意:edge可以從源站拉流,也可以將流轉發(fā)給源站。
? ? ? 也就是說,播放edge上的流時,edge會向源站拉流;
? ? ? 推流到edge上時,edge會直接將流轉發(fā)給源站。
注意:若只需要中轉流給源站,不必用forward,直接使用edge模式即可。
? ? ? 可以直接支持推流和拉流的中轉,簡單快捷。
? ? ? Forward應用于目標服務器是多個,譬如將一路流主動送給多路服務器;
? ? ? edge雖然配置了多臺服務器,但是只用了一臺,有故障時才切換。
注意:優(yōu)先使用edge,除非知道必須用forward,才使用forward。
forward本身是用做熱備,即用戶推一路流上來,可以被SRS轉發(fā)(或者轉碼后轉發(fā))到多個slave源站,
CDN邊緣可以拉多個slave源站的流,實現(xiàn)故障熱備的功能,構建強容錯系統(tǒng)。
轉發(fā)的部署實例參考:Usage: Forward
2.1 詞匯
為了和edge方式區(qū)分,forward定義一次詞匯如下:master:主服務器,
? ? ? ? 編碼器推流到這個服務器,或者用ingest流到服務器。
? ? ? ? 總之,master就是主服務器,負責轉發(fā)流給其他服務器。
slave: 從服務器,主服務器轉發(fā)流到這個服務器。
如果結合edge集群方式,一般而言master和slave都是origin(源站服務器),
edge邊緣服務器可以從master或者slave回源取流。
實際上master和slave也可以是edge,但是不推薦,這種組合方式太多了,測試沒有辦法覆蓋到。
因此,強烈建議簡化服務器的結構,只有origin(源站服務器)才配置轉發(fā),edge(邊緣服務器)只做邊緣。
2.2 For Small Cluster
forward也可以用作搭建小型集群。架構圖如下:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?+-------------+ ? ?+---------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?+-->+ Slave(1935) +->--+ ?Player(3000) +
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? +-------------+ ? ?+---------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? +-------------+ ? ?+---------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|-->+ Slave(1936) +->--+ ?Player(3000) +
? ? ? ? ?publish ? ? ? forward | ? +-------------+ ? ?+---------------+
+-----------+ ? ?+--------+ ? ?| ? ? 192.168.1.6 ? ? ? ? ? ? ? ? ? ? ??
| ?Encoder ?+-->-+ Master +-->-| ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
+-----------+ ? ?+--------+ ? ?| ? +-------------+ ? ?+---------------+
?192.168.1.3 ? ?192.168.1.5 ? ?+-->+ Slave(1935) +->--+ ?Player(3000) +
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? +-------------+ ? ?+---------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? +-------------+ ? ?+---------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?+-->+ Slave(1936) +->--+ ?Player(3000) +
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?+-------------+ ? ?+---------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?192.168.1.7 ? ? ? ? ? ? ? ? ? ? ? ? ?
2.3 下面是搭建小型集群的實例。
1. Encoder編碼器編碼器使用FFMPEG推流。編碼參數(shù)如下:
for((;;)); do\
? ? ./objs/ffmpeg/bin/ffmpeg \
? ? -re -i doc/source.200kbps.768x320.flv \
? ? -vcodec copy -acodec copy \
? ? -f flv -y rtmp://192.168.1.5:1935/live/livestream; \
done
2. SRS-Master服務器
SRS(192.168.1.5)的配置如下:
listen ? ? ? ? ? ? ?1935;
pid ? ? ? ? ? ? ? ? ./objs/srs.pid;
max_connections ? ? 10240;
vhost __defaultVhost__ {
? ? gop_cache ? ? ? on;
? ? forward ? ? ? ? 192.168.1.6:1935 192.168.1.6:1936 192.168.1.7:1935 192.168.1.7:1936;
}
源站的流地址播放地址是:rtmp://192.168.1.5/live/livestream
將流forward到兩個邊緣節(jié)點上。
3. SRS-Slave節(jié)點
Slave節(jié)點啟動多個SRS的進程,每個進程一個配置文件,偵聽不同的端口。
以192.168.1.6的配置為例,需要偵聽1935和1936端口。
配置文件srs.1935.conf配置如下:
listen ? ? ? ? ? ? ?1935;
pid ? ? ? ? ? ? ? ? ./objs/srs.1935.pid;
max_connections ? ? 10240;
vhost __defaultVhost__ {
? ? gop_cache ? ? ? on;
}
配置文件srs.1936.conf配置如下:
listen ? ? ? ? ? ? ?1936;
pid ? ? ? ? ? ? ? ? ./objs/srs.1936.pid;
max_connections ? ? 10240;
vhost __defaultVhost__ {
? ? gop_cache ? ? ? on;
}
啟動兩個SRS進程:
nohup ./objs/srs -c srs.1935.conf >/dev/null 2>&1 &
nohup ./objs/srs -c srs.1936.conf >/dev/null 2>&1 &
播放器可以隨機播放著兩個流:
rtmp://192.168.1.6:1935/live/livestream
rtmp://192.168.1.6:1936/live/livestream
另外一個Slave節(jié)點192.168.1.7的配置和192.168.1.6一樣。
4. 服務的流
此架構服務中的流為:
流地址 服務器 端口 連接數(shù)
rtmp://192.168.1.6:1935/live/livestream 192.168.1.6 1935 3000
rtmp://192.168.1.6:1936/live/livestream 192.168.1.6 1936 3000
rtmp://192.168.1.7:1935/live/livestream 192.168.1.7 1935 3000
rtmp://192.168.1.7:1936/live/livestream 192.168.1.7 1936 3000
這個架構每個節(jié)點可以支撐6000個并發(fā),兩個節(jié)點可以支撐1.2萬并發(fā)。 還可以加端口,可以支持更多并發(fā)。
2.4. Forward VS Edge
Forward架構和CDN架構的最大區(qū)別在于,CDN屬于大規(guī)模集群,邊緣節(jié)點會有成千上萬臺,源站2臺(做熱備),還需要有中間層。
CDN的客戶很多,流也會有很多。
所以假若源站將每個流都轉發(fā)給邊緣,會造成巨大的浪費(有很多流只有少數(shù)節(jié)點需要)。
可見,forward只適用于所有邊緣節(jié)點都需要所有的流。CDN是某些邊緣節(jié)點需要某些流。
forward的瓶頸在于流的數(shù)目,假設每個SRS只偵聽一個端口:
系統(tǒng)中流的數(shù)目 = 編碼器的流數(shù)目 × 節(jié)點數(shù)目 × 端口數(shù)目
考慮5個節(jié)點,每個節(jié)點起4個端口,即有20個SRS邊緣。編碼器出5路流,則有20 * 5 = 100路流。
同樣的架構,對于CDN的邊緣節(jié)點來講,系統(tǒng)的流數(shù)為用戶訪問邊緣節(jié)點的流,
假設沒有用戶訪問,系統(tǒng)中就沒有流量。某個區(qū)域的用戶訪問某個節(jié)點上的流,
系統(tǒng)中只有一路流,而不是forward廣播式的多路流。
另外,forward需要播放器隨機訪問多個端口,實現(xiàn)負載均衡,或者播放器訪問api服務器,
api服務器實現(xiàn)負載均衡,對于CDN來講也不合適(需要客戶改播放器)。
總之,forward適用于小型規(guī)模的集群,不適用于CDN大規(guī)模集群應用。
2.5 高級應用
forward還可以結合hls和transcoder功能使用,即在源站將流轉碼,然后forward到Slave節(jié)點,Slave節(jié)點支持rtmp同時切HLS。
因為用戶推上來的流,或者編碼器(譬如FMLE)可能不是h264+aac,
需要先轉碼為h264+aac(可以只轉碼音頻)后才能切片為hls。
需要結合vhost,先將流transcode送到另外一個vhost,這個vhost將流轉發(fā)到Slave。
這樣可以只轉發(fā)轉碼的流。
參考vhost,hls和transcoder相關wiki。
三、Edge邊緣服務器
SRS的Edge提供訪問時回源機制,在CDN/VDN等流眾多的應用場景中有重大意義,?forward/ingest方案會造成大量帶寬浪費。
同時,SRS的Edge能對接所有的RTMP源站服務器,?
不像FMS的Edge只能對接FMS源站(有私有協(xié)議);
另外,SRS的Edge支持SRS源站的所有邏輯 (譬如轉碼,轉發(fā),HLS,DVR等等),
也就是說可以選擇在源站切片HLS,也可以直接在邊緣切片HLS。
備注:Edge一般負載高,SRS支持的并發(fā)足夠跑滿千兆網(wǎng)帶寬了。
3.1 Edge的主要應用場景:
CDN/VDN大規(guī)模集群,客戶眾多流眾多需要按需回源。小規(guī)模集群,但是流比較多,需要按需回源。
骨干帶寬低,邊緣服務器強悍,可以使用多層edge,降低上層BGP帶寬。
注意1.:
edge可以從源站拉流,也可以將流轉發(fā)給源站。
也就是說,播放edge上的流時,edge會回源拉流;
推流到edge上時,edge會直接將流轉發(fā)給源站。
注意2.:
若只需要中轉流給源站,不必用forward,直接使用edge模式即可。
可以直接支持推流 和拉流的中轉,簡單快捷。
Forward應用于目標服務器是多個,譬如將一路流主動送給多路服務器;
edge雖然配置了多臺服務器,但是只用了一臺,有故障時才切換。
注意:優(yōu)先使用edge,除非知道必須用forward,才使用forward。
3.2 概念
所謂邊緣edge服務器,就是邊緣直播緩存服務器,配置時指定為remote模式和origin(指定一個或多個源站IP),
這個邊緣edge服務器就是源站的緩存了。
當用戶推流到邊緣服務器時,邊緣直接將流轉發(fā)給源站。
譬如源站在北京BGP機房,湖南有個電信ADSL用戶要推流發(fā)布自己的直播流,
要是直接推流到北京BGP可能效果不是很好,可以在湖南電信機房部署一個邊緣,
用戶推流到湖南邊緣,邊緣轉發(fā)給北京源站BGP。
當用戶播放邊緣服務器的流時,邊緣服務器看有沒有緩存,若緩存了就直接將流發(fā)給客戶端。?
若沒有緩存,則發(fā)起一路回源鏈接,從源站取數(shù)據(jù)源源不斷放到自己的緩存隊列。
也就是說, 多個客戶端連接到邊緣時,只有一路回源。
這種結構在CDN是最典型的部署結構。
譬如北京源站, 在全國32個省每個省都部署了10臺服務器,
一共就有320臺邊緣,假設每個省1臺邊緣服務器都有2000用戶觀看,那么就有64萬用戶,
每秒鐘集群發(fā)送640Gbps數(shù)據(jù);而回源鏈接只有320個,實現(xiàn)了大規(guī)模分發(fā)。
邊緣edge服務器,實際上是解決大并發(fā)問題產(chǎn)生的分布式集群結構。
SRS的邊緣可以指定多個源站,在源站出現(xiàn)故障時會自動切換到下一個源站,
不影響用戶觀看,具有最佳的容錯性,用戶完全不會覺察。
3.3 Config
edge屬于vhost的配置,將某個vhost配置為edge后,該vhost會回源取流(播放時)或者將流轉發(fā) 給源站(發(fā)布時)。
vhost __defaultVhost__ {
? ? # the mode of vhost, local or remote.
? ? # ? ? ? local: vhost is origin vhost, which provides stream source.
? ? # ? ? ? remote: vhost is edge vhost, which pull/push to origin.
? ? # default: local
? ? mode ? ? ? ? ? ?remote;
? ? # for edge(remote mode), user must specifies the origin server
? ? # format as: [:port]
? ? # @remark user can specifies multiple origin for error backup, by space,
? ? # for example, 192.168.1.100:1935 192.168.1.101:1935 192.168.1.102:1935
? ? origin ? ? ? ? ?127.0.0.1:1935 localhost:1935;
? ? # for edge, whether open the token traverse mode,
? ? # if token traverse on, all connections of edge will forward to origin to check(auth),
? ? # it's very important for the edge to do the token auth.
? ? # the better way is use http callback to do the token auth by the edge,
? ? # but if user prefer origin check(auth), the token_traverse if better solution.
? ? # default: off
? ? token_traverse ?off;
}
可配置多個源站,在故障時會切換到下一個源站。
3.4 集群配置
下面舉例說明如何配置一個源站和集群。源站配置,參考origin.conf:
listen ? ? ? ? ? ? ?19350;
pid ? ? ? ? ? ? ? ? objs/origin.pid;
srs_log_file ? ? ? ?./objs/origin.log;
vhost __defaultVhost__ {
}
邊緣配置,參考edge.conf:
listen ? ? ? ? ? ? ?1935;
pid ? ? ? ? ? ? ? ? objs/edge.pid;
srs_log_file ? ? ? ?./objs/edge.log;
vhost __defaultVhost__ {
? ? mode ? ? ? ? ? ?remote;
? ? origin ? ? ? ? ?127.0.0.1:19350;
}
3.5 HLS邊緣
Edge指的是RTMP邊緣,也就是說,配置為Edge后,流推送到源站(Origin)時,Edge不會切片生成HLS。HLS切片配置在源站,只有源站會在推流上來就產(chǎn)生HLS切片。
邊緣只有在訪問時才會回源(這個時候 也會生成HLS,但單獨訪問邊緣的HLS是不行的)。
也就是說,HLS的邊緣需要使用WEB服務器緩存,譬如nginx反向代理,squid,或者traffic server等。
3.6 下行邊緣結構設計
下行邊緣指的是下行加速邊緣,即客戶端播放邊緣服務器的流,邊緣服務器從上層或源站取流。SRS下行邊緣是非常重要的功能,需要考慮以下因素:
以后支持多進程時結構變動最小。
和目前所有功能的對接良好。
支持平滑切換,源站和邊緣兩種角色。
權衡后,SRS下行邊緣的結構設計如下:
客戶端連接到SRS
開始播放SRS的流
若流存在則直接播放。
若流不存在,則從源站開始取流。
其他其他流的功能,譬如轉碼/轉發(fā)/采集等等。
核心原則是:
邊緣服務器在沒有流時,向源站拉取流。
當流建立起來后,邊緣完全變成源站服務器,對流的處理邏輯保持一致。
支持回多個源站,錯誤時切換。這樣可以支持上層服務器熱備。
備注:RTMP多進程(計劃中)的核心原則是用多進程作為完全鏡像代理,
連接到本地的服務器 (源站或邊緣),完全不考慮其他業(yè)務因素,透明代理。
這樣可以簡單,而且利用多CPU能力。 HTTP多進程是不考慮支持的,用NGINX是最好選擇,
SRS的HTTP服務器只是用在嵌入式設備中, 沒有性能要求的場合。
3.7 上行邊緣結構設計
上行邊緣指的是上行推流加速,客戶端推流到邊緣服務器,邊緣將流轉發(fā)給源站服務器。考慮到下行和上行可能同時發(fā)生在一臺邊緣服務器,所以上行邊緣只能用最簡單的代理方式,?
完全將流代理到上層或源站服務器。也就是說,只有在下行邊緣時,邊緣服務器才會啟用其他的功能,
譬如HLS轉發(fā)等等。
上行邊緣主要流程是:
客戶端連接到SRS
開始推流到SRS。
開始轉發(fā)到源站服務器。
EdgeState
邊緣的狀態(tài)圖分析如下:
RTMP-HLS-latency
注意:這種細節(jié)的文檔很難保持不變,以代碼為準。
3.8 邊緣的難點
RTMP邊緣對于SRS來講問題不大,主要是混合了reload和HLS功能的邊緣服務器,會是一個難點。譬如,用戶在訪問邊緣上的HLS流時,是使用nginx反向代理回源,還是使用RTMP回源后在邊緣切片??
對于前者,需要部署srs作為RTMP邊緣,nginx作為HLS邊緣,管理兩個服務器自然是比一個要費勁。?
若使用后者,即RTMP回源后邊緣切片,能節(jié)省骨干帶寬,只有一路回源,
難點在于訪問HLS時要發(fā)起 RTMP回源連接。
正因為業(yè)務邏輯會是邊緣服務器的難點,所以SRS對于上行邊緣,采取直接代理方式,
并沒有采取 邊緣緩存方式。所謂邊緣緩存方式,即推流到邊緣時邊緣也會當作源站直接緩存(作為源站),?
然后轉發(fā)給源站。邊緣緩存方式看起來先進,這個邊緣節(jié)點不必回源,實際上加大了集群的邏輯難度,?
不如直接作為代理方式簡單。
四、RTMP 集群(源/邊緣) 架構
SRS集群支持兩種模式: forward 和 edge步驟一:
Any RTMP encoder push RTMP stream to RTMP (origin/edge)server,
? ? where SRS RTMP Edge server will forward stream to origin.
RTMP編碼器推送RTMP流有兩個目的地址:
1. RTMP源服務器,
2. SRS RTMP邊緣服務器;
? ?推送到SRS RTMP邊緣服務器的RTMP流會被再forward到RTMP源服務器;
+---------+ ? ? ? +-----------------+ ? ? +-----------------------+?
+ Encoder +--+-->-+ ?SRS(RTMP Edge) +--->-+ ? ? (RTMP Origin) ? ? |?
+---------+ ?| ? ?+-----------------+ ? ? | ? SRS/FMS/NGINX-RTMP ?|
? ? ? ? ? ? ?| ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?Red5/HELIX/CRTMP ? |
? ? ? ? ? ? ?+-------------------------->-+ ? ? ? ? ...... ? ? ? ?|
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-----------------------+?
步驟二:
SRS邊緣服務器從RTMP源服務器或上游SRS邊緣服務器拉流,
這時,當前的SRS邊緣服務器即可以為客戶端提供直播播放服務,
也可以做為下一級SRS邊緣服務器的源;
+-------------+ ? ?+-----------------+ ? ? ?+--------------------+
| RTMP Origin +-->-+ ?SRS(RTMP Edge) +--+->-+ ?Client(RTMP/HLS) ?|
+-------------+ ? ?+-----------------+ ?| ? | ?Flash/IOS/Android |
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? +--------------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? +-----------------+
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +->-+ ?SRS(RTMP Edge) +
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? +-----------------+
總結
以上是生活随笔為你收集整理的基于SRS的RTMP分发技术方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: srs代码学习(1)--listen建立
- 下一篇: RTMP的URL/Vhost规则