我们在阿里云上搭建流媒体服务器, 服务端环境为 ubuntu14.04.

安装

首先下载依赖:

  • pcre 库(perl兼容正则表达式库)

官网: www.pcre.org
下载地址: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/


下载并解压到根目录:

1
2
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.37.tar.gz
tar zxvf pcre-8.37.tar.gz
  • zlib 库

官网: www.zlib.net

下载当前最新版本并解压到根目录:

1
2
wget http://sourceforge.net/projects/libpng/files/zlib/1.2.8/zlib-1.2.8.tar.gz
tar zxvf zlib-1.2.8.tar.gz

下载 nginx 最新版本并解压到根目录:

1
2
wget http://nginx.org/download/nginx-1.9.9.tar.gz
tar zxvf nginx-1.9.9.tar.gz

下载 nginx-rtmp 模块:

1
2
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
unzip master.zip

编译并安装:

切入 Nginx 的目录运行配置命令并编译安装:

1
2
./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_dav_module --with-http_flv_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-pcre=../pcre-8.37 --with-zlib=../zlib-1.2.8 --with-debug --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --add-module=../nginx-rtmp-module-master
make && make install

关于各个配置参数的备注说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
--prefix=/usr/local/nginx # 配置 nginx 安装目录, 默认位置在 /usr/local/nginx
--pid-path=/var/run/nginx.pid # 配置 pid 文件位置, 默认在 logs 目录
--lock-path=/var/lock/nginx.lock # 配置 lock 文件位置, 没人在 logs 目录
--with-http_ssl_module # 开启 http ssl 模块, 以支持 https 请求
--with-http_dav_module # 开启 WebDAV 扩展动作模块, 可以为文件和目录指定权限
--with-http_flv_module # 支持对 flv 文件的拖动播放
--with-http_realip_module # 支持显示真实来源的 ip 地址
--with-http_gzip_static_module # 在预压缩文件前做检查, 以免重复压缩
--with-http_stub_status_module # 取得 nginx 运行状态
--with-mail # 允许 pop3/imap4/smtp 代理模块
--with-mail_ssl_module # 允许 pop3/imap4/smtp 使用 ssl/tls
--with-pcre=../pcre-8.37 # 这里是未安装的 pcre 库路径, 即刚才解压的路径
--with-zlib=../zlib-1.2.8 # 这里是未安装的 zlib 库路径, 即刚才解压的路径
--with-debug # 开启调试日志
--http-client-body-temp-path=/var/tmp/nginx/client # 客户端请求临时位置
--http-proxy-temp-path=/var/tmp/nginx/proxy # 设置 http proxy 临时文件路径
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi # 设置 http fastcgi 临时文件路径
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi # 设置 uwsgi 临时文件路径
--http-scgi-temp-path=/var/tmp/nginx/scgi # 设置 scgi 临时文件路径
--add-module=../nginx-rtmp-module-master # 安装 nginx-rtmp 模块, 路径为刚才解压的位置

配置

1
vim /usr/local/nginx/conf/nginx.conf

在文件末尾添加对 rtmp 协议的配置:

1
2
3
4
5
6
7
8
9
rtmp {
listen 1935;
chunk_size 4096;

application live {
live on;
record off;
}
}

注意要放在文件的根位置, 不要写在 http 的花括号中.

以上配置仅供测试, 详细配置需要参考 nginx-rtmpwiki.

运行

运行服务器:

1
sudo /usr/local/nginx/sbin/nginx

运行时会占用 80 端口和 1935 端口.

退出:

1
sudo /usr/local/nginx/sbin/nginx -s quit

测试

我们使用 obs 录屏通过流媒体服务器转发 b 站来测试.

需要额外准备两个条件:

  1. obs 客户端;
  2. b站直播间.

我们先下载安装配置 obs 客户端:
obs 的官网地址: https://obsproject.com/.

obs 是一个用于直播录制的跨平台自由软件, 有针对 window, mac 和 linux 平台的发行版本. 对 linux 平台, ubuntu 上有官方构建版本, Arch Linux, OpenSUSE, Gentoo 有第三方构建版本, 其余发行版需要自己编译.

我们使用的客户端环境是 ubuntu 15.04, 参见 obs 官方说明安装 obs 客户端:

obs 依赖 FFmpeg, 如果尚未安装需要先安装 FFmpeg:

1
2
sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
sudo apt-get update && sudo apt-get install ffmpeg

添加 obs 的源然后安装:

1
2
sudo add-apt-repository ppa:obsproject/obs-studio
sudo apt-get update && sudo apt-get install obs-studio

运行 obs, 在设置-串流中设置串流类型为自定义, 在 URL 一栏填写阿里云服务器 ip, 流密钥一栏填入 test(使用前文默认配置时).

打开 http://live.bilibili.com/ , 进入自己的直播间(如果没有权限需要事先申请, b 站直播申请需要实名认证), 开始直播后 会弹出包含直播码的对话框.

修改 nginx 的配置文件(/usr/local/nginx/conf/nginx.conf):

record off 后添加一行:

1
push rtmp://live-send.acg.tv/live/<你的直播码>;

重启 nginx 服务器.

回到 obs 界面, 点击开始录制和开始串流按钮, 如果一切正常, 你的屏幕画面应该会出现在直播间的屏幕上.

在上述配置文件中还可以添加多个 pushes, 从而实现向多个直播平台推流.

参考资料