crtmpserver分析與組網

簡介:
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",在從服務器上也能觀看了;網絡

相關文章
相關標籤/搜索