zoukankan      html  css  js  c++  java
  • nginx + ffmpeg

    第一种方案:ffmpeg+nginx

    新的ffmpeg已经支持HLS。(本人也参与了代码供献,给自己做个广告:))

    点播:

    生成hls分片:

    ffmpeg -i <媒体文件> -c:v libx264 -c:a aac -f hls /usr/local/nginx/html/test.m3u8

    直播:

    ffmpeg -i udp://@:1234 -c:v libx264 -c:a aac -f hls -hls_list_size 5 -hls_wrap 5 /usr/local/nginx/html/test.m3u8

    建立web服务器:

    默认配置就可以。

     server {
            listen       80;
            server_name  localhost;

            #charset koi8-r;

            #access_log  logs/host.access.log  main;

            location / {
                root   html;
                index  index.html index.htm;
            }

    }

    启动nginx。

    客户端访问:http://IP/test.m3u8

    在windows上可以用vlc播放。

    第二个方案,用nginx-rtmp-module

          
    rtmp {
    
        server {
    
            listen 1935;
    
            chunk_size 4000;
          
            #HLS
    
            # For HLS to work please create a directory in tmpfs (/tmp/app here)
            # for the fragments. The directory contents is served via HTTP (see
            # http{} section in config)
            #
            # Incoming stream must be in H264/AAC. For iPhones use baseline H264
            # profile (see ffmpeg example).
            # This example creates RTMP stream from movie ready for HLS:
            #
            # ffmpeg -loglevel verbose -re -i movie.avi  -vcodec libx264 
            #    -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1 
            #    -f flv rtmp://localhost:1935/hls/movie
            #
            # If you need to transcode live stream use 'exec' feature.
            #
            application hls {
                live on;
                hls on;
                hls_path /tmp/app;
                hls_fragment 5s;
            }
        }
    }
    
    http {
    
        server {
    
            listen      80;
            location /hls {
                # Serve HLS fragments
                types {
                    application/vnd.apple.mpegurl m3u8;
                    video/mp2t ts;
                }
                alias /tmp/app;
                expires -1;
            }
        }
    }

    1        功能:

    1.1         视频、音频直播流(Live streaming of video/audio)

    1.2         Flv、mp4视频需求,从本地或HTTP播放(Video ondemand FLV/MP4, playing from local filesystem or HTTP)

    1.3         支持分布式流中继:推或拉模式(Stream relay support for distributed streaming: push & pullmodels)

    1.4         录制FLVS流(Recording streams in multiple FLVs)

    1.5         支持H264/AAC

    1.6         在线用ffmpeg转码(Online transcoding with FFmpeg)

    1.7         HLS (HTTP Live Streaming) 支持

    1.8         基于http的操作(发布、播放、录制)(HTTP callbacks (publish/play/record/update etc))

    1.9         在一定的事件中执行应用程序(Running external programs on certain events (exec))

    1.10      HTTP control module forrecording audio/video and dropping clients

    1.11      高级内存管理技术,快速流和低内存占用(Advanced buffering techniques to keep memory allocations at aminimum level for faster streaming and low memory footprint)

    1.12      实践证明可以在下列产品中工作: Wirecast,FMS,Wowza, JWPlayer,FlowPlayer,StrobeMediaPlayback,ffmpeg,avconv,rtmpdump,flvstreamer and many more

    1.13      Statistics in XML/XSL in machine-& human- readable form

    1.14      Linux/FreeBSD/MacOS/Windows

    2        代码下载:

    Nginx:

    官网:http://nginx.org/

    下载:hg clone http://hg.nginx.org/nginx

    nginx-rtmp-module:

    官网:https://github.com/arut/nginx-rtmp-module

    下载:git clone https://github.com/arut/nginx-rtmp-module.git

    3        编译:

    3.1         Linux下:

    进入nginx源码根目录:

    auto/configure--add-module=<path-to-nginx-rtmp-module>

    make -f objs/Makefile

    make -f objs/Makefile install

     

    增加:http_ssl_module:

    auto/configure--add-module=<path-to-nginx-rtmp-module> --with-http_ssl_module

    3.2   windows下:

    3.2.1 官网提供的编译方法:

    http://nginx.org/en/docs/howto_build_on_win32.html

    3.2.1.1 预备:

    l  Microsoft Visual C compiler.Microsoft Visual Studio® 8 and 10

    l  Msys

    l  Perl(如果要编译OpenSSL并且nginx支持SLL),例如:ActivePerl 或 Strawberry Perl.

    l  PCRE,zlib and OpenSSLlibraries sources.

    3.2.1.2    编译步骤:

    l  设置MSYS、Perl、VC环境变量

    运行vc设置环境变量脚本vcvarsall.bat(默认安装路径:C:Program FilesMicrosoftVisual Studio 9.0VC)

    l  开始MSYS

    l  建立编译和库目录

    mkdir objs

    mkdir objs/lib

    cd objs/lib

    tar -xzf ../../pcre-8.32.tar.gz

    tar -xzf ../../zlib-1.2.7.tar.gz

    tar -xzf ../../openssl-1.0.1e.tar.gz

    l  运行配置脚本:

    auto/configure --with-cc=cl --builddir=objs--prefix=

    --conf-path=conf/nginx.conf--pid-path=logs/nginx.pid

    --http-log-path=logs/access.log--error-log-path=logs/error.log

    --sbin-path=nginx.exe--http-client-body-temp-path=temp/client_body_temp

    --http-proxy-temp-path=temp/proxy_temp

    --http-fastcgi-temp-path=temp/fastcgi_temp

    --with-cc-opt=-DFD_SETSIZE=1024--with-pcre=objs/lib/pcre-8.32

    --with-zlib=objs/lib/zlib-1.2.7--with-openssl=objs/lib/openssl-1.0.1e

    --with-select_module --with-http_ssl_module--with-ipv6

    运行脚本:

    nmake –f objs/Makefile

    3.2.2 Cygwin下:

    linux

    4        Windows下的限制:

    Windows下下列功能不支持:

    l  execs

    l  static pulls

    l  auto_push

    windows下用的是select模式:

    events{

        worker_connections  30; #默认为(1024),windows默认为64,所以需要修改此值小于64

    }

    5        访问URL格式:

    rtmp://rtmp.example.com/app[/name]

    app-应该是配置文件中的application块

    name-可以为空

    6        配置:

    在源码要目下有个test目录。其中有测试配置文件和脚本。

    6.1         点播配置:

    l  环境:

    服务器IP为:192.168.10.4。

    安装根路径:/usr/local/nginx

    在你的配置时,需要把IP换成你的服务器IP或域名。

    l  建立媒体文件夹:

    mkdir /usr/local/nginx/vod/flvs

    l  准备媒体文件:

    把媒体文件 a.flv 复制到 /usr/local/nginx/vod/flvs目录下。

    l  准备网页

    下载jwplayer:http://www.longtailvideo.com/players/jw-flv-player/

    下载后,解压到:/usr/local/nginx/html/

    建立测试页面test.html,也放到上面目录下。

    <html>

             <head>

                       <scriptsrc="/jwplayer/jwplayer.js"></script>

             </head>

             <body>

                       <divid='my-video'></div>

                       <scripttype='text/javascript'>

                                jwplayer('my-video').setup({

                                         file:'rtmp://192.168.10.4/vod/a.flv',    

                                         '50%',

                                         aspectratio:'3:2',

                                         fallback:'false',

                                         primary:'flash'  

                                         });

                       </script>

             </body>

    </html>

    l  在nginx中配置http

    #配置事件工作线程数

    events {

       worker_connections  30; #默认为(1024),windows默认为64,所以需要修改此值小于64

    }

    #配置http

    http {

       include       mime.types;

       default_type application/octet-stream;

        #配置访问web页

       server {

           listen       80;

           server_name  localhost;

           #charset koi8-r;

           #access_log logs/host.access.log  main;

           location / {

               root   html;

               index  index.html index.htm;

           }

           #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;

           }

       }

      

       #配置rtmp状态页

      server {

           listen      8080;

           location /stat {

               rtmp_stat all;

               rtmp_stat_stylesheet stat.xsl;

           }

           location /stat.xsl {

               root /usr/local/nginx/nginx-rtmp-module/;  #在nginx-rtmp-module源码根目录

           }

       }

    }

    #rtmp点播配置

    rtmp {

       server {

            listen 1935;

            chunk_size 4000;

            application  vod {

                    play /usr/local/nginx/vod/flvs;  #点播媒体文件存放目录

            }

        }

    }

    l  启动nginx

    ./nginx

    l  从客户端访问网页:

    http://192.168.10.4/test.html

    l  访问rtmp状态页(非必须):

    http://192.168.10.4:8080/stat

    6.2         直播配置:

    l   

    l  在配置文件nginx.conf中加入

    #rtmp直播配置

    rtmp {

       server {

            listen 1935;

            chunk_size 4000;

            application  live {

                       live on;

            }

        }

    }

    #配置访问web页

    http {

        include       mime.types;

       default_type application/octet-stream;

    #配置访问web页

       server {

           listen       80;

           server_name  localhost;

           #charset koi8-r;

           #access_log logs/host.access.log  main;

           location / {

               root   html;

               index  index.html index.htm;

           }

           #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;

           }

    #配置rtmp状态页

       server {

           listen      8080;

           location /stat {

               rtmp_stat all;

               rtmp_stat_stylesheet stat.xsl;

           }

           location /stat.xsl {

               root /usr/local/nginx/nginx-rtmp-module/;  #在nginx-rtmp-module源码根目录

           }

    }

    }

    l  访问rtmp状态页(非必须):

    http://192.168.10.4:8080/stat

    可以查看rtmp流的统计情况

    l  准备网页

    下载jwplayer:http://www.longtailvideo.com/players/jw-flv-player/

    下载后,解压到:/usr/local/nginx/html/

    建立测试页面test.html,也放到上面目录下。

    <html>

             <head>

                       <scriptsrc="/jwplayer/jwplayer.js"></script>

             </head>

             <body>

                       <divid='my-video'></div>

                       <scripttype='text/javascript'>

                                jwplayer('my-video').setup({

                                   file:'rtmp://192.168.0.128/live/test', #live是applicatioin,test是直播缓存流文件

                                         '50%',

                                         aspectratio:'3:2',

                                         fallback:'false',

                                         primary:'flash'  

                                         });

                       </script>

             </body>

    </html>

    l  启动服务

    nginx

    l  推流

    用ffmpeg产生一个模拟直播源,向rtmp服务器推送

    ffmpeg –i/usr/local/nginx/vod/flvs/a.flv-strict -2 -c:v libx264 -c:a aac -f flv rtmp://192.168.10.4/live/test

    注意,源文件必须是H.264+AAC编码的。

    192.168.10.4是运行nginx的服务器IP,l

    ive是applicatioin,

    test是直播缓存流文件,需要与配置文件中的直播缓存文件名一样。

     

    l  从客户端访问网页:

    http://192.168.10.4/test.html

  • 相关阅读:
    (8)ftp配置文档
    (6)centos安装和解压
    (8)python tkinter-画布
    (7)python tkinter-菜单栏
    (6)python tkinter-容器、子窗体
    (5)python tkinter-单选、多选
    bzoj1096 [ZJOI2007]仓库建设
    hdu3507 Print Article(斜率DP优化)
    bzoj1996 [Hnoi2010]chorus 合唱队
    跳石头
  • 原文地址:https://www.cnblogs.com/hujihon/p/4979491.html
Copyright © 2011-2022 走看看