Linux搭建rtmp推流服务器
Linux安装nginx
一般我们都需要先装pcre, zlib,前者为了重写rewrite,后者为了gzip压缩。
1.选定源码目录
cd /usr/local/src
2.安装PCRE库
下载
wget https://netix.dl.sourceforge.net/project/pcre/pcre/8.40/pcre-8.40.tar.gz
解压安装包
tar -zxvf pcre-8.40.tar.gz
进入安装目录
cd pcre-8.40
编译安装
./configure make && make install
查看pcre版本
pcre-config --version
3.安装zlib库
wget https://nchc.dl.sourceforge.net/project/libpng/zlib/1.2.11/zlib-1.2.11.tar.gz tar -zxvf zlib-1.2.11.tar.gz cd zlib-1.2.11 ./configure make && make install
4.安装Nginx
cd /usr/local/ wget http://nginx.org/download/nginx-1.15.3.tar.gz tar -zxvf nginx-1.15.3.tar.gz rm nginx-1.15.3.tar.gz mv nginx-1.15.3 nginx cd nginx/ ./configure --prefix=/usr/local/nginx make & make install
遇到错误,先不管继续以下步骤
添加Nginx环境变量,可以在命令行直接输入Nginx命令
vim /etc/profile
在最后添加Nginx的路径
export NGINX_HOME=/usr/local/nginx export PATH=$PATH:$NGINX_HOME/sbin
重新编译环境变量
source /etc/profile
启动nginx
mkdir /usr/local/nginx/logs cd sbin ./nginx
浏览器输入IP,就会有nginx欢迎界面
重启nginx命令为
nginx -s reload
关闭nginx服务:
killall -9 nginx
遇到的问题
nginx:[emerg] listen()to 0.0.0.0:80, backlog 511 failed (98: Address already in use) . . . nginx:[emerg] sill could not blind()
提示端口已被占用
查看端口占用情况
sudo netstat -ntpl
我的是
tcp6 0 0 :::80 :::* LISTEN 1128/apache2
然后杀死1128的任务
sudo kill 1128
重启Nginx便可
也又可能是防火墙没有打开80端口
打开80端口
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
5.安装Nginx的rtmp拓展
cd /usr/local/nginx
还缺少openssl环境,需要手动安装
sudo apt-get install libssl-dev
如果报错
ERR:1 http://... 404 Not Found
更新一下
apt-get update
再进行安装
sudo apt-get install libssl-dev git clone https://github.com/arut/nginx-rtmp-module.git ./configure --add-module=/usr/local/nginx/nginx-rtmp-module make & make install
6.配置Nginx的rtmp服务站点
vim /usr/local/nginx/conf/nginx.conf
在文件底部添加下面内容
rtmp{ server{ #监听的端口 listen 1935; chunk_size 4000; application tv_file{ #开启实时 live on; #开启hls hls on; #rtmp推流请求路径,文件存放路径 hls_path /usr/local/nginx/html/tv_file; #每个TS文件包含5秒的视频内容 hls_fragment 5s; } } }
在文件中部,修改http的server模块
location/{ root /usr/local/nginx/html; index index.html index.htm }
打开1935端口,建议阿里云
启动nginx
cd /usr/local/nginx/sbin ./nginx
测试:
windows 终端
telnet 服务器地址 1935
遇到的问题:
telnet不可用,
控制面板->程序和功能->启用和关闭Windows功能->勾选Telnet Client
7.推流测试
下载 OBS Studio
下载地址:https://pc.qq.com/detail/4/detail_23604.html
安装完成后,打开软件
在 来源 模块,点击+,媒体源,新建一个,
在本地文件添加一个视频文件上去,
勾选:循环、当源变为活跃状态时重新启动播放、在可用时使用硬件解码
在右下角 控件 模块,点击设置,点击推流
服务:自定义
服务器:rtmp://服务器地址:1935/tv_file
串流密钥:test(这处随便,也就是保存到服务器端的文件名)
开始推流:
然后在服务器段就可以看到 .ts .m3u8文件
cd /usr/local/nginx/html/tv_file ls test-0.ts test-1.ts test-2.ts test.m3u8
8.拉流测试
下载安装 VLC
下载地址 https://www.videolan.org/
点击媒体->打开网络串流
选择网络,在URL里输入 流媒体服务器IP和串流密钥
rtmp://服务器地址:1935/tv_file/test
点击播放
---------------------------------------
没有apt-get命令报错:sudo apt-get:command not found
解决:
wget http://security.ubuntu.com/ubuntu/pool/main/a/apt/apt_1.6.1_amd64.deb
sudo dpkg -i apt_1.6.1_amd64.deb
---------------------------------------------
https://cloud.tencent.com/developer/article/1915375