nginx 0.8.54/1.0.0 在cygwin环境下的编译(包括 nginx_mod_h264_streaming-2.2.7)

所属分类: 软件教程 / 编程开发 阅读数: 527
收藏 0 赞 0 分享
  1. 一、概述:
    由于测试需要在WIN平台上进行.264的MP4文件的拖动功能,而nginx windows官方版本不包含nginx_mod_h264_streaming-2.2.7模块,所以才有了本文。

    二、准备:
    1、cygwin http://www.cygwin.com/setup.exe

    复制代码
    代码如下:

    安装库
    gcc g++
    zlib 库 (gzip 模块需要)
    pcre 库 (rewrite 模块需要 )
    openssl库 (ssl模块需要)
    提示:国外下载库速度较慢,可以使用网易提供的开源站下载
    http://mirrors.163.com/cygwin/

    2、nginx 0.8.54 /1.0.0(在这里yaosansi以0.8.54版本为示例)

    复制代码
    代码如下:

    cd ~
    wget http://nginx.org/download/nginx-0.8.54.tar.gz
    wget http://nginx.org/download/nginx-1.0.0.tar.gz

    3、the H264 Streaming Module for Nginx (version 2)

    复制代码
    代码如下:

    cd ~
    wget http://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
    改动 ngx_http_h264_streaming_module.c,将以下内容全部移除或注释掉,否则会遇到 error: 'ngx_http_request_t' has no member named 'zero_in_uri'的错误提示
    /* TODO: Win32 */ if (r->zero_in_uri) { return NGX_DECLINED; }

    三、配置和编译Nginx
    1、.configure脚本

    复制代码
    代码如下:

    ./configure \
    --prefix=. \
    --sbin-path=nginx \
    --conf-path=conf/nginx.conf \
    --pid-path=logs/nginx.pid \
    --error-log-path=logs/error.log \
    --http-log-path=logs/access.log \
    --http-client-body-temp-path=client/ \
    --http-proxy-temp-path=proxy/ \
    --http-fastcgi-temp-path=fastcgi/ \
    --with-cc-opt="-D FD_SETSIZE=4096" \
    --with-debug \
    --with-mail_ssl_module \
    --with-http_realip_module \
    --with-http_stub_status_module \
    --with-http_ssl_module \
    --with-http_flv_module \
    --add-module=../nginx_mod_h264_streaming-2.2.7
    make && make install

    2、在编译过程中,注意事项:(引用 :http://www.tech126.com/cygwin-nginx/)
    1、prefix的选项,如果我们指定–prefix=/cygdrive/d/nginx,那么最后脱离Cygwin环境运行,会发现root无法指向其它磁盘上的目录,所以这里使用了相对路径,而且指定了可执行文件nginx在根目录下,而不是默认的sbin/nginx
    2、FD_SETSIZE=4096,网上都说了,是将select模式的最大worker_connections加大,如果不加此参数将可能出现以下的错误提示,
    [emerg] 2496#0: the maximum number of files supported by select() is 64的错误提示,这表示FD_SETSIZE的值比nginx配置文件中worker_connections指令所指定的值,你可以把nginx.conf里的worker_connections选项改小一些,比如44,加了–with-cc-opt=”-DFD_SETSIZE=4096”后就不会碰到这问题
    3、编译mod_passport之前,最好执行dos2unix.exe mod_passport/config转换一下格式
    4、编译mod_passport时,会报错:cc1: warnings being treated as errors,需要修改objs/Makefile文件,把其中的-Werror删除即可
    5、编译成功后,在Cygwin下运行正常,但如果要脱离Cygwin,需要从cygwin/bin下拷贝cygwin1.dll,cyggcc_s-1.dll,cygz.dll,cygcrypto-0.9.8.dll,cygssl-0.9.8.dll,cygpcre-0.dll,cygcrypt-0.dll这几个dll到nginx目录下
    6、最后,不使用Cygwin,在普通Dos下运行nginx时,会报错:emerge: getpwnam("nobody") fail。这也是最令我郁闷的一个错误了,看了网上很多人的帖子,似乎都很顺利就成功了,但用我的Cygwin编译出来的nginx,就一直报这个错误,尝试不加第三方模块,指定user为本机的administrator,依然报错…郁闷了很久之后,最后还是找到nginx源码中相关逻辑,做如下修改:
    nginx-0.8.54/src/core/nginx.c,把getpwnam和getgrnam相关逻辑判断注释掉 (1022-1044)

    nginx-0.8.54/src/os/unix/ngx_process_cycle.c把setgid和setuid相关逻辑判断注释掉 (883-903)

    最后重新编译运行,才成功了
  2. 当引用外部的目录时,需要用cygwin格式的路径,如:root /cygdrive/d/work/git/python_mail/web;
3、提取相关文件

编译后,将nginx.exe及从cygwin/bin下拷贝cygwin1.dll,cyggcc_s-1.dll,cygz.dll,cygcrypto-0.9.8.dll,cygssl-0.9.8.dll,cygpcre-0.dll,cygcrypt-0.dll这几个dll到nginx目录下,从nginx windows版 拷贝conf、html、logs到nginx目录里。

四、设置nginx,进行测试

1、配置nginx.conf,支持视频拖放

将MP4文件的请求由MP4命令来解析。

复制代码
代码如下:

location ~ \.mp4$ {
mp4;
}


2、配置nginx.conf其它项,启动NGINX,进行测试

'http://www.yaosansi.com/video.mp4?start=15&end=45'. 从第15秒开始访问30秒到第45秒结束(注意:该时间如果不是关键帧在有些播放器会出现错误或无法播放。)对于不支持& 符号的播放器需要使用URL重写来解决。

参考:
http://h264.code-shop.com/trac
http://h264.code-shop.com/trac/wiki/Mod-H264-Streaming-Nginx-Version2
http://h264.code-shop.com/trac/wiki/VirtualVideoClipUrlRewrite
http://wiki.nginx.org/InstallOptions
http://h264.code-shop.com/trac/discussion/1/133?discussion_action=quote;
http://www.tech126.com/cygwin-nginx/
更多精彩内容其他人还在看

parse_url函数解析

  描述  array parse_url ( string url )      此函数返回一个关联数组,包含现有 URL 的各种组成部分。如果缺少了其中的某一个,则不会为这个组成部分创建数组项。组成部分为:      scheme - ...
收藏 0 赞 0 分享

visualstudio2019怎么连接并使用VSTS?

visualstudio2019怎么连接并使用VSTS?visual studio 2019使用的时候,想要连接visual studio team service,该怎么操作呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

vscode怎么规范代码? vscode代码格式化的教程

vscode怎么规范代码?vscode编程开发的时候,发现代码很轮,想要自动格式化代码,该怎么操作呢?下面我们就来看看vscode代码格式化的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

Sublime Text英文字母大小写怎么切换?

Sublime Text英文字母大小写怎么切换?Sublime Text中编程开发的时候,想要切换英文大小写,该怎么切换呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

CodeBlocks(vc开发工具)的入门使用教程

今天起我们将加大对其他编译器学习的支持,对于训练场中的题目,我们极力建议大家以CodeBlocks作为编程工具,因为VC6的种种问题及与训练场判题系统标准的不符,导致不少新同学被坑不少
收藏 0 赞 0 分享

Sublime代码编辑器怎么重新打开编码?

Sublime代码编辑器怎么重新打开编码?Sublime代码编辑器之前变价的编码想要打开,该怎么打开呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

vb怎么将年表分成四份季度表?

vb怎么将年表分成四份季度表?visual basic中的一个表想要分成多分表,该怎么实现呢?我们可以使用代码实现,下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

VB怎么编写给表格快速添加批注的代码?

VB怎么编写给表格快速添加批注的代码?想要给表格中的数据添加批注,我们可以使用vb代码来实现,下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

UltraEdit怎么修改选中文本的颜色?

UltraEdit怎么修改选中文本的颜色?UltraEdit编程开发的时候,想要修改文本的颜色,该怎么修改选中文本的颜色呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

ueditor编辑器怎么修改复制粘贴文档源代码的字体?

ueditor编辑器怎么修改复制粘贴文档源代码的字体?ueditor复制来的代码想要编辑一下,该怎么设置代码字体大小呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多