背景:因工作需要,要研究一些流媒体服务器相关的技术,主要是为了搭建直播所用的服务器,本文是基于CentOS7搭建Red5流媒体服务器,利用OBS推流工具可实现简单的直播、观看功能。

本文主要介绍流媒体服务器red5的搭建,主要就是修改配置和添加到服务。

  • 下载

我们可以直接从github官网下载最新版本的Red5-server,因为我们是在Linux系统搭建的环境,这里选择red5-server-1.0.9-RELEASE.tar.gz。点击跳转下载页面

wKioL1lvMj6Th2uEAAD5wIcoLy4335.png-wh_50

下载完成之后,上传至/use/local路径下,然后就可以开始解压安装了。

[root@bogon ~]# cd /usr/local/
[root@bogon local]# ls
bin  etc  games  include  lib  lib64  libexec  red5-server-1.0.9-RELEASE.tar.gz
sbin  share  src
  • 安装

首先red5是基于java,所以安装之前请先安装jdk,我这里已经安装了jdk1.8

[root@bogon ~]# java -version
openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)

我们继续,把刚才上传的red5-server-1.0.9-RELEASE.tar.gz先解压

tar -zxvf red5-server-1.0.9-RELEASE.tar.gz

解压成功后进入目录

[root@bogon local]# cd red5-server/
[root@bogon red5-server]# ls
commons-daemon-1.0.15.jar  license.txt  red5.bat         red5.service       red5-shutdown.sh       work
conf                       log          red5-debug.bat   red5-service.jar   shutdown.token
install-service.bat        plugins      red5-debug.sh    red5.sh            uninstall-service.bat
lib                        red5         red5-server.jar  red5-shutdown.bat  webapps

进入目录之后我们可以看到red5的目录结构,顾名思义conf为配置文件存放地址,red5.sh为red5的启动文件,我们进入conf文件夹,修改red5的配置文件。

vi conf/red5.properties

会打开配置文件:

# Socket policy
policy.host=0.0.0.0
policy.port=843
# HTTP
http.host=0.0.0.0
http.port=5080
https.port=5443
http.URIEncoding=UTF-8
http.max_headers_size=8192
http.max_keep_alive_requests=-1
http.max_threads=20
http.acceptor_thread_count=10
http.processor_cache=20
# RTMP
rtmp.host=0.0.0.0
rtmp.port=1935
rtmp.io_threads=16
rtmp.send_buffer_size=65536
rtmp.receive_buffer_size=65536
......(后面还有很多,这里就不贴出来了)

我们需要修改http.host和rtmp.host为电脑实际的IP地址,修改完成之后保存退出。

修改完成之后我们可以直接通过命令启动red5服务。

./red5.sh

好的。我们可以看到控制台已经开始飙起了日志,几秒之后看到日志停了,就像这样:

......(前面还有很多,这里就不贴出来了)
[INFO] [Loader:/oflaDemo] org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/red5-web.xml]
[INFO] [Loader:/oflaDemo] org.red5.server.Context - Setting parent bean factory as core
[INFO] [Loader:/oflaDemo] org.red5.server.scope.WebScope - Set server [Server@42441ae2map['/chat' -> 'default', '/live' -> 'default', '/vod' -> 'default', '/' -> 'default', 'localhost:5080/installer' -> 'default', 'localhost/installer' -> 'default']]
[INFO] [Loader:/oflaDemo] org.red5.server.Server - Add mapping global: default host:  context: oflaDemo
oflaDemo appStart
[INFO] [pool-4-thread-1] org.red5.server.tomcat.WarDeployer - Deploy wars with app start

此时我们开启端口,测试一下。

firewall-cmd --permanent --zone=public --add-port=1935/tcp
firewall-cmd --permanent --zone=public --add-port=5080/tcp
firewall-cmd --reload
  • 测试

端口开启完毕,试一下能否进入red5的管理界面。地址为你的IP加上端口号:5080

wKiom1lwJiKBqiLyAADsoZchx0g474.png-wh_50

进入成功,说明red5的http服务是没有问题的.

  • 推流测试

我们来测试一下直播吧,利用开源推流工具OBS。

wKiom1lwJ-eScN-nAABO7M79vFI943.png-wh_50

wKioL1lwKAHwG4udAATDbvc6WCA858.png-wh_50

图1设置推流地址为RED5服务器地址,看图2的右下角,绿色灯亮起表示推流成功。

  • 拉流测试

拉流测试这次我使用的是VLC,打开网络串流中输入我们的拉流地址:rtmp://IP:1935/oflaDemo/串流码。

wKiom1lwOKjBSyiQABGg_EOzk6Y314.png-wh_50

好的,没有问题,拉流成功。

  • 添加red5到系统启动项

但是,仅仅启动成功还没有达到我的目的,我可不想每次启动服务都那么麻烦,所以,我们要把red5的服务添加到启动项中。

vi /etc/init.d/red5

在/etc/init.d/目录中新建red文件,并添加以下内容:

#!/bin/bash
# For RedHat and cousins:
# chkconfig: 2345 85 85
# description: Red5 flash streaming server
# processname: red5
# Created By: BoTao Zhao (botaozhao@foxmail.com)

PROG=red5
RED5_HOME=/usr/local/red5-server
DAEMON=$RED5_HOME/$PROG.sh
PIDFILE=/var/run/$PROG.pid

# Source function library
. /etc/rc.d/init.d/functions

[ -r /etc/sysconfig/red5 ] && . /etc/sysconfig/red5

RETVAL=0

case "$1" in
	start)
	echo -n $"Starting $PROG: "
	cd $RED5_HOME
	$DAEMON >/dev/null 2>/dev/null &
	RETVAL=$?
	if [ $RETVAL -eq 0 ]; then
		echo $! > $PIDFILE
		touch /var/lock/subsys/$PROG
	fi
	[ $RETVAL -eq 0 ] && success $"$PROG startup" || failure $"$PROG startup"
	echo
	;;
	stop)
	echo -n $"Shutting down $PROG: "
	killproc -p $PIDFILE
	RETVAL=$?
	echo
	[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$PROG
	;;
	restart)
	$0 stop
	$0 start
	;;
	status)
	status $PROG -p $PIDFILE
	RETVAL=$?
	;;
	*)
	echo $"Usage: $0 {start|stop|restart|status}"
	RETVAL=1
esac

exit $RETVAL

添加到服务

chmod +x /etc/rc.d/init.d/red5    
chkconfig --add red5    
chkconfig red5 on

添加到服务之后可以通过service red5 start来启动red5服务,service red5 stop关闭服务,是不是非常方便了。

  • 测试直播延迟

为了测试直播延迟,我在obs中开启了显示器获取,左侧是拉流的画面,右侧是电脑本地的时间。

wKiom1lwTi3BPoDuAAvEjEcM2Wo074.png-wh_50

可见,延迟在2-3S之间。注:该测试在局域网中,非外网。

好了,在CentOS7环境下安装配置流媒体服务器Red5到此结束了。当然测试推流和拉流还可以用red5自带的demo去测试,这里就不再啰嗦了。