Linux centOS下搭建RTMP服务器的具体步骤
以下的所需的安装包,可直接在linux系统终端下载,也可从其他地方下载之后拷到对应目录下解压使用,遇到连接不到国外网站时可改变压缩包地址
1、安装依赖包:
#yum install glibc.i686
#yum –y update
#yum -y install gcc glibc glibc-devel make nasm pkgconfig lib-devel openssl-devel expat-devel gettext-devel libtool mhash.x86_64 perl-Digest-SHA1.x86_64 gcc-c++
2、安装git工具://新安装的软件都放在新建的softsource文件夹下
#mkdir softsource
#cd softsource
#wget http://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.gz
#tar xzvf git-latest.tar.gz
#cd git-2013-08-28
#autoconf
#./configure
#make && make install
# git --version
git version 1.8.1.GIT
#cd .. 目前直接回去rtmp目录, 没有在上一层安装FFmpeg
3、安装ffmpeg及其依赖包:
++++++++Yasm+++++++++++
#wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
#tar xzvf yasm-1.2.0.tar.gz
#cd yasm-1.2.0
#./configure
#make
#make install
#cd ..
++++++++x264+++++++++++
#git clone git://git.videolan.org/x264
#cd x264
#./configure --enable-shared
#make
#make install
#cd ..
++++++++LAME+++++++++++ (#wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz)
#wget http://kakola.googlecode.com/files/lame-3.98.4.tar.gz
(安装lame-3.98.4.tar.gz, 以免在第三步的时候出现ERROR:libmp3lame >= 3.98.3 not found错误, 需要提前安装lame.)
#tar xzvf lame-3.98.4.tar.gz
#cd lame-3.98.4
#./configure --enable-nasm
#make
#make install
#cd ..
++++++++libogg+++++++++++
#wget http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz
#tar xzvf libogg-1.3.0.tar.gz
#cd libogg-1.3.0
#./configure
#make
#make install
#cd ..
++++++++libvorbis+++++++++++
#wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
#tar xzvf libvorbis-1.3.3.tar.gz
#cd libvorbis-1.3.3
#./configure
#make
#make install
#cd ..
++++++++libvpx+++++++++++
#wget http://webm.googlecode.com/files/libvpx-v1.1.0.tar.bz2
#tar -vxjf libvpx-v1.1.0.tar.bz2
#cd libvpx-v1.1.0
#./configure --enable-shared
#make
#make install
#cd ..
++++++++FAAD2+++++++++++
#wget http://downloads.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
#tar zxvf faad2-2.7.tar.gz
#cd faad2-2.7
#./configure
#make
#make install
#cd ..
++++++++FAAC+++++++++++ #wget http://sourceforge.net/projects/faac/files/faac-src/faac-1.28/faac-1.28.tar.gz/download (http://172.16.1.100/faac-1.28.tar.gz)
#tar zxvf faac-1.28.tar.gz
#cd faac-1.28
#cd common/mp4v2/
#vi mpeg4ip.h
126G—定位到126行后删除这一行,保持退出
回到faac-1.28目录下:cd ..
Cd ..
#./configure
#make
#make install
#cd ..
++++++++Xvid+++++++++++
#wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
#tar zxvf xvidcore-1.3.2.tar.gz
#cd xvidcore/build/generic
#./configure
#make
#make install
#cd ..
++++++++ffmpeg+++++++++++
#git clone git://source.ffmpeg.org/ffmpeg
#cd ffmpeg
#./configure --enable-version3 --enable-libvpx --enable-libfaac --enable-libmp3lame --enable-libvorbis --enable-libx264 --enable-libxvid --enable-shared --enable-gpl --enable-postproc --enable-nonfree --enable-avfilter --enable-pthreads
#make && make install
#cd ..
++++++++ zlib+++++++++++
Wget http://www.zlib.net/zlib-1.2.8.tar.gz
#tar xzvf zlib-1.2.8.tar.gz
#cd zlib-1.2.8
#./configure -prefix-/usr/local/zlib
#make && make install
************************************************
修改/etc/ld.so.conf如下:
include ld.so.conf.d/*.conf
/lib
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
/opt/ffmpeg/lib
修改后执行
#ldconfig
OpenSSL
# wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
# tar -zxvf openssl-1.0.1c.tar.gz
# cd openssl-1.0.1c.tar.gz
# ./config
# make
# make install
会出现语法错误 POD document had syntax errors at /usr/bin/pod2man line 69. Make
解决办法:rm /usr/bin/pod2man 删除此文件(可能是因为不兼容的问题)
4. nginx安装
# wget http://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
然后使用gedit 打开进行编辑:
#!/bin/sh echo "configure start ..."
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--error-log-path=/usr/local/nginx/logs/error.log \
--add-module=../nginx_mod_h264_streaming-2.2. \
--with-pcre=../pcre-8.12 \
--with-zlib=../zlib-1.2. \
--with-http_dav_module \
--with-http_flv_module \
--with-http_stub_status_module \
--without-http_scgi_module \
--without-http_uwsgi_module \
--without-http_gzip_module \
--without-http_ssi_module \
--without-http_proxy_module \
--without-http_memcached_module \
--without-http_empty_gif_module \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module \
--with-http_ssl_module \
--with-openssl=../openssl-1.0.1c \
--add-module=../nginx-rtmp-module \
--with-cc-opt=-I/opt/ffmpeg/include \ echo "configure end!"
【保存并退出】
# chmod +x nginx_configure.sh (此步骤执行后可能会出错 缺少什么包就添加什么包)
# ./nginx_configure.sh
# make
# make install
备注:
在执行make的时候可能出现错误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 source
with 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.
解决方法:
a)可以安装ssl
apt-get install openssl
apt-get install libssl-devel
(ubuntu下的命令 centos下用yum -y install openssl openssl-devel)
b)也可以添加
--with-openssl=<path>
在执行make的时候可能出现错误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
解决方法:在nginx_mod_h264_streaming-2.2.7中修改
那么将src/ngx_http_streaming_module.c文件中以下代码删除或者是注释掉就可以了:
/* TODO: Win32 */
if (r->zero_in_uri)
{
return NGX_DECLINED;
}
在执行make的时候可能出现错误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
解决方法:在nginx的安装目录
# vim objs/Makefile (修改objs/Makefile文件, 去掉其中的"-Werror"), 然后就能够正常编译了.
然后在make就能过了。
安装过程中又下载了nginx_mod_h264_streaming-2.2.7 pcre-8.12 两个文件放入softsource文件夹中
******************************************
5、配置Nginx相关模块
1、安装好了之后终端进入 nginx安装的目录 : /usr/local/nginx/html/
然后新建目录:nginx-rtmp-module (新建的命令为 mkdir 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/
拷贝的时候 会报错因为 test文件是个文件夹所以 需要递归拷贝 在cp后边加上-r就可以了
2.
拷贝之后就需要修改 /usr/local/nginx/nginx.conf
nginx.conf 配置文件已经配好!(也可直接把rtmp那一块的配置直接拷贝到原来的nginx.conf文件中,这样就不需要太多的配置)
#user nobody;
worker_processes ; #error_log logs/error.log;
#error_log logs/error.log notice;
error_log logs/error.log info; pid logs/nginx.pid;
worker_rlimit_nofile ; events {
use epoll;
worker_connections ;
} #切换自动推送(多 worker 直播流)模式。默认为 off
rtmp_auto_push on; #当 worker 被干掉时设置自动推送连接超时时间。默认为 毫秒
rtmp_auto_push_reconnect 1s; #设置用于流推送的 UNIX 域套接字目录。默认为 /tmp
#rtmp_socket_dir /var/sock; rtmp {
server {
listen ; #点播配置
application vod {
play /opt/media/nginxrtmp/flv;
} #直播流配置
application live {
live on;
#为 rtmp 引擎设置最大连接数。默认为 off
max_connections ; # default recorder
record all;
record_path /var/rec; recorder audio {
record audio;
record_suffix -%d-%b-%y-%T.flv;
} recorder chunked {
record all;
record_interval 15s;
record_path /var/rec/chunked;
} #on_publish http://localhost:8080/publish;
#on_play http://localhost:8080/play;
#on_record_done http://localhost:8080/record_done; #rtmp日志设置
#access_log logs/rtmp_access.log new;
#access_log logs/rtmp_access.log;
#access_log off; } #HLS协议支持
#application hls {
#live on;
#hls on;
#hls_path /tmp/app;
#hls_fragment 5s;
#} application hls{ live on;
hls on;
hls_path /usr/local/nginx/html/app;
hls_fragment 1s;
} }
} http {
include mime.types;
default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on;
#tcp_nopush on; #keepalive_timeout ;
keepalive_timeout ; #gzip on; server {
listen ;
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #location / {
# root html;
# index index.html index.htm;
#} #error_page /.html; # redirect server error pages to the static page /50x.html
#
error_page /50x.html;
location = /50x.html {
root html;
} # proxy the PHP scripts to Apache listening on 127.0.0.1:
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#} # deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#} location /rtmp-publisher {
root /root/nginx/nginx-rtmp-module/test;
} #location /hls {
#server hls fragments
#types{
#application/vnd.apple.mpegurl m3u8;
#video/mp2t ts;
#} #alias /usr/local/nginx/html;
#expires -;
#} location /hls {
#server hls fragments
types{
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
} #alias /usr/local/nginx/html/app;
alias /usr/local/nginx/html;
expires -;
} location / {
#root /root/nginx/nginx-rtmp-module/test/rtmp-publisher;
types{
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
} root /usr/local/nginx/html/rtmp-publisher;
expires -;
} } # another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen ;
# listen somename:;
# server_name somename alias another.alias; # location / {
# root html;
# index index.html index.htm;
# }
#} # HTTPS server
#
#server {
# listen ;
# server_name localhost; # ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key; # ssl_session_timeout 5m; # ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on; # location / {
# root html;
# index index.html index.htm;
# }
#} #支持flv
server
{
listen ;
server_name localhost;
#root /opt/pub/media/nginx; #http协议时候,flv视频位置
#root /root/nginx/nginx-rtmp-module/test/www;
root /usr/local/nginx/html/www; location ~ .*.(flv|swf|mp4|wma|wmv)$ {
valid_referers none blocked *.xxxx.com http://localhost;
if ($invalid_referer) {
return ;
}
}
location ~ \.flv$ {
flv;
#limit_conn one ;#限制客户端并发连接数
limit_rate 200k;#限制每客户端最大带宽
}
location ~ \.mp4$ {
flv;
#limit_conn one ;
limit_rate 200k;
}
#access_log logs/nginxflv_access.log main;
} server
{
listen ;
server_name localhost;
index index.html;
location / {
#root /opt/pub/media/nginx-rtmp;
root /root/nginx/nginx-rtmp-module/test/rtmp-publisher;
}
#access_log logs/nginxrtmpflv_access.log main;
} server {
listen ;
server_name localhost;
index player.html; location /stat {
rtmp_stat all;
rtmp_stat_stylesheet /root/nginx/nginx-rtmp-module/stat.xsl;
}
location /stat.xsl {
root /root/nginx/nginx-rtmp-module;
} location /rtmp-publisher {
root /usr/local/nginx/html/test/rtmp-publisher;
} location / {
root /root/nginx/nginx-rtmp-module/test/rtmp-publisher;
}
} }
如果出现端口 wait_CLOSE
就在 /etc/sysctl.conf中添加
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
然后让配置生效
/sbin/sysctl -p
(以上的命令都是在根目录执行的)
6、根据nginx的配置文件的中的配置设置端口号 (此步骤 暂不清楚 不过可以直接将防火墙全部关闭,service firewalld stop)
#vi /etc/sysconfig/iptables (此文件可以自己创建然后在网上找相关的代码拷进去)
开放8081端口 (进入nginx的nginx.conf中设置端口为8081)
#/sbin/service iptables restart
重启防火墙,设置生效
修改防火墙配置文件,所在目录/etc/sysconfig/iptables,在里面增加需要开通的端口号,如下:
1
2 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8088 -j ACCEPT
#增加的代码必须放在以下代码之上,否则不会起作用.
1
2 -A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibite
7、 启动nginx后测试
(如果没有nginx文件夹中没有sbin文件那么可以直接进入nginx文件夹
使用 ./nginx 启动nginx
./nginx -t 测试是否配置成功
./nginx -s reload 重启nginx)
启动命令:
/usr/local/nginx/nginx -c /usr/local/nginx/nginx.conf (能保证rtmp正常运行)
启动命令其实就用
进入#usr/local/nginx/sbin/下 ./nginx 就可以
启动nginx的帮助文档:
#/usr/local/nginx/sbin/nginx -h
#/usr/local/nginx/sbin/nginx –s reload
查看nginx的配置是否正确:
#usr/local/nginx/sbin/nginx –t/
如果配置是正确的会显示如下内容:
Nginx.conf syntax is ok.
Nginx.conf test is successful.
配置成功后使用ffmpeg进行推流
(转发凤凰卫视的直播地址)ffmpeg -re -i rtmp:/live.hkstv.hk.lxdns.com/live/hks -c:a aac -ac 1 -strict -2 -b:a 64k -c:v libx264 -f flv rtmp://192.168.1.75/live/stream
(标准地址格式)ffmpeg -re -i /root/softsource/960x720_30fps.mp4 -f flv rtmp://192.168.1.59/live/stream
Linux centOS下搭建RTMP服务器的具体步骤的更多相关文章
- linux Centos下搭建gitolite服务器
1.安装git sudo yum install git -y 2.添加git管理账号 sudo adduser git 3.将gitolite克隆到本地,并安装 sudo mkdir /var/gi ...
- Windows和Linux环境下搭建SVN服务器
--------------------------Windows下搭建SVN服务器----------------------------- 一.安装SVN服务端 软件包Setup-Subversi ...
- Centos下搭建ftp服务器
完全不用那么麻烦,直接可以用xshell中自带的传输文件功能,下载客户端xftp安装就行,不用配置,可以在windows系统向Linux系统的任何文件地方上传下载文件,简单方便,大大节约时间, vsf ...
- CentOS 下搭建FTP服务器
vsftpd是Linux下比较著名的FTP服务器,搭建FTP服务器当然首选这个.本文介绍了在CentOS 6 4下安装vsftpd.配置虚拟用户登录FTP的过程.正 vsftpd是Linux下比较著名 ...
- Linux系统下搭建DNS服务器——DNS原理总结
2017-01-07 整理 DNS原理 域名到IP地址的解析过程 IP地址到域名的反向域名解析过程 抓包分析DNS报文和具体解析过程 DNS服务器搭建和配置 这个东东也是今年博主参见校招的时候被很多公 ...
- linux环境下搭建osm_web服务器一(Postgresql配置及osm2pgsql原始数据导入):
Postgresql配置及osm2pgsql原始数据导入 2012年,Ubuntu 12.04LTS发布,又一个长效支持版,我们又该更新OpenStreetMap服务器了,这次,将详细在博客中记录配置 ...
- linux环境下搭建solr服务器--单机版
前提需要在安装好jdk和tomcat,本人用的是jdk1.8+tomcat8.5+solr4.10. 第一步:安装linux.jdk.tomcat.(这步都是比较简单的,就不多说了) 第二步:把sol ...
- Linux -- Centos 下配置LNAMP 服务器环境
1.Mysql centos 7 下mysql被替换掉,如有需要请看另一篇: centos 6.5下: yum install mysql mysql-server mysql-devel 启动mys ...
- linux环境下搭建osm_web服务器三(Openlays和slippymap):
Openlays和slippymap 上一步,我们已经有了自己的地图瓦片服务器,现在,开始实现SlippyMap啦! <1>下载释放OpenLayers到 www文件夹 SlippyMap ...
随机推荐
- Devexpress TileNavPane 控件的使用
TileNavPane提供分层水平菜单(最多三层),适用于窗体菜单内容不多或只有几个功能较常用时,风格专业简洁: 将TileNavPane拖到窗体上后,点击右上角的任务箭头,选“Add Button” ...
- js 获取当前日期时间3种格式化方法 yyyy-mm-dd hh:MM:ss
方法一: Date.prototype.format = function (format) { var args = { "M+": this.getMonth() + 1, & ...
- linux查看负载
LINUX下查看负载 1,查看磁盘 df -h 2,查看内存大小 free free [-m|g]按MB,GB显示内存 vmstat 3,查看cpu cat /proc/cpuinfo 只看cpu数量 ...
- html5 定位 获得当前位置的经纬度
if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(showPosition, showError, { // ...
- my sql中join的操作
SQL标准中的Join的类型: 首先,设置表employees和department的数据为: 1.inner join … on操作类型 内连接inner join是基于连接谓词将两张表(如A和 ...
- 生产uuid
uuid生产功能 近端时间要做一个获取唯一流水号的功能,于是有了:ip+starttime+pid+flow的方式. import java.lang.management.ManagementFac ...
- docker在ubuntu14.04下的安装笔记
本文主要是参考官网教程进行ubuntu14.04的安装. 下面是我的安装笔记. 笔记原件完整下载: 链接: https://pan.baidu.com/s/1dEPQ8mP 密码: gq2p
- phpstorm 16.1 注册码
phpstorm 2016.1 的注册与phpstorm 10 相同,可以采用:“服务器注册” 方式进行注册,又快又方便. 服务器注册:http://idea.qinxi1992.cn IDEA 20 ...
- ThinkPHP升级指导
升级指导 http://www.kancloud.cn/manual/thinkphp5/163239 从V5.0.1升级到V5.0.2 从V5.0.1升级到V5.0.2需要注意如下事项: 下列模型属 ...
- XidianOJ 1195 Industry of Orz Pandas
--正文 贪心 排序好慢慢找就好 #include <iostream> #include <cstring> #include <cstdio> #include ...