码迷,mamicode.com
首页 > 其他好文 > 详细

通过nginx实现浏览器播放视频

时间:2018-04-19 15:42:46      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:nginx 播放 视频

  本文档只适用于服务器没有安装nginx。如果已经安装nginx,可能还需要其它方法。

  确认本机IP地址:

[root@qa-gongneng-bj_10-0-129-98 ~]# ifconfig
eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.129.98  netmask 255.255.255.0  broadcast 10.0.129.255
        inet6 fe80::250:56ff:fe9d:17d8  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:9d:17:d8  txqueuelen 1000  (Ethernet)
        RX packets 69998305  bytes 4370336225 (4.0 GiB)
        RX errors 0  dropped 1992  overruns 0  frame 0
        TX packets 32004  bytes 2665429 (2.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 384  bytes 20736 (20.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 384  bytes 20736 (20.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

  当前机器没有nginx服务:(至少没有启动nginx服务)

[root@qa-gongneng-bj_10-0-129-98 ~]# ps -ef|grep nginx
root     28426 28404  0 10:23 pts/0    00:00:00 grep --color=auto nginx

  创建软件包下载目录:

[root@qa-gongneng-bj_10-0-129-98 ~]# mkdir -p /home/huangyaoqi/tools/
[root@qa-gongneng-bj_10-0-129-98 ~]# cd /home/huangyaoqi/tools/

  下载nginx软件包:

[root@qa-gongneng-bj_10-0-129-98 tools]# wget http://nginx.org/download/nginx-1.6.3.tar.gz
--2018-04-19 10:23:42--  http://nginx.org/download/nginx-1.6.3.tar.gz
正在解析主机 nginx.org (nginx.org)... 95.211.80.227, 206.251.255.63, 2606:7100:1:69::3f, ...
正在连接 nginx.org (nginx.org)|95.211.80.227|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:805253 (786K) [application/octet-stream]
正在保存至: “nginx-1.6.3.tar.gz”
 
100%[====================================================================================================================================================================>] 805,253     87.8KB/s 用时 11s    
 
2018-04-19 10:23:53 (74.8 KB/s) - 已保存 “nginx-1.6.3.tar.gz” [805253/805253])

  下载nginx_rtmp_module包:

[root@qa-gongneng-bj_10-0-129-98 tools]# wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
--2018-04-19 10:24:31--  https://github.com/arut/nginx-rtmp-module/archive/master.zip
正在解析主机 github.com (github.com)... 13.250.177.223, 13.229.188.59, 52.74.223.119
正在连接 github.com (github.com)|13.250.177.223|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 302 Found
位置:https://codeload.github.com/arut/nginx-rtmp-module/zip/master [跟随至新的 URL]
--2018-04-19 10:24:32--  https://codeload.github.com/arut/nginx-rtmp-module/zip/master
正在解析主机 codeload.github.com (codeload.github.com)... 13.229.189.0, 54.251.140.56, 13.250.162.133
正在连接 codeload.github.com (codeload.github.com)|13.229.189.0|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:545945 (533K) [application/zip]
正在保存至: “master.zip”
 
100%[====================================================================================================================================================================>] 545,945      231KB/s 用时 2.3s   
 
2018-04-19 10:24:36 (231 KB/s) - 已保存 “master.zip” [545945/545945])

  确认下载的安装包:

[root@qa-gongneng-bj_10-0-129-98 tools]# ll
总用量 1324
-rw-r--r-- 1 root root 545945 4月  19 10:24 master.zip
-rw-r--r-- 1 root root 805253 4月   8 2015 nginx-1.6.3.tar.gz

  解压软件包:

[root@qa-gongneng-bj_10-0-129-98 tools]# tar xf nginx-1.6.3.tar.gz
[root@qa-gongneng-bj_10-0-129-98 tools]# unzip master.zip
Archive:  master.zip
791b6136f02bc9613daf178723ac09f4df5a3bbf
   creating: nginx-rtmp-module-master/
  inflating: nginx-rtmp-module-master/AUTHORS  
  inflating: nginx-rtmp-module-master/LICENSE  
  inflating: nginx-rtmp-module-master/README.md  
  inflating: nginx-rtmp-module-master/config  
   creating: nginx-rtmp-module-master/dash/
  inflating: nginx-rtmp-module-master/dash/ngx_rtmp_dash_module.c  
  inflating: nginx-rtmp-module-master/dash/ngx_rtmp_mp4.c  
  inflating: nginx-rtmp-module-master/dash/ngx_rtmp_mp4.h  
   creating: nginx-rtmp-module-master/doc/
  inflating: nginx-rtmp-module-master/doc/README.md  
   creating: nginx-rtmp-module-master/hls/
  inflating: nginx-rtmp-module-master/hls/ngx_rtmp_hls_module.c  
  inflating: nginx-rtmp-module-master/hls/ngx_rtmp_mpegts.c  
  inflating: nginx-rtmp-module-master/hls/ngx_rtmp_mpegts.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp_access_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_amf.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_amf.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp_auto_push_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_bandwidth.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_bandwidth.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp_bitop.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_bitop.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp_cmd_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_cmd_module.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp_codec_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_codec_module.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp_control_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_core_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_eval.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_eval.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp_exec_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_flv_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_handler.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_handshake.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_init.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_limit_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_live_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_live_module.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp_log_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_mp4_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_netcall_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_netcall_module.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp_notify_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_play_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_play_module.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp_proxy_protocol.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_proxy_protocol.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp_receive.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_record_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_record_module.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp_relay_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_relay_module.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp_send.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_shared.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_stat_module.c  
  inflating: nginx-rtmp-module-master/ngx_rtmp_streams.h  
  inflating: nginx-rtmp-module-master/ngx_rtmp_version.h  
  inflating: nginx-rtmp-module-master/stat.xsl  
   creating: nginx-rtmp-module-master/test/
  inflating: nginx-rtmp-module-master/test/README.md  
  inflating: nginx-rtmp-module-master/test/dump.sh  
  inflating: nginx-rtmp-module-master/test/ffstream.sh  
  inflating: nginx-rtmp-module-master/test/nginx.conf  
 extracting: nginx-rtmp-module-master/test/play.sh  
   creating: nginx-rtmp-module-master/test/rtmp-publisher/
  inflating: nginx-rtmp-module-master/test/rtmp-publisher/README.md  
  inflating: nginx-rtmp-module-master/test/rtmp-publisher/RtmpPlayer.mxml  
 extracting: nginx-rtmp-module-master/test/rtmp-publisher/RtmpPlayer.swf  
  inflating: nginx-rtmp-module-master/test/rtmp-publisher/RtmpPlayerLight.mxml  
 extracting: nginx-rtmp-module-master/test/rtmp-publisher/RtmpPlayerLight.swf  
  inflating: nginx-rtmp-module-master/test/rtmp-publisher/RtmpPublisher.mxml  
 extracting: nginx-rtmp-module-master/test/rtmp-publisher/RtmpPublisher.swf  
  inflating: nginx-rtmp-module-master/test/rtmp-publisher/player.html  
  inflating: nginx-rtmp-module-master/test/rtmp-publisher/publisher.html  
  inflating: nginx-rtmp-module-master/test/rtmp-publisher/swfobject.js  
   creating: nginx-rtmp-module-master/test/www/
  inflating: nginx-rtmp-module-master/test/www/bg.jpg  
  inflating: nginx-rtmp-module-master/test/www/index.html  
   creating: nginx-rtmp-module-master/test/www/jwplayer/
  inflating: nginx-rtmp-module-master/test/www/jwplayer/jwplayer.flash.swf  
  inflating: nginx-rtmp-module-master/test/www/jwplayer/jwplayer.js  
   creating: nginx-rtmp-module-master/test/www/jwplayer_old/
 extracting: nginx-rtmp-module-master/test/www/jwplayer_old/player.swf  
  inflating: nginx-rtmp-module-master/test/www/jwplayer_old/swfobject.js  
  inflating: nginx-rtmp-module-master/test/www/record.html  
[root@qa-gongneng-bj_10-0-129-98 tools]# ll
总用量 1328
-rw-r--r-- 1 root     root     545945 4月  19 10:24 master.zip
drwxr-xr-x 8 testuser testuser    147 4月   7 2015 nginx-1.6.3
-rw-r--r-- 1 root     root     805253 4月   8 2015 nginx-1.6.3.tar.gz
drwxr-xr-x 6 root     root       4096 11月 29 18:47 nginx-rtmp-module-master

  给nginx安装目录创建软链接:

[root@qa-gongneng-bj_10-0-129-98 tools]# ln -s /home/huangyaoqi/tools/nginx-1.6.3 /home/huangyaoqi/tools/nginx

  配置nginx

[root@qa-gongneng-bj_10-0-129-98 tools]# cd nginx
[root@qa-gongneng-bj_10-0-129-98 nginx]# ./configure --with-http_ssl_module  --add-module=../nginx-rtmp-module-master
checking for OS
 + Linux 3.10.0-123.el7.x86_64 x86_64
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) 
checking for gcc -pipe switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for sys/mount.h ... found
checking for sys/statvfs.h ... found
……后面略……

  确认这部分执行命令成功:

[root@qa-gongneng-bj_10-0-129-98 nginx]# echo $?
0

  编译nginx

[root@qa-gongneng-bj_10-0-129-98 nginx]# make
make -f objs/Makefile
make[1]: 进入目录“/home/huangyaoqi/tools/nginx-1.6.3”
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I../nginx-rtmp-module-master -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs         -o objs/src/core/nginx.o         src/core/nginx.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I../nginx-rtmp-module-master -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs         -o objs/src/core/ngx_log.o         src/core/ngx_log.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I../nginx-rtmp-module-master -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs         -o objs/src/core/ngx_palloc.o         src/core/ngx_palloc.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I../nginx-rtmp-module-master -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs         -o objs/src/core/ngx_array.o         src/core/ngx_array.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I../nginx-rtmp-module-master -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs         -o objs/src/core/ngx_list.o         src/core/ngx_list.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I../nginx-rtmp-module-master -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs         -o objs/src/core/ngx_hash.o         src/core/ngx_hash.c
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I../nginx-rtmp-module-master -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs         -o objs/src/core/ngx_buf.o         src/core/ngx_buf.c
……后面略……

  确认这部分执行命令成功:

[root@qa-gongneng-bj_10-0-129-98 nginx]# echo $?
0

  安装nginx

[root@qa-gongneng-bj_10-0-129-98 nginx]# make install
make -f objs/Makefile install
make[1]: 进入目录“/home/huangyaoqi/tools/nginx-1.6.3”
test -d '/usr/local/nginx' || mkdir -p '/usr/local/nginx'
test -d '/usr/local/nginx/sbin'                 || mkdir -p '/usr/local/nginx/sbin'
test ! -f '/usr/local/nginx/sbin/nginx'                 || mv '/usr/local/nginx/sbin/nginx'                     '/usr/local/nginx/sbin/nginx.old'
cp objs/nginx '/usr/local/nginx/sbin/nginx'
test -d '/usr/local/nginx/conf'                 || mkdir -p '/usr/local/nginx/conf'
cp conf/koi-win '/usr/local/nginx/conf'
cp conf/koi-utf '/usr/local/nginx/conf'
cp conf/win-utf '/usr/local/nginx/conf'
test -f '/usr/local/nginx/conf/mime.types'              || cp conf/mime.types '/usr/local/nginx/conf'
cp conf/mime.types '/usr/local/nginx/conf/mime.types.default'
test -f '/usr/local/nginx/conf/fastcgi_params'          || cp conf/fastcgi_params '/usr/local/nginx/conf'
cp conf/fastcgi_params          '/usr/local/nginx/conf/fastcgi_params.default'
test -f '/usr/local/nginx/conf/fastcgi.conf'            || cp conf/fastcgi.conf '/usr/local/nginx/conf'
cp conf/fastcgi.conf '/usr/local/nginx/conf/fastcgi.conf.default'
test -f '/usr/local/nginx/conf/uwsgi_params'            || cp conf/uwsgi_params '/usr/local/nginx/conf'
cp conf/uwsgi_params            '/usr/local/nginx/conf/uwsgi_params.default'
test -f '/usr/local/nginx/conf/scgi_params'             || cp conf/scgi_params '/usr/local/nginx/conf'
cp conf/scgi_params             '/usr/local/nginx/conf/scgi_params.default'
test -f '/usr/local/nginx/conf/nginx.conf'              || cp conf/nginx.conf '/usr/local/nginx/conf/nginx.conf'
cp conf/nginx.conf '/usr/local/nginx/conf/nginx.conf.default'
test -d '/usr/local/nginx/logs'                 || mkdir -p '/usr/local/nginx/logs'
test -d '/usr/local/nginx/logs' ||              mkdir -p '/usr/local/nginx/logs'
test -d '/usr/local/nginx/html'                 || cp -R html '/usr/local/nginx'
test -d '/usr/local/nginx/logs' ||              mkdir -p '/usr/local/nginx/logs'
make[1]: 离开目录“/home/huangyaoqi/tools/nginx-1.6.3”

  确认这部分执行命令成功:

[root@qa-gongneng-bj_10-0-129-98 nginx]# echo $?
0

  启动nginx服务:

[root@qa-gongneng-bj_10-0-129-98 nginx]# /usr/local/nginx/sbin/nginx

  检查nginx服务版本:

[root@qa-gongneng-bj_10-0-129-98 nginx]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.6.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC) 
TLS SNI support enabled
configure arguments: --with-http_ssl_module --add-module=../nginx-rtmp-module-master

  修改后的nginx配置文件:(“###add 20180419”就是要添加的内容,就2个部分)

[root@qa-gongneng-bj_10-0-129-98 nginx]# cat /usr/local/nginx/conf/nginx.conf
 
#user  nobody;
worker_processes  1;
 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
###add 20180419
rtmp {
    server {
        listen 1935;
 
        application vod {
            play /opt/video; #这是一个目录的名称,如果是linux,则写具体位置如/opt/video
        }
    }
}
##############
 
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  logs/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    #gzip  on;
 
    server {
        listen       80;
        server_name  localhost;
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location / {
            root   html;
            index  index.html index.htm;
        }
 
###add 20180419
        location /test.flv {
            root video;
        }
 
 
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }
 
        location /stat.xsl {
            root html;
        }
 
#############
 
        #error_page  404              /404.html;
 
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
 
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
 
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
 
 
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
 
 
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
 
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
 
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
 
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
 
}

  语法检查:

[root@qa-gongneng-bj_10-0-129-98 nginx]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

  把视频上传到http服务的站点目录:

[root@qa-gongneng-bj_10-0-129-98 nginx]# cd /usr/local/nginx/html/
[root@qa-gongneng-bj_10-0-129-98 html]# ll
总用量 8
-rw-r--r-- 1 root root 537 4月  19 10:31 50x.html
-rw-r--r-- 1 root root 612 4月  19 10:31 index.html
[root@qa-gongneng-bj_10-0-129-98 html]# rz -y
rz waiting to receive.
Starting zmodem transfer.  Press Ctrl+C to cancel.
Transferring sample.mp4...
  100%    1030 KB    1030 KB/sec    00:00:01       0 Errors

  平滑重启nginx服务:(这一步可能不需要强制执行)

[root@qa-gongneng-bj_10-0-129-98 html]# ../sbin/nginx -s reload

  在浏览器打开:测试没有问题

技术分享图片

通过nginx实现浏览器播放视频

标签:nginx 播放 视频

原文地址:http://blog.51cto.com/gagarin/2105373

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!