基于阿里云产品的视频方案实验(三)-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

2016-02-16 14:41:58 12832 0

利用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



取消 提交回答
全部回答(0)
相关问答

162

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 226271浏览量 回答数 162

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 337130浏览量 回答数 8

111

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 295716浏览量 回答数 111

18

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 646908浏览量 回答数 18

33

回答

Win Server 2003-2016 加密勒索事件必打补丁合集

妙正灰 2017-05-15 10:44:38 280458浏览量 回答数 33

38

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 259927浏览量 回答数 38

294

回答

Linux Bash严重漏洞修复紧急通知(已全部给出最终修复方案)

qilu 2014-09-25 13:26:50 434669浏览量 回答数 294

249

回答

【史上最详细】阿里云ECS安装wordpress教程

爱映疯wp 2014-03-09 23:55:43 254111浏览量 回答数 249

249

回答

阿里云LNAMP(Linux + Nginx + Apache + MySQL + PHP)环境一键安装脚本

云代维 2014-02-14 15:26:06 305729浏览量 回答数 249

24

回答

【精品问答】python技术1000问(1)

问问小秘 2019-11-15 13:25:00 475927浏览量 回答数 24
+关注
0
文章
5
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载