簡介:
crtmpserver是一款不錯的開源流媒體服務器,用c++語言編寫,跨平臺。
官方介紹crtmpserver不只支持adobe rtmp協議,還支持其它經常使用的協議:
. To and from Flash (RTMP,RTMPE, RTMPS, RTMPT, RTMPTE)
. To and from embedded devices: Android, IP cameras, Hardware encoders
. From iOS devices
. IP-TV using MPEG-TS and RTSP/RTCP/RTP protocols
1、結構圖
crtmpserver從生產環境使用的狀況來看,天天都在用,從幾十M到上百M的流量不等,運行幾個月無宕機,
CPU, 內存各方面性能指標穩定,仍是比較滿意的。
固然官方還提示有改進的商業版的版本「EvoStream」,若是不差錢,能夠買商業版,也算支持做者辛苦的付出。
平常使用,開源版本已經足夠。
下圖1是我整理的畫的crtmpserver結構圖,按層次劃分。分爲如下幾大部分:
. 網絡層: 操做系統的網絡模型相關, Linux平臺epoll, FreeBSD平臺kqueue, Windows平臺select
. 協議層: RTMP,SIP SDP,HTTP,TS, RTP等協議的處理
. 媒體層: 處理媒體的codec, 如mp3, mp4, flv, aac H.264等
. 應用層: 一系列應用,如admin, http/https, liveflv, dns等,
咱們也能夠擴展本身的協議,如圖中應用層紅色模塊部分所示:
2、組網
crtmpserver還支持簡單的負載集羣,只須要把配置文件中配置主從關係,
推到主上的媒體流天然從上面也有,Viewer能夠分散開從從服務器上拉媒體流。
以下圖所示:
具體配置示例以下:
修改主服務器的crtmpserver.lua
{
name="proxypublish",
description="Application for forwarding streams to another RTMP server",
protocol="dynamiclinklibrary",
acceptors =
{
{
ip="0.0.0.0",
port=6665, -- 主服務器接收RTMP流的端口
--protocol="inboundLiveFlv"
protocol="inboundRtmp"
},
},
abortOnConnectError=true,
targetServers =
{
{
targetUri="rtmp://192.168.1.115/live", -- 從服務器的URL
targetStreamType="live", -- (live, record or append)c++
targetStreamName="stream1", 服務器
localStreamName="proxytest", -- 推送到從服務器的流
keepAlive=true
},
},
},
啓動主,多服務器;這樣,推送到主服務器的流「proxytest",在從服務器上也能觀看了;網絡