直播平台折腾记——直播服务器

@[直播, nginx, 系统构架, rtmp]

不会做直播还混什么互联网

2016年国内各种直播应用如雨后春笋一般涌现出来,各大主打云服务的国内互联网巨头纷纷推出了自己的视频直播平台的解决方案,比较优秀的有七牛, 阿里的大视频解决方案,网易的云视频,当然腾讯也不甘落后,推出了类似的视频云

事实上,网络直播由来已久,但之所以会在2016年一下子火起来,我觉得一是短视频社区的火爆带动了整个视频行业,促成了网络直播的流行。再者,大部分人通过早期的微信公众号,微博等自媒体媒介尝到了甜头,网络直播片天地自然也不能放过。最后各类mooc在中国大地遍地开花,教育行业对直播也有相当需求。最后,事实上对于直播,国内具有相当的技术积累。

网络直播的技术构架

往简单地说直播就是在自己的设备上采集音视频流然后推送到远程服务器再有远程服务器分发到网络中的客户端。

这可能是历史上最粗线条的直播构架图

看上去很简陋,但是单就直播这个功能来说,他确实就是这么工作的,但是为了让大家看到更加高清的画面同时又能最大限度的满足部分用户可怜的带宽,编码工作就成了视频直播的重点。其次,不同的硬件的编码方式也不同,存在各种兼容性问题。同时,视频取流的客户端也需要做各种各样的播放器来满足不同设备。最要命的还有服务器端的网络分发,怎么寻找最短的路径用最快的时间把视频分发出去?最后,还有视频延时怎么才能降到最低,音视频的同步,直播的录像和回看和其引出的存储问题,权限问题,内容审核,用户体验,用户之间的即时消息,礼物系统等等一系列问题的引出,最终导致了直播系统变得异常复杂,于是就有了下图:

一个功能上基本够用的直播系统(来自知乎网易工程师)

书归正传,先来谈谈直播服务器

目前比较主流的直播协议有以下几种:

  • RTMP(延迟低,适合对实时性要求比较高的情况)
  • FLV OVER HTTP(延迟比RTMP高一点,来疯之类在用)
  • HLS(高延迟,至少9秒左右,适合游戏直播,Twich好像用这个)

怎么选择协议是一个让人头疼的问题,RTMP是Adobe开发出来的一套私有协议,适用于flash player 在PC端用起来比较爽,但是到了移动端则需要自己单独开发播放器;HTTP-FLV,同样依赖于flash player延时排第二,同样不能原生支持移动端,但其本质上使用的是HTTP协议传输;HLS则可以原生支持手机端,不过,延时较大。

最终,尽管Adobe已经正是声明将在2020年停止开发FLASH,但是这也并不影响我使用rtmp协议,谁让网络上rtmp的资料比较多呢。

RTMP服务器

目前主流的RTMP服务器又有下面这么几种(这是要逼死选择困难户啊):
1.开源系统:

  • Red5
  • Live555
  • RtmpD
  • EasyDarwin
  • FFServer
    2.商用系统
  • NTV Media Server G3
  • Flash Media Server5
  • Windows Media Server

商用系统,额,基本上不用考虑了,像我这种个人开发者。。。
然后,开源系统也果断一个都没有选,最后选择了nginx-rtmp.因为我的直播系统并没有多么复杂,说是直播,实际上是想做一个导播台!

nginx-rtmp安装

nginx-rtmp 事实上只是nginx的一个模块,而且并没有在nginx官方版本内集成,需要在安装nginx的时候同是编译这个模块进去。

具体的安装方法,按照一般的套路,首先是下载,然后是编译和安装,最后是配置。

首先,需要分别下载nginx服务器和对应的插件 nginx-rtmp-module.

wget https://nginx.org/download/nginx-1.12.1.tar.gz
git clone git://github.com/arut/nginx-rtmp-module.git
tar xzf nginx-1.12.0.tar.gz
cd nginx-1.12.0

然后,进行编译安装:

sudo ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
sudo make
sudo make install

至此,编译安装完成!家下来启动nginx服务器:

sudo /usr/local/nginx/sbin/nginx

设置nginx服务器的直播流

sudo vi /usr/local/nginx/conf/nginx.conf

error_log  logs/error.log debug;
    
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;

        # rtmp stat
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
        location /stat.xsl {
            # you can move stat.xsl to a different location
            root /usr/build/nginx-rtmp-module;
        }

        # rtmp control
        location /control {
            rtmp_control all;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

rtmp {
    server {
        listen 1935;
        ping 30s;
        notify_method get;

        application myapp {
            live on;
        }
    }
}   

设置完成之后,重启nginx服务器:

sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx

最后准备一个MP4文件进行测试:
使用ffmpeg推送视频文件到服务器:

ffmpeg -re -i /var/Videos/test.mp4 -c copy -f flv rtmp://localhost/myapp/mystream

最后再访问我们的直播地址:

ffplay rtmp://localhost/myapp/mystream

完美运行
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容