• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

easystream: rtsp转rtmp,hlv,hls播放流框架

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

easystream

开源软件地址:

https://gitee.com/null_166_0518/easystream

开源软件介绍:

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@EasystreamScanpublic class MyApplication {  public static void main(String[] args) {      SpringApplication.run(MyApplication.class, args);   }}

第三步:调用接口

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

// 注入接口实例@Autowiredprivate 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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap