搭建基于RTMP协议服务器并推送视频流

RTMP服务器搭建与视频流推送

在这篇文章中,我将详述如何搭建一个RTMP(Real-Time Messaging Protocol)服务器,并使用ffmpeg技术进行本地视频的推流或者进行直播推流。

部署前的准备

安全组防火墙开放1935端口并安装ffmpeg

sudo yum update -y
sudo yum install ffmpeg ffmpeg-devel -y

搭建基于NGINX的RTMP直播服务器

安装wget

yum install wget -y

安装 gcc gcc-c++

yum install gcc gcc-c++ -y

安装PCRE库

cd /usr/local/
wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.33/pcre-8.33.tar.gz
tar -zxvf pcre-8.33.tar.gz
cd pcre-8.33
./configure
make && make install

安装openssl

cd /usr/local/ 
wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz 
tar -zxvf openssl-1.0.1j.tar.gz 
cd openssl-1.0.1j
./config
make && make install

如果提示You need Perl 5,则输入下面这个命令:

yum install Perl 5 -y

安装zlib

cd /usr/local/
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
./configure
make && make install

下载nginx-rtmp-module

cd /usr/local/
yum install git -y
git clone https://github.com/arut/nginx-rtmp-module.git 

安装nginx

NGINX的安装与配置-铭心博客
NGINX的安装与配置-铭心博客
3年前
764121

修改nginx配置文件

http{前加入:

rtmp {
server {
listen 1935; #监听的端口
chunk_size 4000;
application mxvideo {#rtmp推流请求路径 (切记路径错了会推不上流)
live on; #开启实时
hls on; #开启hls
hls_path /usr/local/src/nginx/html/mxvideo; #rtmp推流请求路径,文件存放路径
hls_fragment 5s; #每个TS文件包含5秒的视频内容
}
}
}
图片[1]-搭建基于RTMP协议服务器并推送视频流-铭心博客

修改完成后,重启nginx

此时已经成功地在本地启动了一个RTMP服务器,它监听在1935端口。

推拉流

打开obs设置推流

图片[2]-搭建基于RTMP协议服务器并推送视频流-铭心博客

右下角变为绿色方块则推流成功

使用本地播放器拉流

使用VLC播放器或者PotPlayer播放器播放http的m3u8地址。或者是使用支持rtmp协议的播放器拉流。

图片[3]-搭建基于RTMP协议服务器并推送视频流-铭心博客

Docker搭建RTMP服务器并进行本地视频推流

安装Docker的步骤会根据操作系统的不同而变化。下面是在Ubuntu和Centos上安装Docker的命令:

#Ubuntu
sudo apt-get update
sudo apt-get install docker.io

#Centos
sudo yum update -y
sudo yum install docker -y

如果你使用的是其他操作系统,请参照Docker的官方文档进行安装。

下载开源项目nginx-rtmp-docker到你的本地目录

git clone https://github.com/tiangolo/nginx-rtmp-docker.git
cd nginx-rtmp-docker

运行服务器

docker run -d -p 1935:1935 --name=nginx-rtmp tiangolo/nginx-rtmp

此时已经成功地在本地启动了一个RTMP服务器,它监听在1935端口。

使用ffmpeg进行视频推流

你需要有一个视频文件(请自行上传)用于推流。然后,使用以下命令进行推流:

ffmpeg -re -i input.mp4 -c copy -f flv rtmp://localhost/live/stream #input.mp4是你的视频文件,rtmp://localhost/live/stream是你的RTMP服务器地址。
图片[4]-搭建基于RTMP协议服务器并推送视频流-铭心博客

在这个例子中,ffmpeg是用于将视频文件推送(stream)到建立的RTMP服务器。而这个RTMP服务器就是通过Docker运行的nginx-rtmp容器提供的。
docker run -d -p 1935:1935 –name=nginx-rtmp tiangolo/nginx-rtmp命令启动了一个名为”nginx-rtmp”的容器,它监听主机的1935端口。
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://localhost/live/stream命令将名为”input.mp4″的视频文件转换成流,然后推送到”rtmp://localhost/live/stream”。其中”localhost”指的是本地主机,即RTMP服务器所在的主机。“1935″是RTMP协议默认的端口号,如果没有特别指定,就会使用这个端口。”/live/stream”是推流的路径和名称,你可以根据需要自定义。
所以,在URL上看,ffmpeg推流到”rtmp://localhost/live/stream”实际上就是推流到了通过Docker启动的nginx-rtmp容器的1935端口。
简单来说,ffmpeg是推流客户端,而nginx-rtmp容器是流媒体服务器,二者之间通过RTMP协议进行通信。

因为流媒体服务器(nginx-rtmp)和ffmpeg推流端是在服务器(192.168.1.11)上运行,使用windows电脑能够用VLC播放RTMP流,所以执行以下命令:

ffmpeg -re -i forest4kTest.mp4 -c copy -f flv rtmp://192.168.1.11/live/stream

使用本地播放器拉流

使用VLC播放器或者PotPlayer播放器播放RTMP流,或者是使用支持rtmp协议的播放器拉流。

图片[5]-搭建基于RTMP协议服务器并推送视频流-铭心博客

推流脚本

可以配合screen命令来使用

使用脚本

新建pushflow.sh文件

vim pushflow.sh

把下面的代码粘贴进去

出现报错”/bin/bash^M: 坏的解释器: 没有那个文件或目录(bad interpreter: No such file or directory)“使用以下文章进行操作

运行脚本

chmod +x pushflow.sh
sudo bash pushflow.sh
© 版权声明
THE END
喜欢就支持一下吧!
点赞345 分享