1 Star 0 Fork 10

sunbenbao / easystream

forked from xianyu_java / easystream 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

EASYSTREAM FOR SPRINGBOOT

JDK License

easystream - 简单的rtsp转rtmp,hlv,hls播放流框架

项目介绍:

easystream是一个对海康大华rtsp二次封装转换为web直播流的框架。
利用nginx实现rtmp、hlv、hls格式播放视频。windows下编译过的nginx请项目中下载,Linux下需动态编译需要欢迎索取。

easystream配置加到application.yml

easystream:
  #对应推送的nginx服务地址
  push_host: 192.168.200.2
  #直播流保活时间(分钟)
  keepalive: 1
  #额外推送地址
  host_extra: 127.0.0.1
  #nginx推送端口
  push_port: 1935
  #主码流最大码率
  main_code: 5120
  #子码流最大码率
  sub_code: 1024
  #1nvr,2,合成服务
  rtsptype: 1
  #nginx视频流访问端口
  access_port: 8085

极速开始

以下例子基于Spring Boot

第一步:添加Maven依赖

直接添加以下maven依赖即可

<dependency>
    <groupId>com.github.xianyujava</groupId>
     <artifactId>easystream-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>

第二步:扫描接口

在Spring Boot的配置类或者启动类上加上@EasystreamScan注解

@SpringBootApplication
@Configuration
@EasystreamScan
public class MyApplication {
  public static void main(String[] args) {
      SpringApplication.run(MyApplication.class, args);
   }
}

第三步:调用接口

OK,我们可以愉快地调用接口了

// 注入接口实例
@Autowired
private EasysteamService easysteamService;
...

开启视频流

/**
 * CameraPojo 实体属性 
 *  private String username = "";// 摄像头账号
    private String password = "";// 摄像头密码
    private String ip = "";// 摄像头ip
    private String port = "8000";
    private String channel = "";// 摄像头通道
    private String stream = "1";// 摄像头码流 1主码流,2子码流
    private String rtsp = "";// 返回的rtsp地址
    private String rtmp = "";// 返回的rtmp地址
    private String url = "";// 返回的hlv播放地址
    private String startTime = "";// 回放开始时间,回放时候才要赋值
    private String endTime = "";// 回放结束时间,回放时候才要赋值
    private String openTime = "";// 打开时间
    private int count = 0;// 默认使用人数
    private String token = "";//直播和回放必须指定一个唯一标志
    private String hls = "";//返回hls播放
    private String type="";//默认空为合成视频,0:nvr,1:ipc
********************************************

    方法传入参数pojo实体必须赋值如下参数
        username = "";// 摄像头账号
        password = "";// 摄像头密码
        ip = "";// 摄像头ip
        port = "8000";
        channel = "";// 摄像头通道
        token = "";//直播和回放必须指定一个唯一标志
        type="";//默认空为合成视频,0:nvr,1:ipc
********************************************
    当打开回放流必须传入
        startTime = "";// 回放开始时间,回放时候才要赋值
        endTime = "";// 回放结束时间,回放时候才要赋值
********************************************    
    方法返回result 为CameraPojo的json字符串,其中播放地址回返回在其中
        rtsp = "";// 返回的rtsp地址
        rtmp = "";// 返回的rtmp地址
        url = "";// 返回的hlv播放地址
        hls = "";//返回hls播放
 */
String result = easysteamService.openCamera(CameraPojo pojo);

关闭直播视频流

/**
 * tokens为打开视频流的时的token,多个用逗号分隔;例如1,3
 */
String result = easysteamService.closeCamera(String tokens);

关闭回放视频流

/**
 * tokens为打开视频流的时的token,多个用逗号分隔;例如1,3
 */
String result = easysteamService.closeHistoryCamera(String tokens);

视频流保活,定时调用此方法否则超时会停止转码流

/**
 * tokens为打开视频流的时的token,多个用逗号分隔;例如1,3
 */
String result = easysteamService.keepAlive(String tokens);

视频回放流保活,定时调用此方法否则超时会停止转码流

/**
 * tokens为打开视频流的时的token,多个用逗号分隔;例如1,3
 */
String result = easysteamService.keepPlayBackAlive(String tokens);

前端页面播样例:这里用了flv.js库

<script src="../../lib/media/flv1.5.js"></script>

<video id="video_3"  autoplay="autoplay" height="100%" width="100%"></video>
function playvidoe(param, timer,id) {
  
    $.ajax({
        type: 'POST',
        url: '/nslcloud/rtmp/cameras',
        dataType: 'json',
        data: {
            'ip': param.videoip,
            'port': param.videoport,
            'username': param.username,
            'password': param.password,
            'channel': param.monitortdh,
            'type': param.type,
            'token': param.videoid,
            'kcdm' : param.kcdm
        },
        success: function (json) {
            //json=JSON.parse(json)
            //alert(json.url);
            var ieversion = IEVersion();
            if (json.url != '') {
                //if (flvjs.isSupported()) {
                if (ieversion == 99) {
                    var videoElement = document.getElementById('video_' + id);
                    var flvPlayer = flvjs.createPlayer({
                        type: 'flv',
                        //height:'1040px',
                        url: json.url
                    });

                    flvPlayer.attachMediaElement(videoElement);
                    flvPlayer.load();
                    flvPlayer.play();
                    //flvid[id] = flvPlayer;
                    flvid.put(id, flvPlayer);
                    kcdms.put(id,param);
                } else {
                    videojs('video_' + id).ready(
                        function () {
                            //alert("1111");
                            var myPlayer5 = this;
                            myPlayer5.src({type: "rtmp/flv", src: json.rtmp});
                            myPlayer5.load(json.rtmp);
                            //myPlayer5.src({type: "rtmp/flv", src: json.hls});
                            //myPlayer5.load(json.hls);
                            myPlayer5.play();
                            this.on('play', function () {//开始播放
                                //flvid[id] = myPlayer5;
                                flvid.put(id, myPlayer5);
                                kcdms.put(id,param);
                            });
                        }
                    );
                }

                var interval = setInterval(function () {
                    $.ajax({
                        type: 'POST',
                        url: '/nslcloud/rtmp/keepAlive',
                        dataType: 'json',
                        traditional: true,//这里设置为true
                        headers: {
                            'Authorization': sessionStorage.getItem('Authorization')
                        },
                        data: {
                            'tokens': param.videoid,
                            'kcdm' : param.kcdm
                        }, success: function (json) {

                        }
                    });
                }, 10000, 3000);
                if (timer.containsKey(id)) {
                    clearInterval(timer.get(id));
                    timer.remove(id);
                }
                //timer[id] = interval;
                timer.put(id, interval);
                // }
            } else {

                alert("无视频源!");
            }
        },
        error: function (data) {
            alert("请求错误!");
        }
    });

}

联系作者:

亲,进群前记得先star一下哦~

项目协议

The MIT License (MIT)

Copyright (c) 2020 jian yu

MIT License Copyright (c) 2020 xianyu_java Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

rtsp转rtmp,hlv,hls播放流框架 展开 收起
Java
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/qq_connect-sunbenbao/easystream.git
git@gitee.com:qq_connect-sunbenbao/easystream.git
qq_connect-sunbenbao
easystream
easystream
master

搜索帮助