nginx搭建支持http和rtmp协议的流媒体服务器之二

三、配置Nginx,实现VOD,以HTTP方式播放MP4、FLV,实现进度条可拖动
1. 设置configure,nginx的补充编译,增加FLV和MP4功能。
# cd cd nginx-1.6.0 
# vim nginx_configure.sh
#!/bin/sh

echo "configure start ..."
./configure --prefix=/opt/nginx \
--add-module=../nginx_mod_h264_streaming-2.2.7 \
--with-http_flv_module \
--with-http_ssl_module \
--with-http_mp4_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-pcre=/opt/nginx_http_rtmp/pcre-8.12 \
--with-zlib=/opt/nginx_http_rtmp/soft_source/zlib-1.2.8 \
--user=www --group=www \
--add-module=../nginx-rtmp-module \
--with-cc-opt=-I/opt/ffmpeg/include \
--with-ld-opt=`-L/opt/ffmpeg/lib -Wl, -rpath=/opt/ffmpeg/lib`
echo "configure end!"
【保存并退出】
# chmod +x nginx_configure.sh
# ./nginx_configure.sh
# make && make install

http_flv_module和http_mp4_module即为对应的解析和seek功能支持。

2. conf/nginx.conf 支持
# vim conf/nginx.conf
【编辑nginx.conf】
#user  www www;
worker_processes  4;
error_log  logs/error.log  info;
pid        logs/nginx.pid;

worker_rlimit_nofile 51200;
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;

  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

  sendfile        on;
  tcp_nopush      on;

  keepalive_timeout  65;
  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;

  server
  {
    listen   8000;
    server_name localhost;

    location /
    {
      index  index.html;
      root /opt/pub/media/nginx;
      uwsgi_pass 127.0.0.1:9000;
      include uwsgi_params;
      limit_rate_after 50m;
      limit_rate       1m;
      uwsgi_param  UWSGI_CHDIR /opt/pub/media/nginx;
      uwsgi_param  UWSGI_SCRIPT apprun;
      location ~ \.flv$
      {
        flv;
      }
      location ~ \.mp4$
      {
        mp4;
      }
    }
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
    {
      root /opt/pub/media/nginx;
      break;
    }
  }
}
【保存并退出】
NOTE: 
flv和mp4的location要写在上面目录location的里面,不然可能会有权限问题。
limit_rate_after,是说文件下载了5M以后才限速到limit_rate=512K;

3. 下载jwplayer
这个开源代码用的比较广,据说youtube第一版用的就是它。
方式一: 使用官方版本
下载地址在: 
  http://www.longtailvideo.com/support/jw-player/jw-player-for-flash-v5/15991/getting-started
下载时把Keep me informed of news, offers & updates和Include Viral, a video sharing plugin去掉。
或从这里下载:
  http://blogimg.chinaunix.net/blog/upfile2/100607142612.rar
下载下来的zip包,将plyaer.swf和video.mp4 直接放到
/opt/pub/media/nginx目录下或者
index.html同级目录下,即/usr/local/nginx/html/下,(我测试没有通过,不知道为什么),
启动nginx:
# /usr/local/nginx/sbin/nginx

在浏览器中输入:
http://192.168.1.106:8000/player.swf?type=http&file=video.mp4 

方式二: 使用去水印版本
也可以下个去水印,去版权版本的,如:
http://hi.baidu.com/tuberose1605/item/a09f271cd26ee90eb88a1a72
将解码后的文件放在:
/opt/pub/media/nginx/web 下;
将播放素材放在:
/opt/pub/media/nginx/vod 下;
在浏览器中输入:
http://10.2.175.10:8000/web/pl.swf?type=http&file=/vod/video.flv

4. HTML页面嵌入播放器模式
用chrome审查元素,观察network,你发现当你seek时,是会请求一个新流过来的,这个实际上已经相当于实时流媒体了。
因为普通http+mp4(flv)方式下,这个视频文件没有完全下载下来之前,你是无法拖动到后面的(后面没有下载的地方),
因此nginx这种方式称为http 伪流媒体(HTTP Pseudo-Streaming),参考jwplayer官方网站中关于这个伪流媒体概念的介绍。

但是这个地址的输入太死板了,你在浏览器中看到的是一个全屏幕的SWF播放器界面。如何在HTML中定制呢?
STEP1. 编写HTML代码
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>JW Player for Flash</title>
  <style type="text/css">
    body { background-color: #fff; padding: 0 20px; color:#000; font: 13px/18px Arial, sans-serif; }
    a { color: #360; }
    h3 { padding-top: 20px; }
    ol { margin:5px 0 15px 16px; padding:0; list-style-type:square; }
  </style>

</head>
<body>
  <object id="player" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" name="player" width="400" height="315">
    <param name="movie" value="jwplayer_5_7_delogo/pl.swf" />
    <param name="allowfullscreen" value="true" />
    <param name="allowscriptaccess" value="always" />
    <param name="flashvars" value="file=/vod/video.flv&image=jwplayer_5_7_delogo/preview.jpg" />
    <embed
      type="application/x-shockwave-flash"
      id="player2"
      name="player2"
      src="jwplayer_5_7_delogo/pl.swf" 
      width="400" 
      height="315"
      allowscriptaccess="always" 
      allowfullscreen="true"
      flashvars="file=/vod/video.flv&image=jwplayer_5_7_delogo/preview.jpg" 
    />
  </object>
  <!-- END OF THE PLAYER EMBEDDING -->
</body>
</html>

将此HTML代码(假设文件名为player.html)放到web目录下,
在web目录下新建jwplayer_5_7_delogo目录,将jwplayer.js,player.swf放在此目录下。
在web目录下新建vod目录,将video.flv放在vod目录下;

STEP2. 修改nginx.conf
在原有的配置上增加一个监听80端口的虚机:
【nginx.conf】
...
http 
{
  server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
      #root   html;
      root /opt/pub/media/nginx/web;
      index  index.html index.htm;
    }
  }
  ...
}
【保存并退出】

STEP3. reload nginx 
然后输入以下代码:
http://192.168.1.106/player.html
这个时候,你看到的是一个带有宽和高的swf初始页面,当然你可以写更多的css代码来美化; 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北雨南萍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值