zoukankan      html  css  js  c++  java
  • windows下流媒体nginx-rmtp-module服务器搭建及java程序调用fmpeg将rtsp转rtmp直播流【转】

    https://github.com/illuspas/nginx-rtmp-win32

    http://bashell.sinaapp.com/archives/build-nginx-rtmp-module-on-windows.html

    https://github.com/xaccc/nginx-rtmp-win32

    https://github.com/luowei/nginx-rtmp-sample/blob/master/conf/nginx.new.conf

    https://github.com/luowei/nginx-rtmp-sample

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

    第一步:首先介绍一下所用相关技术

    注:项目中使用的jwplayer插件,不支持rtsp协议,所以使用以下技术来进行转艺

    1. FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。在这里我只用到了它的视屏格式转换功能,将rtsp协议的视频流转成rtmp
    2. Rtsp协议(实时流传输协议): 

    公司用的是海康的监控地址为(rtsp://admin:12345@192.168.3.218/h264/ch1/main/av_stream)

         3. Rtmp协议(实时消息传输协议 ):

    RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media Server/Ultrant Media Server/red5/nginx(这里我用到的NGINX)等。

         4.Jwplayer是一个开源的在网页上使用的Flash视频、音频以及图片播放器

    它支持播放的Adobe Flash Player和HTML5浏览器可以处理任何格式(FLV文件,H.264标准,MP4功能,VP8的,WEBM,支持MP3,AAC,JPG,PNG和GIF)。它也支持各种流和播放清单格式(包括RMTP协议,HTTP直播和更多)和多种播放选项。

         5.nginx-rmtp-module是Nginx服务器的流媒体插件:

    Nginx本身是一个非常出色的HTTP服务器,ffmpeg是非常好的音视频解决方案.这两个东西通过一个nginx的模块nginx-rtmp-module,组合在一起即可以搭建一个功能相对比较完善的流媒体服务器.这个流媒体服务器可以支持RTMP和HLS(Live Http Stream)。

    nginx配合ffmpeg做流媒体服务器的原理是:

    nginx通过rtmp模块提供rtmp服务, ffmpeg推送一个rtmp流到nginx, 然后客户端通过访问nginx来收看实时视频流。(这里我是用jwplayer来访问这个rtmp地址)

    第二步:相关软件的配置及应用

    1. 当前使用的nginx-1.5.8版本

    (现在需要使用nginx-rtmp.exe这个程序, 网上可以搜索到该软件已经集成rtmp模块的windows版本)

                           

          2.打开conf文件夹找到nginx.conf文件,配置rtmp

          (添加rtmp{....})

     

        3.运行cmd命令,启动nginx.exe服务

    (start nginx.exe:启动nginx服务,然后看进程中是否有nginx.exe)

     

     

       4.打开网页输入:localhost或者127.0.0.1本机ip

    (显示一下界面说明启动成功)

     

    第三步:相关软件的配置及应用Nginx服务启动之后就可以执行ffmpeg命令进行rtsp协议转成rtmp:

        ffmpeg -i "rtsp://admin:12345@192.168.3.218/h264/ch1/main/av_stream" -f flv -r 25 -s 640x480 -an "rtmp://192.168.3.138:1935/myapp/test2"

    1. 运行cmd:执行ffmpeg命令语句

    ffmpeg:其实就是ffmpeg.exe,运行语句的时候.exe可不要

    -i:后面是我所需要的摄像头协议

    -f flv:后面是我要转到nginx的rtmp服务器上

    -s:视频解析度:(分配率)也就是能调视屏的清晰度,如果在本机上测试建议640*480就好,改变视屏流的解析式cpu会消耗很大

    (rtmp服务地址:rtmp://192.168.3.138:1935/myapp/test2)

    192.168.3.138:nginx启动的机器ip

    1935:端口号(之前在nginx.conf里配置的)

    myapp:是application 后面的名称

    test2:可以随便起,记得到时候访问rtmp时要一致

     

    回车执行ffmpeg语句

    (下面是我执行的结果,证明我的是执行成功的,通过ffmpeg把rtsp协议的摄像头的视屏流一直运行的转到nginx的rtmp视屏流服务器上)

     

    第四步:配置jwplayer: 文件名JWplayer6.8.4616[(2014-06-28)(完美去水印

    (网上下载的资源,这里主要用到jwplayer.js 以及 jwplayer.flash.swf两个,index.html里有一些参数介绍,其它文件的相应介绍自己可以百度jwplayer使用方法)

    注:jwplayer貌似不支持在本地html页面中播放,要在服务器环境中实现播放

    项目里只配置了自己所需的:

     

    附:Java中执行ffmpeg语句如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public static boolean convertProtocol(String ffmpeg,String rtsp, String rtmp,String s){
    //      -f flv -r 25 -s 640x480 -an "rtmp://192.168.3.138:1935/myapp/test2"
            List<String> commend = new ArrayList<String>();
            commend.add(ffmpeg);
            commend.add("-i");
            commend.add("""+rtsp+""");
            commend.add("-f");
            commend.add("flv");
            commend.add("-r");
            commend.add("25");
            commend.add("-s");
            commend.add(s);
            commend.add("-an");
            commend.add(rtmp);
            try {
                ProcessBuilder builder = new ProcessBuilder(); //创建系统进程
                builder.command(commend);
                builder.start();//启动进程
            catch (Exception e) {
                e.printStackTrace();
            }
            return true;
        }

     注:以上所涉及软件都可在网上找到,如果找不到或者有什么问题可微信我微信号:ccbabc

    转载请注明出处谢谢

  • 相关阅读:
    我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承(转载)
    我的WCF之旅(4):WCF中的序列化(Serialization) Part I(转载)
    我的WCF之旅(1):创建一个简单的WCF程序(转载)
    我的WCF之旅(3):在WCF中实现双向通信(Bidirectional Communication)(转载)
    我的WCF之旅(2):Endpoint Overview(转载)
    C#中Attribute特性的用法(转载)
    我的WCF之旅(5):Service Contract中的重载(Overloading)(转载)
    我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutException的原因和解决方案(转载)
    [转] 81条经典话语~~~当裤子失去皮带,才懂得什麽叫做依赖
    HP大中华区总裁孙振耀退休十五天后九大感言,快毕业或者已经毕业的都来看看,与其浑浑噩噩一辈子,不如花这半小时看看
  • 原文地址:https://www.cnblogs.com/fx2008/p/4225701.html
Copyright © 2011-2022 走看看