流媒体服务器搭建

来源:互联网 发布:java架构师成长之路 编辑:程序博客网 时间:2024/05/16 08:07

一, 环境准备

1, ffmpeg
2, pcre-8.40.tar.gz
3, zlib-1.2.11
4, nginx-rtmp-module-1.2.0
5, nginx-1.12.2.tar.gz
6, OpenSSL_1_1_0g.tar.gz
7, spawn-fcgi-1.6.4.tar.gz ——–fastCGI
8, fcgi-2.4.1-SNAP-0910052249.tar.gz —-fastCGI
9, fastdfs-5.10.tar.gz —-fastDFS
10, libfastcommon-1.36.zip –fastDFS

这里写图片描述

二, 环境的搭建

我是参考这个配置的

1, 依次编译 开源源码

2, 编译nginx_rtmp
在Nginx下编译
命令

./configure --add-module=../nginx-rtmp-module-1.2.0 --with-openssl=../openssl-OpenSSL_1_1_0g --with-zlib=../zlib-1.2.11 --with-pcre=../pcre-8.40

这样编译会报错的说找不到动态库
分析nginx依赖库lib的源码conf
这里写图片描述

对应方法配置动态库的环境变量
这里写图片描述

还有用户的环境配置

这里写图片描述

方法:
这里写图片描述

三, 配置流媒体环境

nginx的conf配置
worker_processes  1;error_log  logs/error.log debug;events {    worker_connections  1024;}rtmp {    server {        listen 1935;        application myapp {            live on;            record off;            exec ffmpeg -i rtmp://47.93.31.88/myapp/$name -threads 1 -c:v libx264 -profile:v baseline -b:v 350K -s 640x360 -f flv -c:a aac -ac 1 -strict -2 -b:a 56k rtmp://47.93.31.88/live/$name;            #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;        }        application live {            live on;            record off;        }    }}http {    sendfile        on;    #压缩    gzip  on;    server {        listen      8080;        charset utf8;        location /stat {            rtmp_stat all;            rtmp_stat_stylesheet stat.xsl;        }        location /stat.xsl {            root /home/nginx/nginx-rtmp-module-1.2.0;        }        location /jwplayer/ {            root /home/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 /home/nginx/nginx-rtmp-module-1.2.0/test;        }        location / {            root /home/nginx/nginx-rtmp-module-1.2.0/test/www;        }    }}

1, ffmpeg推流

ffmpeg -re -i input.mp4 -c copy -f flv rtmp://47.93.31.88:1935/myapp/mystream

四, 负载均衡的配置

#user  nobody;worker_processes  1;#error_log  logs/error.log;#error_log  logs/error.log  notice;#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {    worker_connections  1024;}http {    include       mime.types;    default_type  application/octet-stream;    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '    #                  '$status $body_bytes_sent "$http_referer" '    #                  '"$http_user_agent" "$http_x_forwarded_for"';    #access_log  logs/access.log  main;    sendfile        on;    #tcp_nopush     on;    #keepalive_timeout  0;    keepalive_timeout  65;    #gzip  on;    # 实现反向代理+负载均衡功能    # 代理两台linux - 需要一个server模块    # Luffy + Robin - server    server {        listen       80;        server_name  localhost;        charset utf8;        location / {            # 设置代理地址            proxy_pass http://linux.test; # 名字自己编        }    }    # 添加反向代理的模块    upstream linux.test {        server 192.168.86.253:80 weight=5;        server 192.168.86.254:80 weight=1;    }}