1. #centos6.6安装搭建nginx+ffmpeg流媒体服务器
  2. #此系统实现了视频文件的直播及缓存点播,并支持移动端播放(支持Apple和Android端)
  3. #系统需要自行安装,流媒体服务器配置完成之后桌面可能挂掉,以后维护需要进命令行进行操作
  4. #必须按照以下步骤配置流媒体服务器,每一步必须要完成才可以配置成功
  5. # "#"是文档注释内容 "--"也是注释内容
  6. # 1.首先设置服务器IP地址,并更改为自动连接
  7. # 2.修改系统时间和时区为当前时间
  8. # 3.关闭防火墙
  9. #在控制台进行如下操作(需要登录root账号): 安装所有的依赖包:
  10. 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
  11.  
  12. #在usr/local/目录下面新建nginx文件夹
  13. #打开命令窗口
  14. #输入:
  15. mkdir soft-source
  16. cd soft-source
  17.  
  18. #安装git
  19. wget http://codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.xz
  20. xz -d git-latest.tar.xz
  21. tar xf git-latest.tar
  22. #cd进入的是当前安装的日期
  23. cd git-2014-12-29
  24. autoconf
  25. ./configure
  26. make
  27. make install
  28. git --version --查看git的版本
  29. cd ..
  30.  
  31. #安装zlib
  32. wget http://zlib.net/zlib-1.2.8.tar.gz
  33. tar -zxvf zlib-1.2.8.tar.gz
  34. cd zlib-1.2.8
  35. ./configure
  36. make
  37. make install
  38. cd ..
  39.  
  40. #安装pcre
  41. wget http://exim.mirror.fr/pcre/pcre-8.12.tar.gz
  42. tar zxvf pcre-8.12.tar.gz
  43. cd pcre-8.12
  44. ./configure
  45. make
  46. # make的时候如果出现错误:
  47. # libtool: compile: unrecognized option `-DHAVE_CONFIG_H'
  48. # libtool: compile: Try `libtool --help' for more information.
  49. # make[1]: *** [pcrecpp.lo] Error 1
  50. # make[1]: Leaving directory `/home/mfcai/pcre-8.10'
  51. # make: *** [all] Error 2
  52. # make install
  53. 执行:yum install gcc gcc-c++ kernel-devel
  54. 然后:./configure
  55. make
  56. make install
  57. cd ..
  58.  
  59. #安装yadmi给flv视频添加关键帧
  60. wget http://sourceforge.net/projects/yamdi/files/yamdi/1.4/yamdi-1.4.tar.gz
  61. tar xzvf yamdi-1.4.tar.gz
  62. cd yamdi-1.4
  63. make
  64. make install
  65. cd ..
  66.  
  67. #安装OpenSSL
  68. wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
  69. tar -zxvf openssl-1.0.1c.tar.gz
  70. cd openssl-1.0.1c
  71. ./config
  72. make
  73. make install
  74. cd ..
  75.  
  76. #安装ffmpeg及其依赖包:
  77. yum install autoconf automake gcc gcc-c++ git libtool make nasm pkgconfig zlib-devel
  78.  
  79. 安装Yasm
  80. cd /usr/local/nginx
  81. mkdir ffmpeg_sources
  82. cd ffmpeg_sources
  83. wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
  84. tar xzvf yasm-1.3.0.tar.gz
  85. cd yasm-1.3.0
  86. ./configure
  87. make
  88. make install
  89. cd ..
  90.  
  91. #安装ffmpeg
  92. cd /ffmpeg_sources
  93. git clone --depth 1 git://source.ffmpeg.org/ffmpeg
  94. cd ffmpeg
  95. PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"
  96. ./configure
  97. make install
  98.  
  99. #ffmpeg正常安装后执行ffmpeg时出现如下错误:
  100.  
  101. # ffmpeg: error while loading shared libraries: libavdevice.so.53: cannot open shared object file: No such file or directory
  102.  
  103. #解决办法:
  104.  
  105. vi /etc/ld.so.conf
  106.  
  107. #加入:
  108. /usr/local/lib
  109.  
  110. #执行
  111. ldconfig
  112.  
  113. #安装nginx模块
  114. cd /usr/local/nginx/soft-source
  115. wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
  116. tar zxvf nginx_mod_h264_streaming-2.2.7.tar.gz
  117. git clone git://github.com/arut/nginx-rtmp-module.git
  118.  
  119. #nginx安装
  120. wget http://nginx.org/download/nginx-1.6.0.tar.gz
  121. tar zxvf nginx-1.6.0.tar.gz
  122. cd nginx-1.6.0
  123.  
  124. #编译安装nginx(直接复制nginx_configure.sh至nginx-1.6.0目录,文件在附件中)
  125. cp nginx_configure.sh /usr/local/nginx/soft-source/nginx-1.6.0
  126. chmod +x nginx_configure.sh
  127. ./nginx_configure.sh
  128. make
  129.  
  130. #在执行make的时候可能出现错误
  131. # /root/nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c: In function ‘ngx_streaming_handler’:
  132. # /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’
  133. # make[1]: *** [objs/addon/src/ngx_http_h264_streaming_module.o] Error 1
  134. # make[1]: Leaving directory `/root/nginx-0.8.54'
  135. # make: *** [build] Error 2
  136.  
  137. #解决方法:
  138.  
  139. #将/usr/local/nginx/soft-source/nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c文件中以下代码删除或者是注释掉就可以了:大概在157行
  140. # /* TODO: Win32 */
  141. # if (r->zero_in_uri)
  142. # {
  143. # return NGX_DECLINED;
  144. # }
  145. #
  146.  
  147. #在执行make的时候可能出现错误
  148. # ../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c: 在函数‘esds_read’中:
  149. # ../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c:377:16: 错误: 变量‘stream_priority’被设定但未被使用 [-Werror=unused-but-set-variable]
  150. # ../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c:376:12: 错误: 变量‘stream_id’被设定但未被使用 [-Werror=unused-but-set-variable]
  151. # ../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c: 在函数‘stsd_parse_vide’中:
  152. # ../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c:529:22: 错误: 变量‘level_indication’被设定但未被使用 [-Werror=unused-but-set-variable]
  153. # ../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c:528:22: 错误: 变量‘profile_compatibility’被设定但未被使用 [-Werror=unused-but-set-variable]
  154. # ../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c:527:22: 错误: 变量‘profile_indication’被设定但未被使用 [-Werror=unused-but-set-variable]
  155. # ../nginx_mod_h264_streaming-2.2.7/src/mp4_reader.c:526:22: 错误: 变量‘configuration_version’被设定但未被使用 [-Werror=unused-but-set-variable]
  156. # cc1: all warnings being treated as errors
  157. # make[1]: *** [objs/addon/src/mp4_reader.o] 错误 1
  158.  
  159. #解决方法:
  160. # vi objs/Makefile (修改nginx-1.6.0/objs/Makefile文件, 去掉其中的"-Werror"), 然后就能够正常编译了.
  161. # 然后再make就能过了。
  162. vi objs/Makefile
  163. make install
  164.  
  165. #开放80和1935端口 关闭防火墙
  166. /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT 写入修改
  167. /sbin/iptables -I INPUT -p tcp --dport 1935 -j ACCEPT 写入修改
  168. /etc/init.d/iptables save 保存修改
  169. #关闭防火墙
  170. service iptables stop
  171. #查看端口状态
  172. /etc/init.d/iptables status
  173. 端口映射
  174. 映射流媒体服务器的 80 1935 22 端口到外网
  175. #配置Nginx相关模块
  176. 进入到nginx文件夹!执行./nginx启动nginx
  177.  
  178. 然后进行推送到nginx
  179. rtmp://x.x.x.x/hls/ch68h
  180. 播放
  181. rtmp://x.x.x.x.:1935/hls/ch68h
  182. http://x.x.x.x/hls/ch68h.m3u8
  183. 以上内容为流媒体服务器的基本配置说明,根据项目不同可配置不同的配置文件,因Nginx配置文件为核心文件,所以暂不公开,如有需要的可与我沟通联系,此系统已经完善部署到几十个项目中,运行状况良好,同时也有少许bug,并在不断更新中.

  

【原创+史上最全】Nginx+ffmpeg实现流媒体直播点播系统的更多相关文章

  1. 收藏:视频网站(JavaEE+FFmpeg)/Nginx+ffmpeg实现流媒体直播点播系统

    FFmpeg安装(windows环境)http://www.cnblogs.com/xiezhidong/p/6924775.html 最简单的视频网站(JavaEE+FFmpeg)http://bl ...

  2. 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发

    [原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文  http: ...

  3. 史上最全的maven pom.xml文件教程详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  4. GitHub上史上最全的Android开源项目分类汇总 (转)

    GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...

  5. .Net魔法堂:史上最全的ActiveX开发教程——ActiveX与JS间交互篇

    一.前言 经过上几篇的学习,现在我们已经掌握了ActiveX的整个开发过程,但要发挥ActiveX的真正威力,必须依靠JS.下面一起来学习吧! 二.JS调用ActiveX方法 只需在UserContr ...

  6. .Net魔法堂:史上最全的ActiveX开发教程——自动更新、卸载篇

    一.前言 B/S模式的特点之一,客户端版本升级相对简单.快捷,适合产品的快速迭代.而ActiveX组件的自动更新同样也继承了这一优点.下面我们一起来了解吧! 二.二话不说更新ActiveX 1. 设置 ...

  7. .Net魔法堂:史上最全的ActiveX开发教程——部署篇

    一.前言 接<.Net魔法堂:史上最全的ActiveX开发教程——发布篇>,后我们继续来部署吧! 二. 挽起衣袖来部署   ActiveX的部署其实就是客户端安装ActiveX组件,对未签 ...

  8. .Net魔法堂:史上最全的ActiveX开发教程——发布篇

    一. 前言 接着上一篇<.Net魔法堂:史上最全的ActiveX开发教程——开发篇>,本篇讲述如何发布我们的ActiveX. 二.废话少讲,马上看步骤! 1. 打包  C#开发的Activ ...

  9. .Net魔法堂:史上最全的ActiveX开发教程——开发篇

    一.前言 在设计某移动内部自动化运维平台时,经综合考虑终端机性能和功能需求等因素后,决定采用B/S模式,并且浏览器通过ActiveX组件实现与服务器Agent作P2P的通讯.好处,整个平台以网页形式存 ...

随机推荐

  1. 想成为Java高级工程师的看过来

    想成为Java高级工程师,有哪些要求呢? 1.Core Java,就是Java基础.JDK的类库,很多童鞋都会说,JDK我懂,但是懂还不足够,知其然还要知其所以然,JDK的源代码写的非常好,要经常查看 ...

  2. C#中 dynamic 关键字

       所有表达式都能隐式的转换成dynamic,因为所有的表达式最终都能生成从Object派生出的类型. ; int b = a; //隐式转换错误 int b2 = (int)a; ; int b3 ...

  3. CKEditor不借助CKFinder实现图片上传(.net版 ashx实现)

    参考博客:http://blog.csdn.net/mydwr/article/details/8669594 本人版本:4.4.6 打开文件:ckeditor/plugins/image/dialo ...

  4. Java数据类型(基本数据类型)学习

    Java数据类型(基本数据类型)学习 与其他语言一样,Java编程同样存在,比如int a,float b等.在学习变量之前我就必须先了解Java的数据类型啦. Java的数据类型包括基本数据类型和引 ...

  5. HTTP协议详解以及URL具体访问过程

    1.简介 1.1.HTTP协议是什么? 即超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准.从 ...

  6. MarkDown本地图片上传工具制作总结

    引言:开始尝试使用MarkDown语法写文档,发现图片必须用外链的形式才能插入到文章中,而自己平时最常用的插入图片方式就是QQ截屏,觉得很不方便所以制作的小工具辅助上传,因为时间和水平有限,其实代码写 ...

  7. hdu3336 Count the string kmp+dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3336 很容易想到用kmp 这里是next数组的应用 定义dp[i]表示以s[i]结尾的前缀的总数 那么 ...

  8. jQuery之文档处理

    jQuery 文档处理 1)内部插入 2)外部插入 3)包裹 4)替换 5)删除 6)复制 1.内部插入 append(content|fn) 向每个匹配的元素内部追加内容. 向所有段落中追加一些HT ...

  9. JS解决通过按钮切换图片的问题

    我是JS初学者,本想通过JS解决轮播图的特效,上网看了下:大部分都是JQ解决的,对于初学者的我来说理解上有点困难.于是我自己只做了一个不那么高大上的JS轮播图,下面我简单介绍下我的步骤:在HTML中创 ...

  10. MyBatis之TypeHandler

    在大学写web应用的时候经常会遇到这么个问题,当我要插入一条数据,某个数据是Date类型,数据库中却是VARCHAR类型,这个时候可能会傻乎乎的先把这个数据自己手动转换成String类型再插入到数据库 ...