acm excel unity3d flask d3 websocket background uiwebview js鼠标离开事件 monkey安装 python转java idea格式化代码设置 mysql插入 java发邮件 java基本语法 java中的数据类型 java中tostring方法 java获取本地时间 服务器操作系统下载 js四舍五入 超级煎蛋卷 微信摇骰子表情包 如何给黑白照片上色 地下城怎么双开 游戏linux正则表达式 mp4剪切合并大师 pr书写效果 网络电子书 死从天降成就 摇骰子表情包 小米手环怎么连接手机 追评可以删除吗 fabfilter exe文件反编译 devenv java游戏高级编程 退货保障卡 热键助手 cia转cci 武极加点
当前位置: 首页 > 学习教程  > 编程语言

CentOS 7 JavaWeb 环境下SRS+Nginx搭建流媒体服务器

2020/11/24 9:22:08 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

CentOS 7 JavaWeb 环境安装与配置 安装环境:CentOS7 64位 ,安装MySQL5.7,Java1.8,Tomcat8.5.60,Redis3.2。 虚拟机需要配置网卡,使用桥接,开启网卡并设置:静态ip、网关、子网掩码、D…

CentOS 7 JavaWeb 环境安装与配置

安装环境:CentOS7 64位 ,安装MySQL5.7,Java1.8,Tomcat8.5.60,Redis3.2。

  • 虚拟机需要配置网卡,使用桥接,开启网卡并设置:静态ip、网关、子网掩码、DNS

重启网络服务

systemctl restart network

查看ip

ip addr

配置防火墙

  • MySQL默认端口为3306端口,Tomcat 默认端口为8080端口,Redis默认端口为6379端口。
    远程访问,需要打开防火墙。CentOS 7 中默认防火墙是firewalld,默认为关闭状态。

若无firewall-cmd命令则先安装firewalld

yum install firewalld -y

启动Firewall

systemctl start firewalld

设置开机自启动

systemctl enable firewalld

开放mysql3306端口,tomcat8080端口,
redis6379端口,srs服务器拉流80端口,推流1935端口

firewall-cmd --permanent --add-port=端口号/tcp

重载防火墙配置

firewall-cmd --reload

查看所有已开放端口

firewall-cmd --list-ports

一、安装配置MySQL

  1. 配置YUM源

下载mysql源安装包

wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

没wget的话先安装wget

yum install wget -y

安装mysql源

yum localinstall mysql57-community-release-el7-11.noarch.rpm -y
  1. 安装MYSQL
yum install mysql-community-server -y
  1. 启动MYSQL服务

启动服务

systemctl start mysqld

查看启动状态

systemctl status mysqld
  1. 配置开机启动
systemctl enable mysqld
systemctl daemon-reload
  1. 修改ROOT默认密码
  • mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改
grep 'temporary password' /var/log/mysqld.log

登录mysql

mysql -uroot -p

修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root000!';

或者

set password for 'root'@'localhost'=password('Root000!');

注意:mysql5.7默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements错误。

通过msyql环境变量可以查看密码策略的相关信息

show variables like '%password%';
validate_password_policy:密码策略,默认为MEDIUM策略
validate_password_dictionary_file:密码策略文件,策略为STRONG才需要
validate_password_length:密码最少长度
validate_password_mixed_case_count:大小写字符长度,至少1个
validate_password_number_count :数字至少1个
validate_password_special_char_count:特殊字符至少1

上述参数是默认策略MEDIUM的密码检查规则。
共有以下几种密码策略:

策略	检查规则
0 or LOW	Length
1 or MEDIUM	Length; numeric, lowercase/uppercase, and special characters
2 or STRONG	Length; numeric, lowercase/uppercase, and special characters; dictionary file

修改密码策略:
在/etc/my.cnf文件添加validate_password_policy配置,指定密码策略

选择0(LOW),1(MEDIUM),2(STRONG)其中一种,选择2需要提供密码字典文件

validate_password_policy=0

如果不需要密码策略,添加my.cnf文件中添加如下配置禁用即可:

validate_password = off

重新启动mysql服务使配置生效:

systemctl restart mysqld
  1. 添加远程登录用户
GRANT ALL PRIVILEGES ON *.* TO 'testuser'@'%' IDENTIFIED BY 'Test000!' WITH GRANT OPTION;

刷新用户权限表,立即生效

flush privileges;
  1. 配置默认编码为UTF8
    修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置,如下所示:
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'

重新启动mysql服务使配置生效

systemctl restart mysqld

验证utf-8

show variables like '%character%';

默认配置文件路径:
配置文件:/etc/my.cnf
日志文件:/var/log//var/log/mysqld.log
服务启动脚本:/usr/lib/systemd/system/mysqld.service
socket文件:/var/run/mysqld/mysqld.pid

二、安装JAVA

java-1.8.0-openjdk仅包含jre,如果需要使用jdk包则应为java-1.8.0-openjdk-devel

yum install java-1.8.0-openjdk -y

安装完成后,验证一下:

java -version

三、安装配置Tomcat

下载Tomcat8

cd /tmp
wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.60/bin/apache-tomcat-8.5.60.tar.gz

解压安装包到/opt目录,更改目录名为tomcat

cd /opt
tar -zxvf /tmp/apache-tomcat-8.5.60.tar.gz
mv apache-tomcat-8.5.60 tomcat

如果使用tomcat8之前的版本,还需要配置默认编码

cd /opt/tomcat/conf
vi server.xml

在下面两句末尾加上URIEncoding=“UTF-8”

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"  redirectPort="8443" URIEncoding="UTF-8"/>

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>

建立自启动服务
配置完成,接下来需要建立系统服务文件。
vi编辑器可在命令模式下使用set nu开启行号
使用/xx命令来查找xx。n下一个,N上一个。

vi /etc/systemd/system/tomcat.service

文件内容如下:

[Unit]
Description=Apache Tomcat 8
After=syslog.target network.target

[Service]
Type=forking
User=root
Group=root

Environment=JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el7_9.x86_64
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID

[Install]
WantedBy=multi-user.target

配置文件中需要注意,JAVA_HOME变量的配置,需要按实际情况而定。
保存文件然后按以下命令执行服务并配置自动启动。

systemctl daemon-reload
systemctl start tomcat
systemctl enable tomcat

然后浏览器中打开,测试是否成功。

四、安装配置Redis

  1. 下载REDIS
    源地址在国外,存在不稳定的情况。若无法连接,请用p2p工具下载后ftp上传。
cd /tmp
wget http://download.redis.io/releases/redis-3.2.9.tar.gz

解压安装包到/opt目录,更改目录名为redis

cd /opt
tar -zxvf /tmp/redis-3.2.9.tar.gz
mv redis-3.2.9 redis
  1. 编译安装
cd /opt/redis/src
make

错误提示:“gcc:命令未找到”、“cc: 未找到命令”

编译需要安装gcc,用yum安装gcc

yum install gcc -y

错误提示:“致命错误:jemalloc/jemalloc.h:没有那个文件或目录”
需要加上参数,不然linux下会报错

make MALLOC=libc

提示Hint: It’s a good idea to run ‘make test’ ;)编译完成
make完成之后,进行make install,默认安装路径为/usr/local/bin下

make install

如下提示则安装完成

INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
  1. 创建REDIS服务
    进入到utils目录,然后运行install_server.sh 运行这个会询问你几个问题,包括
    指定redis的端口号
    指定redis的配置文件
    指定redis的日志文件
    指定redis的数据目录文件
    指定redis的可执行目录文件
    均默认回车即可
cd /opt/redis/utils
./install_server.sh

提示Installation successful!则安装完成。
完成之后,redis的服务就添加完毕了,服务名为redis_6379

  1. 修改配置
    查看redis的配置文件/etc/redis/6379.conf
    其中主要的参数:
    bind:绑定的ip地址
    port:监听端口号
    pidfile:pid文件名
    dir:数据文件目录
    logfile:日志文件地址
    requirepass:设置密码
    protected-mode:保护模式
    daemonize:守护进程
vi /etc/redis/6379.conf

注释掉ip绑定,开启远程连接

# bind 127.0.0.1

解开requirepass的注释,设置一个访问密码

requirepass xx123

然后即可使用使用redis-cli连接redis

# 输入密码
auth xx123
# set一个key value expire
set test 123 100
# 获取一个get key
get test
# 更新生存时间expire key seconds
expire test -1

若出现异常可在配置文件中关闭protected-mode保护模式,并且把daemonize设为yes作为守护进程在后台跑。

protected-mode no
daemonize yes

至此,基于CentOS 7 的MySQL+Tomcat+Redis的JavaWeb环境已安装配置完毕。

# 开启服务
systemctl start tomcat
systemctl start mysqld
systemctl start redis_6379
# 停止服务
systemctl stop tomcat
systemctl stop mysqld
systemctl stop redis_6379
# 重启服务
systemctl restart tomcat
systemctl restart mysqld
systemctl restart redis_6379
# 查看服务状态
systemctl status tomcat
systemctl status mysqld
systemctl status redis_6379

基于安全管理的前提条件下,每个程序最好都单独建立系统账号和组用于自身的运行。

例如:安装Tomcat前,单独建立系统帐号和组用于运行Tomcat。
首先,创建一个新的tomcat组:

groupadd tomcat

然后,创建一个新的tomcat用户,指定home目录 /opt/tomcat ,并将tomcat用户加入tomcat组:

useradd -M -s /bin/nologin -g tomcat -d /opt/tomcat tomcat

接下来,配置目录的归属:

chown -R tomcat:tomcat /opt/tomcat

五、安装配置SRS

下载开源srs流媒体服务器,源地址太慢,使用镜像下载

git clone https://gitee.com/winlinvip/srs.oschina.git srs &&
cd srs/trunk && git remote set-url origin https://github.com/ossrs/srs.git && git pull

进行安装

./configure && make

修改配置文件

vim srs/trunk/conf/hls.conf
修改hls_path的路径,默认路径为./objs/nginx/html,这里修改为/root/ossrs/hls_path(自定义)

通过nginx配置访问/root/ossrs/hls_path
hls_path的作用:直播中会将m3u8文件和ts文件输出hls_path,有了m3u8文件就可以在启动端播放了。
m3u8是一个包含许多ts视频路径和格式说明集合的文本文件,ts是一种视频格式,是直播中一个小的视频切片。

m3u8播放地址为:http://服务器ip/live/livestream.m3u8,
80为tomcat服务器端口,live为虚拟路径可随意自定义SRS会/root/ossrs/hls_path下自动创建,livestream为自定义m3u8文件名

对于web服务器而言livestream.m3u8只是一个文件,我们将hls_path设置到web服务器能够访问到即可。

启动SRS

./objs/srs -c conf/srs.conf

SRS相关优化配

vim srs/trunk/conf/hls.conf
listen              1935;
max_connections     1000;

http_server {
#是否启用HTTP流媒体服务,http_server必须存在 ,1935端口需要配置防火墙放行
    enabled         off;
#    listen          80;
#    dir             /root/ossrs/hls_path;
}

vhost __defaultVhost__ {
    #最小延迟打开,默认是打开的,该选项打开的时候,mr默认关闭。
    min_latency     on;

    #Merged-Read,针对RTMP协议,为了提高性能,SRS对于上行的read使用merged-read,即SRS在读写时一次读取N毫秒的数据
    mr {
        enabled     off;
        #默认350ms,范围[300-2000]
        #latency     350;
    }

    #Merged-Write,SRS永远使用Merged-Write,即一次发送N毫秒的包给客户端。这个算法可以将RTMP下行的效率提升5倍左右,范围[350-1800]
    mw_latency      100;
    #enabled         on;
    #https://github.com/simple-rtmp-server/srs/wiki/v2_CN_LowLatency#gop-cache
    gop_cache       off;
    #配置直播队列的长度,服务器会将数据放在直播队列中,如果超过这个长度就清空到最后一个I帧
    #https://github.com/simple-rtmp-server/srs/wiki/v2_CN_LowLatency#%E7%B4%AF%E7%A7%AF%E5%BB%B6%E8%BF%9F
    #queue_length    10;

    #http_flv配置
    http_remux {
        enabled     on;
        mount [vhost]/[app]/[stream].flv;
        hstrs   on;
    }

    hls {
        enabled         on;
        hls_path        /root/ossrs/hls_path;
        hls_fragment    10;
        hls_window      60;
    }
}

Nginx安装及相关SRS配置

更新

yum -y update

安装nginx

yum -y install nginx

启动重载

nginx -s reload

启动Nginx产生报错:nginx: [error] open() “/run/nginx.pid” failed (2: No such file or directory)

[root@nginx nginx]# nginx -s reload
nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)

通过执行sudo命令即可

[root@nginx nginx]# sudo nginx
[root@nginx nginx]# nginx -s reload

nginx相关配置文件修改
修改nginx.conf配置文件,优化配置

vim /etc/nginx/nginx.conf
# user默认www改为root,否者nginx无权限访问/root目录下资源文件
user root;
# no of cpu * 2
worker_processes 4;
worker_rlimit_nofile 25000;
pid /run/nginx.pid;

events {
        use epoll;
        #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
        worker_connections 20000;
        multi_accept on;
}

http {

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
        #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;

        #连接超时时间
        keepalive_requests 100;
        #keepalive_timeout 65;
        keepalive_timeout 0;

        types_hash_max_size 2048;
        open_file_cache max=100;

        #设定请求缓冲
        server_names_hash_bucket_size  128;
        client_header_buffer_size   32K;
        large_client_header_buffers  4 32k;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        #开启gzip压缩,降低传输流量
        gzip  on;
        gzip_min_length    1k;
        gzip_buffers    4 16k;
        gzip_http_version  1.1;
        gzip_comp_level  2;
        gzip_types  text/plain application/x-javascript text/css  application/xml;
        gzip_vary on;

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

在/etc/nginx目录下新建sites-enabled文件夹并在sites-enabled文件夹下新建http.conf配置文件并编辑

cd /etc/nginx
mkdir sites-enabled
cd sites-enabled
touch http.conf
server {
    listen 80;
    server_name www.xypsp.com;

    location ~* \.m3u8{
       root /root/ossrs/hls_path;
       add_header Access-Control-Allow-Origin *;
    }

    location ~* \.ts{
       root /root/ossrs/hls_path;
       add_header Access-Control-Allow-Origin *;
    }

}

注意 root 为SRS中配置的hls_path路径/root/ossrs/hls_path

重载nginx

nginx -s reload

rtmp 推流(OBS),http拉流(VLC),测试一下

  • 推流地址为: rtmp://服务器ip:1935/live/5M.m3u8
  • 拉流地址为:
  • http://www.xypsp.com/live/5Mm3u8
  • 或者通过服务器ip:
  • http://服务器ip/live/5M.m3u8
  • live/5M.m3u8 皆为自定义SRS自动创建

关于延迟

由于现在SRS是配置的HLS协议,延迟上官方的解释在60秒内,实际嘛肯定会在一分钟以后,可以通过配置RTMP协议可以有效的降低至3-5秒


本文链接: http://www.dtmao.cc/news_show_400025.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?