开发者社区> 问答> 正文

基于阿里云产品的视频方案实验(三)


利用Nginx在ECS搭建RTMP服务器


(一)RTMP流媒体协议及常见技术选型
RTMP(Real Time Messaging Protocol)是常见的流媒体协议,用来传输音视频数据,结合flash,广泛用于直播、点播、聊天等应用,以及pc、移动、嵌入式等平台,是做流媒体开发经常会接触到的协议。
RTMP 最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系Flash Player和RtmpServer,如FMS, Red5, crtmpserver等。RTMP协议可用于实现直播、点播应用,通过FMLE(Flash Media Live Encoder)推送音视频数据至Rtmp Server,可实现摄像头实时直播,如需在各自的应用中实现,就必须自己开发处理采集,编码和协议传输了。
常见的技术选型:
视音频源端(采集端):
FMLE,可以在windows和mac安装;如果已有一些支持RTMP的采集设备,那是最好了;如需在各自的应用中实现,就必须自己开发处理采集,编码和协议传输;


RTMP Server:
FMS:Adobe公司出品的服务器,价格较贵;
Wowza:同样需要授权费,效率和稳定性较高;
Nignx-rtmp-module:nginx的一个第三方模块,支持RTMP协议,开源免费;
Red5:一个开源实现,效率和稳定性都稍微差些,由于它是java实现的,支持跨平台运行;


客户端:
VLC—较为常见的rtmp播放终端。也可以安装其他支持rtmp的播放器;
JW Media Player---一个开源的flash视音频播放器,利用它可以直接在浏览器观看直播;


(二)本实验利用Linux,搭建Nginx服务器,外加nginx-rtmp-module实现RTMP Server。






(A)安装Nginx及nginx-rtmp-module前,需要先安装较多工具包及依赖包,如git / zlib  /Pcre等。


安装Nginx相关模块:
安装模块:
# wget h t t p:/ /h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
# tar zxvf nginx_mod_h264_streaming-2.2.7.tar.gz
# git clone git:/ /github.com/arut/nginx-rtmp-module.git


(B)、安装Nginx相关模块
1. 模块安装
# wget h t t p:/ /h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
# tar zxvf nginx_mod_h264_streaming-2.2.7.tar.gz
# git clone git:/ /github.com/arut/nginx-rtmp-module.git


2. 创建用户和组
# groupadd www
# useradd -g www www


3. nginx安装
# wget h t t p://nginx.org/download/nginx-1.6.0.tar.gz
# tar zxvf nginx-1.6.0.tar.gz
# cd nginx-1.6.0


4.编译安装nginx
在nginx-1.6.0目录下新建文件:nginx_configure.sh
具体nginx_configure.sh文件内容下图所示。




注:右图倒数第二行,第三行是关于ffmpeg推流模块,可参考下节直播推流模块的介绍,先行安装ffmpeg模块。




【保存并退出】
# chmod +x nginx_configure.sh
# ./nginx_configure.sh
# make
# make install


===========================

编译过程中遇到的错误及处理方法


错误1:
adding module in ../nginx_mod_h264_streaming-2.2.7+ ngx_http_h264_streaming_module was configured adding module in ../nginx-rtmp-module + ngx_rtmp_module was configured checking for OpenSSL library ... not found
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library into the system, or build the OpenSSL library statically from the sourcewith nginx by using --with-openssl=<path> option.
configure end!
root@ubuntu:/home/song/nginx-t/nginx-1.6.0# make
make: *** No rule to make target `build', needed by `default'.  Stop.
解决方法:安装ssl
apt-get install openssl
apt-get install libssl-dev


错误2:
/root/nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c: In function ‘ngx_streaming_handler’:
/root/nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c:158: error: ‘ngx_http_request_t’ has no member named ‘zero_in_uri’
make[1]: *** [objs/addon/src/ngx_http_h264_streaming_module.o] Error 1
make[1]: Leaving directory `/root/nginx-0.8.54’
make: *** [build] Error 2


解决方法:
将src/ngx_http_streaming_module.c文件中以下代码注释掉:


/* TODO: Win32 */
if (r->zero_in_uri)
{return NGX_DECLINED;}


错误3:
../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c: 在函数‘esds_read’中:
../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c:377:16: 错误: 变量‘stream_priority’被设定但未被使用 [-Werror=unused-but-set-variable]
../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c:376:12: 错误: 变量‘stream_id’被设定但未被使用 [-Werror=unused-but-set-variable]
../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c: 在函数‘stsd_parse_vide’中:
../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c:529:22: 错误: 变量‘level_indication’被设定但未被使用 [-Werror=unused-but-set-variable]
../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c:528:22: 错误: 变量‘profile_compatibility’被设定但未被使用 [-Werror=unused-but-set-variable]
../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c:527:22: 错误: 变量‘profile_indication’被设定但未被使用 [-Werror=unused-but-set-variable]
../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c:526:22: 错误: 变量‘configuration_version’被设定但未被使用 [-Werror=unused-but-set-variable]
cc1: all warnings being treated as errors
make[1]: *** [objs/addon/src/mp4_reader.o] 错误 1


解决方法:
# vim objs/Makefile (修改objs/Makefile文件, 去掉其中的"-Werror"), 然后就能够正常编译了.
================================



配置Nginx相关模块
1. 安装好了之后终端进入 nginx安装的目录 : /usr/local/nginx/html/
然后新建目录:nginx-rtmp-module
然后拷贝 之前用于存放下载 nginx 所需资源包的目录 :/root/nginx/nginx-rtmp-module/
拷贝 目录 test 到/usr/local/nginx/html/ 目录下:
# cp /root/nginx-rtmp-module/test /usr/local/nginx/html/nginx-rtmp-module/
# cp /root/nginx-rtmp-module/stat.xsl /usr/local/nginx/html/nginx-rtmp-module/


2. 拷贝之后就需要修改 /usr/local/nginx/nginx.conf 文件
注意右图点播配置路径,以及将直播流配置打开。


启动Nginx相关模块
1.配置好之后就可以开启nginx服务器了。
可以在终端执行:
#service nginx start
开启的时候命令行要这样去启动:
#  /usr/local/ngnix/nginx  –c  /usr/local/nginx/nginx.conf
这样nginx 的rtmp协议流媒体服务器才能用。





将测试的视频文件放置于点播目录下:
/opt/media/nginxrtmp/flv


在电脑端打开VLC播放器,输入点播文件路径:
rtmp://121.43.183.52/vod/football.flv



展开
收起
袖手哥 2016-02-16 14:41:58 13578 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
超大规模性能测试的云端方案及案例分享 立即下载
超大规模性能测试的云端解决方案及案例分享 立即下载
高可用实践:从淘宝到上云的差异 立即下载