本文的编译环境以lnmp1.0为例:
1、登录SSH,下载如下模块:
wget -c https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ostube/Nginx-accesskey-2.0.3.tar.gz wget -c https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ostube/nginx_mod_h264_streaming-2.2.7.tar.gz wget -c http://db.ci/wp-content/uploads/2013/11/nginx-rtmp-module.tar.gz
2、解压
tar zxvf Nginx-accesskey-2.0.3.tar.gz tar zxvf nginx_mod_h264_streaming-2.2.7.tar.gz tar zxvf nginx-rtmp-module.tar.gz
3、将nginx的编译参数修改成如下形式
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --with-ipv6 --with-http_secure_link_module --add-module=$HOME/nginx_mod_h264_streaming-2.2.7 --add-module=$HOME/nginx-accesskey-2.0.3 --add-module=$HOME/nginx-rtmp-module --add-module=$HOME/nginx-rtmp-module/hls
4、防盗链配置nginx.conf
location ~ \.flv$ {
accesskey on;
accesskey_hashmethod md5;
accesskey_arg "key";
accesskey_signature "password$remote_addr";
secure_link $arg_st,$arg_e;
secure_link_md5 password$uri$arg_e;
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 403;
}
flv;
}
location ~ \.mp4$ {
accesskey on;
accesskey_hashmethod md5;
accesskey_arg "key";
accesskey_signature "password$remote_addr";
secure_link $arg_st,$arg_e;
secure_link_md5 password$uri$arg_e;
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 403;
}
mp4;
}
php代码:
<?php
$secret = 'password'; # 密钥
$path = '/download/she.flv'; # 下载文件
$ipkey= md5("password".$_SERVER['REMOTE_ADDR']); #加密IP
# 下载到期时间,time是当前时间,300表示300秒,也就是说从现在到300秒之内文件不过期
$expire = time()+300;
# 用文件路径、密钥、过期时间生成加密串
$md5 = base64_encode(md5($secret . $path . $expire, true));
$md5 = strtr($md5, '+/', '-_');
$md5 = str_replace('=', '', $md5);
# 加密后的下载地址
echo '<a href=http://s1.xsdou.com/download/she.flv?key='.$ipkey.'&st='.$md5.'&e='.$expire.'>she.flv</a>';
echo '<br>http://s1.xsdou.com/download/she.flv?key='.$ipkey.'&st='.$md5.'&e='.$expire;
?>
5、配置流媒体服务器
修改nginx主配置文件,配置虚拟主机(这里我们暂时只配置和测试点播,直播请看借鉴地址):
user nobody nobody;
worker_processes 4;
error_log logs/nginx_error.log info;
pid logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
}
#rtmp_auto_push on;
rtmp {
server {
listen 1935;
application vod {
play /opt/media/nginxrtmp/flv;
}
}
}
http
{
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 50m ;
limit_conn_zone $binary_remote_addr zone=perip:256k;
limit_conn_log_level notice;
sendfile on;
tcp_nopush on;
keepalive_timeout 6000;#测试并发临时调大
tcp_nodelay on;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
#log format
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#支持flv
server
{
listen 8081;
server_name 192.168.0.33;
root /opt/pub/media/nginx; #http协议时候,flv视频位置
location ~ .*.(flv|swf|mp4|wma|wmv)$ {
valid_referers none blocked *.xxxx.com http://localhost;
if ($invalid_referer) {
return 403;
}
}
location ~ \.flv$ {
flv;
limit_conn one 20;#限制客户端并发连接数
limit_rate 200k;#限制每客户端最大带宽
}
location ~ \.mp4$ {
flv;
limit_conn one 20;
limit_rate 200k;
}
access_log logs/nginxflv_access.log main;
}
server
{
listen 8082;
server_name 192.168.0.33;
index index.html;
location / {
root /opt/pub/media/nginx-rtmp;
}
access_log logs/nginxrtmpflv_access.log main;
}
server {
listen 8080;
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root /opt/pub/soft/nginx-rtmp-module;
}
location / {
root /opt/pub/soft/nginx-rtmp-module/test/rtmp-publisher;
}
}
http://192.168.0.33:8080/stats 查看rtmp客户请求信息
http://192.168.0.33:8081/index.html 查看nginx http协议时候的flv视频
http://192.168.0.33:8082/index.html 查看nginx rtmp协议时候的flv视频
https://github.com/arut/nginx-rtmp-module