美文网首页
第一讲:win7下快速搭建媒体服务器的方法

第一讲:win7下快速搭建媒体服务器的方法

作者: 北塔资讯 | 来源:发表于2018-01-24 15:41 被阅读1471次

    万事开头难,当我们接触一个新的领域的时候,最难的是在纷杂的声音中找到适合自己的方式。从理论出发还是从实际出发,这本不是问题。 只要适合自己理解,有利于以后发展的就是好方法 。

    本篇是nginx-rtmp-module系列的第一讲,我的原则是在初期尽量少的介绍理论,从实际操作入手,先以最快的速度看到结果,保持自己的热情不被枯燥的理论浇灭。之后再从协议和封装为突破口,一步步了解视频推流的整个技术体系。

    那好,按照这个原则,本讲的主要内容有:
    1.搭建的方法与媒体服务的选择
    2.简单的推拉流测试

    一、windows环境下,快速搭建RTMP媒体服务的方法

    选择 windows 主要是受项目条件的约束,我的应用环境就部署在客户端,所以我也就写在客户端环境的搭建过程。

    对于媒体服务器的选择有很多,最终选用nginx-rtmp-module也是综合比较之后的结果,我把对标的产品做个简单的介绍。


    媒体服务器的比较

    由于是 windows 环境,可选择的开源项目最后聚焦在这三个产品身上。它们都有各自的特点,比如 liveGo 上来就支持三种协议的输出,如果想以 httpflv 为拉流协议的话,它就是非常好的选择。

    在我的录屏推流方案中,延迟是非常重要的指标,综合再三,我选择nginx-rtmp-module做媒体服务器。

    1、nginx-rtmp-module的最简安装方法

    nginx-rtmp-module是nginx的一个组件,可以自己编译生成(详见第二讲),也可以从网上下载。
    需要注意的是,从nginx官网上下载的版本是不带rtmp模块的,但您可以通过:
    http://nginx-win.ecsds.eu/
    找到包含rtmp组件的nginx版本,比如:nginx 1.7.8.1 Gryphon

    备注:关于rtmp的版本支持详见version.txt中的内容,并不是所有的版本都有rmtp:)
    http://nginx-win.ecsds.eu/download/Readme%20nginx-win%20version.txt
    好了,指定版本的 nginx 下载解压后,可以通过 nginx -V 命令查看组件的支持情况。

    with module

    我把这些信息整理一下,你能看到该版本包含的rtmp模块。


    add rtmp module

    2、nginx-rtmp-module的运行方法

    windows下nginx服务的起停命令

    启动nginx的缺省配置文件是 conf/nginx.conf,一个最简单的流媒体服务配置文件如下:

    #将以下内容拷贝到conf/nginx.conf文件中。
    
    #nginx进程数,建议设置为等于CPU总核心数
    worker_processes  2;
    
    #工作模式与连接数上限
    events {
        worker_connections  8192;
    }
    
    rtmp_auto_push on;
    
    rtmp {
        server {
            listen 1935;
            application myapp {
                live on;
            }       
        }
    }
    

    当然,nginx的启动还可以通过-c 选择指定的配置文件,但是这种方法带来的问题是不能优雅退出,切记!

    nginx -h

    不出意外的话,nginx就这样顺利启动了。下一章,我们简单来验证一下推拉流服务。


    run time

    二、基于ffmpeg的推拉流测试

    ffmpeg是一个自由软件,它提供了一整套多媒体的解决方案,从采集、编码、转换、播放应有尽有。在流媒体应用领域不借助 ffmpeg 的力量,就好比做 windows 程序而不用 Visual Studio ,做 iOSApp 不用 XCode 一样,需要很大的勇气。


    FFmpeg org

    FFmpeg的安装方法我就不说了,直奔主题,从推拉流开始。

    1、应用ffmpeg实现录屏推流

    录屏推流是两个功能的组合,在windows平台下,录屏主要有两种方式:

    • GDI
    • DShow
    多平台的录屏方式

    通过命令行方式,可以直接键入以下命令:

      ffmpeg -f gdigrab -i desktop -f h264 -qp 20 gdiOut.mp4
      ffmpeg -f dshow -i video="screen-capture-recorder"  -f h264 -qp 20 dshowOut.mp4
    

    通过编译方式,抓屏的行为如下:


    C++

    备注:DShow就是DirectShow的缩写,微软在Windows下推出的一套流媒体开发包。简单理解DShow连接的是音视频设备,你的摄像头要依赖DShow,你的USB声卡也需要DShow。

    如上所述,"screen-capture-recorder"是一个虚拟设备,在使用之前,需要安装,链接是:http://sourceforge.net/projects/screencapturer/

    好了,既然录屏都已经实现了,我们把输出改为媒体服务器,就完成了录屏推流的过程。
    命令行的方式为:

    ffmpeg -f gdigrab -i desktop -r 16 -vcodec h264 -acodec aac -f flv rtmp://192.168.10.47/myapp/pc
    

    dshow也可以,方法参照录屏命令!

    录屏推流

    一切正常。如果改用程序调用,过程大体是采集、编码封包和发送,内容如下:


    C++

    2 、应用 ffmpeg 实现拉流播放

    这部分相对简单,原因就在于录屏在 windows 下有两种方式, Linux 有一种, Mac 也有一种。而播放,在全平台都只有一种,就是依赖 ffplay 实现拉流播放。

    比如通过如下命令,就可以播放刚才推的流。

    ffplay.exe rtmp://192.168.10.47/myapp/pc
    
    ffplay

    3、小结

    ffmpeg 还有很多丰富的功能,比如通过以下命令:


    转码分流

    可以轻松地实现多通道转码,甚至剥音频。总之一句话, ffmpeg 是一个巨人,借助它的能力,我们可以迅速实现很多功能。成本低,效率高,速度快。

    流媒体服务器的搭建过程就简单介绍到这了,下一讲主要是nginx与rtmp插件的编译方法和注意事项,再会!

    相关文章

      网友评论

          本文标题:第一讲:win7下快速搭建媒体服务器的方法

          本文链接:https://www.haomeiwen.com/subject/dasuaxtx.html