利用nginx搭建http和rtmp协议的流媒体服务器

简介:

利用nginx搭建httprtmp协议的流媒体服务器

实验目的:Nginx支持flvmp4格式文件,同时支持Rtmp协议;同时打开rtmphls功能
资料:
HTTPLive Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。

HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。

使用ffmpeg来完成对flvmp4mp3等格式的转化(点播实验暂时不测试)

一、准备工作
模块:nginx_mod_h264_streaming(支持h264编码的视频)
模块:http_flv_module支持flv
模块:http_mp4_module支持mp4
下载地址:
http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
http://nginx.org
https://github.com/arut/nginx-rtmp-module

1、安装依赖包:

#yum-y install gcc glibc glibc-devel make nasm pkgconfig lib-devel openssl-develexpat-devel gettext-devel libtool mhash.x86_64perl-Digest-SHA1.x86_64  

2、安装git工具:

#mkdirsoft-source
#cdsoft-source
#wgethttp://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.gz
#tarxzvf git-latest.tar.gz
#cdgit-2013-02-04
#autoconf
#./configure
#make&& make install
# git--version
gitversion 1.8.1.GIT
#cd ..

3、安装ffmpeg及其依赖包:

++++++++Yasm+++++++++++
#wgethttp://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
#tarxzvf yasm-1.2.0.tar.gz
#cdyasm-1.2.0
#./configure
#make
#makeinstall
#cd ..
++++++++x264+++++++++++
#gitclone git://git.videolan.org/x264
#cdx264
#./configure--enable-shared
#make
#makeinstall
#cd ..
++++++++LAME+++++++++++
#wgethttp://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
#tarxzvf lame-3.99.5.tar.gz
#cdlame-3.99.5
#./configure--enable-nasm
#make
#makeinstall
#cd ..
++++++++libogg+++++++++++
#wgethttp://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz
#tarxzvf libogg-1.3.0.tar.gz
#cdlibogg-1.3.0
#./configure
#make
#makeinstall
#cd ..
++++++++libvorbis+++++++++++
#wgethttp://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
#tarxzvf libvorbis-1.3.3.tar.gz
#cdlibvorbis-1.3.3
#./configure
#make
#makeinstall
#cd ..
++++++++libvpx+++++++++++
#gitclone http://git.chromium.org/webm/libvpx.git
#cdlibvpx
#./configure --enable-shared
#make
#makeinstall
#cd ..
++++++++FAAD2+++++++++++
#wgethttp://downloads.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.gz
#tarzxvf faad2-2.7.tar.gz
#cdfaad2-2.7
#./configure
#make
#makeinstall
#cd ..
++++++++FAAC+++++++++++
#wgethttp://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz
#tarzxvf faac-1.28.tar.gz
#cdfaac-1.28
#./configure
#make
#makeinstall
#cd ..

编译FAAC-1.28时遇到错误:

mpeg4ip.h:126:error:new declaration ‘char*strcasestr(const char*, const char*)’

解决方法:

123行开始修改此文件mpeg4ip.h,到129行结束。
修改前:
#ifdef __cplusplus
extern "C" {
#endif
char *strcasestr(const char *haystack, const char *needle);
#ifdef __cplusplus
}
#endif

修改后:
#ifdef __cplusplus
extern "C++" {
#endif
constchar *strcasestr(const char*haystack, const char *needle);
#ifdef __cplusplus
}
#endif









++++++++Xvid+++++++++++
#wgethttp://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
#tarzxvf xvidcore-1.3.2.tar.gz
#cdxvidcore/build/generic
#./configure
#make
#makeinstall
cd ..
#gitclone git://source.ffmpeg.org/ffmpeg
#cdffmpeg
#./configure --prefix=/opt/ffmpeg/ --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 ..

修改/etc/ld.so.conf如下:
includeld.so.conf.d/*.conf
/lib
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
/opt/ffmpeg/lib
#ldconfig


由于暂时没有找到合适版本rtmpmodel ,所以,这里只是做了flvMP4的,红色部分暂时不用添加
二、安装Nginx相关模块
#tarzxvf nginx_mod_h264_streaming-2.2.7.tar.gz
#gitclone git://github.com/arut/nginx-rtmp-module.git
#tarzxvf pcre-8.12.tar.gz
#cdpcre-8.12
#./configure
#make&& make install
#tarzxvf nginx-1.2.6.tar.gz
#cdnginx-1.2.6
#./configure--prefix=/usr/local/nginx  --add-module=../nginx_mod_h264_streaming-2.2.7--with-http_flv_module --with-http_gzip_static_module--with-http_stub_status_module --with-http_mp4_module --add-module=../nginx-rtmp-module--add-module=../nginx-rtmp-module/hls --with-cc-opt=-I/opt/ffmpeg/include--with-ld-opt='-L/opt/ffmpeg/lib -Wl,-rpath=/opt/ffmpeg/lib'

#make&& make install
三、修改nginx主配置文件,配置虚拟主机(这里我们暂时只配置和测试点播,直播请看借鉴地址):
user nobody nobody;
worker_processes4;
error_log logs/nginx_error.log  info;
pid       logs/nginx.pid;
worker_rlimit_nofile51200;
events
  {
      use epoll;
      worker_connections 51200;
  }

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/plainapplication/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       80 ;
          server_name 192.168.0.33;

   root index.html

limit_rate_after5m;  

limit_rate512k;


          location ~ \.flv$ {


root  /media/nginx;   -视频存放地点
                  flv;

          }
          location ~ \.mp4$ {

root /media/nginx;
                  flv;
                              }
          access_log logs/nginxflv_access.log  main;
}



下载并安装yamdi

[root@flv ~]# wgethttp://cdnetworks-kr-2.dl.sourceforge.net/ \

>project/yamdi/yamdi/1.8/yamdi-1.8.tar.gz

[root@flv ~]# tar -zxvf yamdi-1.8.tar.gz

yamdi-1.8

yamdi-1.8/CHANGES

yamdi-1.8/LICENSE

yamdi-1.8/Makefile

yamdi-1.8/Makefile.mingw32

yamdi-1.8/README

yamdi-1.8/man1

yamdi-1.8/yamdi.c

yamdi-1.8/man1/yamdi.1

[root@ flv ~]# cd yamdi-1.8

[root@ flv yamdi-1.8]# make

gcc -O2 -Wall yamdi.c -o yamdi

[root@ flv yamdi-1.8]# make install

install -m 0755 -o root yamdi/usr/local/bin


使用yamdi


这里我们准备个文件,以便后面使用:


[root@flv  html]# yamdi -i 62664.flv -o 7345.flv



简单的说一下,-i表示输入文件,在这里输入文件为62664.flv,即它是没有添加过关键帧的文件;-o表示输出文件,在这里是7345.flv,它是添加过关键帧的,在对这两文件的访问中会发现,播放62664.flv是不能实现拖动操作的,而7345.flv则可以。


下载并设置JW player


   JW player是一个开源的FLV播放器,它现在也支持MP4


[root@flv ~]# wget  http://www.longtailvideo.com/jw/upload/mediaplayer-viral.zip

[root@flv ~]# unzip mediaplayer-viral.zip

Archive:  mediaplayer-viral.zip

 creating: mediaplayer-5.7-viral/

 inflating: mediaplayer-5.7-viral/JW  Player Quick Start Guide.pdf

 inflating: mediaplayer-5.7-viral/jwplayer.js

 inflating:  mediaplayer-5.7-viral/license.txt

 inflating: mediaplayer-5.7-viral/player.swf

 inflating:  mediaplayer-5.7-viral/preview.jpg

 inflating:  mediaplayer-5.7-viral/readme.html

 inflating:  mediaplayer-5.7-viral/swfobject.js  

 inflating: mediaplayer-5.7-viral/video.mp4



注意点

注意在解压包中,player.swfjwplayer.js是我们需要的文件,将其拷贝到Nginxweb目录下:


[root@flv ~]#cd mediaplayer-5.7-viral/

[root@mail mediaplayer-5.7-viral]# cp jwplayer.js  player.swf  /usr/local/nginx-1.0.2-flv/html/


到现在为止,FLV服务器已经架设完毕。


我们访问测试一下看:


访问方法:


  http://flv.xx.com/player.swf?type=http&file=7345.flv

↑访问协议 ↑FLV服务器地址 ↑播放器名称↑http分发方式↑访问的文件名






      本文转自crazy_charles 51CTO博客,原文链接:,http://blog.51cto.com/douya/1389162如需转载请自行联系原作者

相关文章
|
28天前
|
安全 网络协议 网络安全
解析HTTP代理服务器不稳定致使掉线的关键原因
随着数字化发展,网络安全和隐私保护成为核心需求。HTTP代理服务器掉线原因主要包括:1. 网络问题,如本地网络不稳定、路由复杂;2. 服务器质量差、IP资源不稳定;3. 用户配置错误、超时或请求频率异常;4. IP失效或协议不兼容。这些问题会影响连接稳定性。
66 8
|
2月前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
177 3
|
2月前
|
弹性计算 负载均衡 网络协议
ECS中实现nginx4层7层负载均衡和ALB/NLB原SLB负载均衡
通过本文的介绍,希望您能深入理解并掌握如何在ECS中实现Nginx四层和七层负载均衡,以及如何使用ALB和NLB进行高效的负载均衡配置,以提高系统的性能和可靠性。
216 9
|
2月前
|
缓存 负载均衡 监控
HTTP代理服务器在网络安全中的重要性
随着科技和互联网的发展,HTTP代理IP中的代理服务器在企业业务中扮演重要角色。其主要作用包括:保护用户信息、访问控制、缓存内容、负载均衡、日志记录和协议转换,从而在网络管理、性能优化和安全性方面发挥关键作用。
96 2
|
3月前
|
安全 搜索推荐 网络安全
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
95 11
|
3月前
|
缓存 安全 网络协议
HTTPS协议的历史发展
HTTPS协议的历史发展
87 8
|
2月前
|
存储 编解码 应用服务中间件
使用Nginx搭建流媒体服务器
本文介绍了流媒体服务器的特性及各种流媒体传输协议的适用场景,并详细阐述了使用 nginx-http-flv-module 扩展Nginx作为流媒体服务器的详细步骤,并提供了在VLC,flv.js,hls.js下的流媒体拉流播放示例。
276 1
|
3月前
|
安全 应用服务中间件 Linux
判断一个网站是否使用HTTPS协议
判断一个网站是否使用HTTPS协议
345 4
|
Web App开发 编解码 测试技术
|
3月前
|
缓存 应用服务中间件 网络安全
Nginx中配置HTTP2协议的方法
Nginx中配置HTTP2协议的方法
233 7