技术标签: flv nginx module makefile 服务器 正则表达式
最近研究视频点播服务器的搭建方案,因项目原因笔者只能忍痛割爱舍弃专业的流媒体软件HelixServer、RED5、WMS等专业的流媒体软件当然其中还有不要钱的Darwin。按照坑爹的要求使用web服务器作为视频点播服务器。
经过前期调研发现选择Nginx也不失为一种理想的替代方案,可是网络上的资料大多不够完整和详尽且没有给出在部署过程中产生的错误相应的解决方法,所以笔者只好自己亲自动手整理和编写了一篇完整版安装手记,以供大家借鉴和参考。
一、部署前的环境准备工作
1)检查当前系统是否已经安装zlib、pcre基础软件包
rpm –qa | grep zlib ##Nginx运行需要的函数库
rpm –qa | grep pcre ##与Perl兼容的正则表达式库模块
rpm –qa | grep ssh ##openssh 支持安全的通信
2)准备安装的软体
A)nginx-1.0.5.tar.gz ##运行主程序
B)nginx_mod_h264_streaming-2.2.7.tar.gz ##MP4支持模块
C)nginx-accesskey-2.0.3.diff.bz2 ##资源防盗链支持模块
##wget http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz
D)yamdi-1.4.tar.gz
##渐进式流支持模块(抓取视频资源关键帧实现播放时的随意拖动效果)
E)准备一个播放器
http://blogimg.chinaunix.net/blog/upfile2/100607142612.rar ##flash播放器控件
F)测试资源准备
二、部署步骤
A)安装yamdi
1、解压下载的文件tar –zxvf yamdi-1.8.tar.gz
2、进入解压后的目录cd yamdi-1.8.
3、编译并安装 make && make install
4、使用该软件为视频添加关键帧信息实现拖动效果
具体使用方法如下yamdi -i input.mp4 -o out.mp4 (拖拽功能必须的一步呀)
B)安装Nginx
1、访问http://nginx.org/download/官网下载最新版本的Nginx程序
wget http://nginx.org/download/nginx-1.3.3.tar.gz
2、访问http://h264.code-shop.com官网下载最新版本的MP4支持模块
wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
3、访问http://sourceforge.net官网下载支持流媒体拖动功能模块
wget http://sourceforge.net/projects/yamdi/files/yamdi/1.8/yamdi-1.8.tar.gz/download
./configure --add-module=../nginx_mod_h264_streaming-2.2.7 --with-http_ssl_module --with-pcre --with-zlib --prefix=/usr/local/nginx --with-http_flv_module --with-http_stub_status_module
4、下载pcre包wget http://autosetup1.googlecode.com/files/pcre-7.9.tar.gz
5、下载zlib包wget http://google-desktop-for-linux-mirror.googlecode.com/files/zlib-1.2.3.tar.gz
6、解压文件tar –zxvf pcre-7.9.tar.gz
7、cd pcre-7.9 配置编译环境./configure –prefix=/usr/local/pcre
8、安装程序make && make install
9、安装部署nginx软体
./configure --add-module=/nginx/nginx_mod_h264_streaming-2.2.7 --with-pcre=/nginx/pcre-7.9 --with-zlib=/nginx/zlib/1.2.3 --prefix=/usr/local/nginx --with-http_flv_module --with-http_stub_status_module --with-openssl-opt=enable --with-http_mp4_module --add-module=/nginx/nginx-accesskey-2.0.3 --with-cc-opt='-O3
提示以下错误信息:
make -f objs/Makefile
make[1]: Entering directory `/nginx/nginx-1.3.3'
cd /usr/local/pcre/ \
&& if [ -f Makefile ]; then make distclean; fi \
&& CC="gcc" CFLAGS="-O2 -fomit-frame-pointer -pipe " \
./configure --disable-shared
/bin/sh: line 2: ./configure: No such file or directory
make[1]: *** [/usr/local/pcre//Makefile] Error 127
make[1]: Leaving directory `/nginx/nginx-1.3.3'
make: *** [build] Error 2
导致发生该错误的原因是依赖程序路径应指定到源码包而非安装后的程序包。
所以在配置编译环境是应这样写
./configure --add-module=/nginx/nginx_mod_h264_streaming-2.2.7 --with-pcre=/nginx/pcre-7.9 --with-zlib=/nginx/zlib/1.2.3 --prefix=/usr/local/nginx --with-http_flv_module --with-http_stub_status_module --with-openssl-opt=enable --with-http_mp4_module --add-module=/nginx/nginx-accesskey-2.0.3 --with-cc-opt='-O3'(正确的指令)
Ok!通过查看返回信息一切正常!
10、继续编译该软体使用make命令,哈哈报错啦!(有error信息打印不见的是一件坏事哦)报错信息如下:
make[1]: *** [objs/addon/src/ngx_http_h264_streaming_module.o] Error 1
make: *** [build] Error 2
解决方法:
进入支持MP4格式播放的库/nginx/nginx_mod_h264_streaming-2.2.7/src修改ngx_http_h264_streaming_module.c该文件。修改内容如下所示:
将如下几行注释
/* TODO: Win32 */
if (r->zero_in_uri)
{
return NGX_DECLINED;
}后我们再次make clean && make一下nginx,呵呵这次终于成功了。
11、make install 安装完成
12、验证已安装的Nginx服务器是否支持mp4、flv等视频
cd /usr/local/nginx/sbin
nginx –V
configure arguments:
--add-module=/nginx/nginx_mod_h264_streaming-2.2.7 --with-pcre=/nginx/pcre-7.9 --with-zlib=/nginx/zlib/1.2.3 --prefix=/usr/local/nginx --with-http_flv_module --with-http_stub_status_module --with-openssl=/nginx/openssl-0.9.3 --with-http_mp4_module --with-cc-opt='-O3'
13、配置Nginx配置文件
cd /usr/local/nginx/conf/
vi nginx.conf ##修改配置文件
user videoapp video; ##管理用户
worker_processes 8; ##后台进程
error_log /usr/local/nginx/logs/error.log;
##nginx错误日志存放路径
pid /usr/local/nginx/logs/nginx.pid;
events {
use epoll;
##轮训方式
worker_connections 65535;
##允许的最大连接数
}
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 /usr/local/nginx/logs/access.log;
sendfile on;
tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
server {
listen 801;
server_name localhost;
root /usr/local/nginx/html ;
#charset koi8-r;
limit_rate_after 5m;
limit_rate 512k;
charset utf-8;
access_log /usr/local/nginx/logs/host.access.log main;
location / {
root html;
index index.html index.htm;
# limit_rate_after 5m;
# limit_rate 512k;
}
#error_page 404 /404.html;
location ~ \.flv$ {
flv;
}
location ~ \.mp4$ {
mp4;
}
location ~(favicon.ico) {
log_not_found off;
expires 30d;
break;
}
14、拷贝视频及falsh播放器到video目录下
15、拖动播放测试http://127.0.0.1:801/video/player.swf?type=http&file=2.flv
http://127.0.0.1:801/player.swf?type=http&file=xxy.mp4
三、后续完善的工作
1、为节省带宽防止用户直接下载视频我们需要做如下设置(视频防盗链):
1、到http://wiki.codemongers.com/NginxHttpAccessKeyModule去下载防盗链模块,没办法总有人想下载。还是要做好防盗链工作的。
需要注意的是,下载完防盗链模块之后需要修改下配置文件讲config文件中的“$HTTP_ACCESSKEY_MODULE” 改成“ngx_http_accesskey_module”,不改的话没办法开启防盗链模块。
2、执行编译:./configure --add-module=/nginx/nginx_mod_h264_streaming-2.2.7 --with-pcre=/nginx/pcre-7.9 --with-zlib=/nginx/zlib/1.2.3 --prefix=/usr/local/nginx --with-http_flv_module --with-http_stub_status_module --with-openssl-opt=enable --with-http_mp4_module --add-module=/nginx/nginx-accesskey-2.0.3 --with-cc-opt='-O3
3、make && make install 安装完毕其他配置参数同上13步骤的配置
4、最后开启防盗链功能
location ~ \.mp4$ {
mp4;
limit_conn one 2;
limit_rate 200k;
accesskey on;
accesskey_hashmethod md5;
accesskey_arg “key”;
accesskey_signature “movie.weiqp.cn$remote_addr”;
}
文章浏览阅读1k次。ThingsBoard是一个开源物联网平台,可实现物联网项目的快速开发、管理和扩展,你可以在任何地方进行部署并且对个人和商业用户均可以免费使用。_thingsboard是干嘛的
文章浏览阅读3.8k次。前言最近开始认真掌握VS的各种操作,自然而然避不开dll和lib的使用,自己逛了逛CSDN和博客园,看了很多博客,但是并不是很让我满意,一方面是大多不符合我的环境(VS2017 Community),另一方面是太他妈复杂了,什么建成后又各种添加什么的,实在记不熟,所以以下是我的操作。说明如下:环境:VS2017 Community操作:同一个结局解决方案下一个exe项目,一个dll项目,一..._vsllb
文章浏览阅读1.6k次,点赞5次,收藏4次。文章目录MSYS2 更换国内源MSYS2 更换国内源使用默认的 MSYS2 源升级软件或是安装新软件的特别的慢。所以就翻了翻国内的几个开源软件的镜像库,发现中科大的库里就有 MSYS2。所以就研究了一下,给 MSYS2 添加了中科大的源。简单的说 msys64\etc\pacman.d 目录下有三个文件。mirrorlist.msysmirrorlist.mingw64mirrorlist.mingw32这三个文件记录了都有哪些源。下面把我添加之后的文件内容贴上来。首先是 mirrorlis_msys2 mingw 64-bit替换源
文章浏览阅读1.4k次。一,代码及其设置#include <stdio.h>int fputc(int ch, FILE *f)//Stm8005 重定向{ while (!(UART2->SR&0x80)); UART2->DR=ch; return ch;}同时需要修改IAR的Projec t- >Options -> General..._error[li009]: runtime model conflict: module xxexit.o(dbgstm8smn.a) specifie
文章浏览阅读1.8w次,点赞4次,收藏69次。源码和jar见:https://github.com/evil0ps/utils#Java Utils封装了一些常用Java操作方法,便于重复开发利用.另外希望身为Java牛牛的你们一起测试和完善,欢迎入群263641914 一起封装和完成常用的Java代码。节约撸码时间以方便有更多的时间去把妹子~#开发环境Win7x64JDK1.7IDEA14#项目结构│ README.m..._utils.getapp() java
文章浏览阅读3.2k次。离线安装virtualenv和django工作中需要离线安装django,记录下: 环境: 离线机器系统:centos 6.5 python 版本: python 2.6.6 virtualenv 版本: 1.9 django 版本: 1.6.11 离线安装virtualenv 下载安装包 $ curl -O https://pypi.python.o..._linux离线安装django
文章浏览阅读86次。@echo offclsset CLASSPATH=..\api\jogre.jarset CLASSPATH=%CLASSPATH%;.set CLASSPATH=%CLASSPATH%;classesset CLASSPATH=%CLASSPATH%;lib\dom4j.jarjava org.jogre.server.JogreServer建表create database con_test..._mysql批量写入记录的代码
文章浏览阅读5.7k次,点赞21次,收藏55次。文章目录一、实现方法二、代码运行结果一、实现方法自适应中值滤波算法有两个处理层次:**层次A:**若zmin<zmed<zmax,则转移到层次B;否则,增Sxy尺 寸,若Sxy<Smax,则重复层次A;否则,输出zmed。**层次B:**若zmin<zxy<zmax,则输出zxy;否则,输出zmed。既然是中值滤波,那处理椒盐这类冲激噪声肯定比较合适,自适应中值滤波能在有效去除冲激噪声的基础上,平滑其他非冲激噪声,减少失真,保留图像细节,而对于同等大小的中_图像滤波 椒盐噪声 自适应中值滤波
文章浏览阅读3.5k次。统一过程(RUP/UP,Rational Unified Process)是一种以用例驱动、以体系结构为核心、迭代及增量的软件过程模型,由UML方法和工具支持,广泛应用于各类面向对象项目。RUP是由Rational公司开发并维护,和一系列软件开发工具紧密集成。RUP蕴含了大量优秀的实践方法,如:迭代式软件开发、需求管理、基于构件的构架应用、建立可视化的软件模型、软件质量验证、软件变更控制等。..._统一过程模型
文章浏览阅读3.5w次,点赞78次,收藏181次。1.找到File目录下的Settings打开2.找到Editor并打开3.找到Editor下的File and Code Templates并打开4.先选中Files再点击+号5.Name的值改为XML File ,Extension(文件后缀)里面填xml ,内容中间的内容为选中下方的Enable Live Templates后点击Apply,最后点击OK6.右键项目new --> XML File _idea创建xml配置文件
文章浏览阅读504次。vue v-charts面积图实现_v-charts-v2
文章浏览阅读62次。转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8830286原文地址为:http://developer.android.com/training/multiscreen/screensizes.html本文将告诉你如何让你的应用程序支持各种不同屏幕大小,主要通过以下几种办法:让你的布局能充分的自适应屏幕根据屏..._