Nginx流媒体服务器搭建

说到流媒体服务器,首先想到的就是Nginx,原因是Nginx强大的性能和高并发量,它是由C语言从头写成,由于Nginx的优势和流媒体服务器的需求相匹配,很多流媒体服务器都使用的是Nginx

对于移动端音视频开发,我们对服务器并不需要那么关心,但服务器是必不可少的,直播推流就需要用到服务器,正所谓技多不压身,学习如何搭建流媒体服务器对音视频开发有很大的帮助

一.Nginx的搭建需要下载3个资源

1.nginx -- 就和tomcat一样,当然需要下载nginx了

下载地址:http://nginx.org/download/nginx-1.12.1.tar.gz

2.openssl -- nginx编译时需要用到openssl

下载地址:https://github.com/openssl/openssl/archive/OpenSSL_1_1_0f.tar.gz

3.rtmp -- 推流使用的协议,好在有现成的模块:nginx-rtmp-module

下载地址:https://github.com/arut/nginx-rtmp-module/archive/v1.2.0.tar.gz

下载完毕后分别解压

二.先编译openssl,进入openssl的目录,创建bin文件夹(openssl默认会在当前文件夹下生成编译文件)

然后执行编译脚本
./config --prefix=`pwd`/bin
可能会遇到需要安装perl 5<--安装教程
编译完成后,执行安装命令
make install

三.编译Nginx,来到nginx的目录下(/root/nginx/nginx-1.12.1),执行以下命令

./configure --prefix=`pwd`/bin --add-module=/root/nginx/nginx-rtmp-module-1.2.0
1. 如果没有PCRE则会编译不通过
安装PCRE(安装教程)后再执行编译命令,结果发现还是会报错
2.由于nginx依赖openssl,刚刚我们编译完了openssl并没有放入usr/lib目录下,所以直接编译nginx还是会找不到openssl
需要我们在配置脚本中手动指定openssl的路径,配置脚本的文件路径已经在下面图中标注出来了:
使用vi编辑器打开文件,找到下面的内容:
        if [ $ngx_found = no ]; then

            # MacPorts

            ngx_feature="OpenSSL library in /opt/local/"
            ngx_feature_path="/opt/local/include"

            if [ $NGX_RPATH = YES ]; then
                ngx_feature_libs="-R/opt/local/lib -L/opt/local/lib -lssl -lcrypto $NGX_LIBDL"
            else
                ngx_feature_libs="-L/opt/local/lib -lssl -lcrypto $NGX_LIBDL"
            fi

            . auto/feature
        fi
在下面添加如下内容(由于window系统和linux的编码不同,建议在vi命令行下的复制上面代码,然后修改对应的值):
        if [ $ngx_found = no ]; then
            
            # MacPorts
            
            ngx_feature="OpenSSL library in /root/nginx/openssl-OpenSSL_1_1_0f/bin"
            ngx_feature_path="/root/nginx/openssl-OpenSSL_1_1_0f/bin/include"

            if [ $NGX_RPATH = YES ]; then
                ngx_feature_libs="-R/root/nginx/openssl-OpenSSL_1_1_0f/bin/lib -L/root/nginx/openssl-OpenSSL_1_1_0f/bin/lib -lssl -lcrypto $NGX_LIBDL"
            else
                ngx_feature_libs="-L/root/nginx/openssl-OpenSSL_1_1_0f/bin/lib -lssl -lcrypto $NGX_LIBDL"
            fi

            . auto/feature
        fi
保存之后,编译,这次又是zlib没有安装
3.使用yum命令进行zlib的安装
yum install -y zlib zlib-devel
安装完zlib后,再次尝试编译,成功的生成了MakeFile文件
执行安装命令
make install
4.等待nginx安装完毕,来到bin目录下的sbin目录
执行nginx
./nginx
发现报错,openssl的so库没有找到,需要我们将openssl设置到linux的环境变量中
5.使用vi编辑器,打开环境变量文件
vi /etc/ld.so.conf
加入以下内容
/root/nginx/openssl-OpenSSL_1_1_0f/bin/lib
保存
ld.so.conf
执行命令使刚设置的环境变量生效
ldconfig
6.将nginx-rtmp-module/test/下的nginx.conf 复制到 nginx/bin/conf下面
该配置文件可以修改最大连接数和nginx的端口号,我们还需要将配置文件中的nginx-rtmp-module的路径改为我们本地的路径,修改完后的文件如下
worker_processes  1;

error_log  logs/error.log debug;

events {
    # 最大连接数
    worker_connections  1024;
}

rtmp {
    server {
        # 端口
        listen 1935;

        application myapp {
            live on;

            #record keyframes;
            #record_path /tmp;
            #record_max_size 128K;
            #record_interval 30s;
            #record_suffix .this.is.flv;

            #on_publish http://localhost:8080/publish;
            #on_play http://localhost:8080/play;
            #on_record_done http://localhost:8080/record_done;
        }
    }
}

http {
    server {
        listen      8080;

        locatio_oorker_processeo /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
    
        location /stat.xsl {
            # 改成本地的路径
            #root /path/to/nginx-rtmp-module/;
            root /root/nginx/nginx-rtmp-module-1.2.0;
        }
        
        location /control {
            rtmp_control all;
        }
            
        #location /publish {
        #    return 201;
        #}  
        
        #location /play {
        #    return 202;
        #}
        
        #location /record_done {
        #    return 203;
        #}
            
        location /rtmp-publisher {
            # 改成本地的路径
            # root /path/to/nginx-rtmp-module/test;
            root /root/nginx/nginx-rtmp-module-1.2.0/test;
        }
            
        location / {
            # 改成本地的路径
            # root /path/to/nginx-rtmp-module/test/www;
            root /root/nginx/nginx-rtmp-module-1.2.0/test/www;
        }
    }
}

不要忘了给root目录赋予可读权限
chmod 755 /root

四.开启nginx服务

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

推荐阅读更多精彩内容