GithubHelp home page GithubHelp logo

qq1588518 / easydss-kernel Goto Github PK

View Code? Open in Web Editor NEW

This project forked from slove3000/easydss-kernel

1.0 1.0 0.0 120.35 MB

Streaming media middleware,EasyDSS Kernel内核,是EasyDSS流媒体服务的主要核心,支持协议包括RTSP、RTMP、HLS、HTTP-FLV,Easy系列的流媒体服务核心,以稳定、高效、功能丰富、Based on nginx为指标,经过多年的技术积累,现在以技术中台的方式对内、对外一致开放输出;

Home Page: http://open.tsingsee.com/

Batchfile 0.05% Lua 3.23% Shell 0.01% HTML 0.07% CSS 3.70% JavaScript 90.28% Vue 2.65%

easydss-kernel's Introduction

EasyDSS-Kernel

EasyDSS-Kernel是一款高性能流媒体音视频服务软件,是整个Easy系列商业产品的流媒体核心服务,EasyDSS-Kernel是EasyDarwin开源团队TSINGSEE青犀团队经过多年的商业发展和迭代磨砺,集各种大成于一体的商业流媒体服务软件,采用业界优秀的nginx服务框架模式设计,充分秉承了高性能、高并发、高可用、易扩展的设计理念,目前基于EasyDSS-Kernel的多款商业软件(EasyDSS流媒体服务器EasyNVR智能云终端EasyGBS国标流媒体服务EasyNVS视频综合管理平台)已经在旅游业、教育业、物流仓储、平安工地、能源环保、广电行业、工业与物联网、智能农业、视频智能分析等几乎所有的行业都已服务并稳定运营多年。EasyDSS移动互联网时代贴近企业点播/直播需求的一款接地气的流媒体服务器,可以形成一套完整的视频直播、录播解决方案,满足用户在各种行业场景的流媒体业务需求。

EasyDSS-Kernel是一套完全可靠的音视频流媒体服务,可基于EasyDSS-Kernel开发各种各样的流媒体应用!

服务参数

EasyDSS-Kernel在技术上非常好地融合了nginx、nginx-rtmp、flv、live555、ffmpeg等多项流媒体技术之大成:

主要性能参数包括

  • 支持多CPU多核心,能够充分挖掘硬件性能;
  • 7x24 全天候稳定运行;
  • 10Gb网卡,RTMP稳定输出8Gb/s+,HLS稳定输出9Gb/s+,稳定并发5K+连接;
  • 支持视频秒开;
  • 支持master/worker,自动请求master;
  • 支持负载均衡/集群;
  • 支持CDN部署(最大2W节点小型CDN),部署简单;
  • 支持3台控制服务器热备,任意两台出问题不影响服务;
  • 支持Flash RTMP直播推送;
  • 支持RTMP信号源自由切换,播放不间断;
  • 录制回放支持多盘高速读写,硬盘写入与网卡完美匹配,支持分布式存储,可定制各种存储接口;
  • 单台服务器支持域名隔离;

主要技术参数包括

  • 接收RTMP推流:接收RTMP推流客户端推送的RTMP音视频流,并转发给播放客户端;
  • 分发RTMP流:提供RTMP流的高性能分发,RTMP播放客户端可直接连接EasyDSS进行播放;
  • 分发HLS流:提供同步输出HLS流的功能,可以将推送的RTMP流进行实时HLS切片,并提供HLS流的高性能分发;
  • 直播录像:支持将推送的直播流进行同步录像保存;
  • 直播录像检索:支持检索系统的直播录像,提供录像检索和列表接口;
  • 直播录像回放点播:可以点播录制的服务端录像,提供HLS点播,自由seek与倍数播放功能;
  • 录像下载:可以对检索到的录像段进行下载,另存为MP4文件;
  • HTTP服务器:高性能的HTTP服务支持,用于提供HTTP访问,同时用于HLS流分发(具备nginx所有属性功能);
  • 防盗链:支持HTTP防盗链技术;
  • 主动拉取RTMP流进行转发:支持对RTMP流的主动拉取,并将此RTMP流进行RTMP/HLS的转发;
  • 转发RTMP流推送:支持将推送客户端推送的RTMP流,转发推送到其他RTMP流媒体服务器;
  • 推流鉴权验证:支持对推送客户端的推送流进行推流验证,若无权限的推流地址,则不接收客户端推流;
  • 推流信息统计:可以对推送流进行信息统计,包括推送时长、观看人数、起始时间、持续时长、视频码率、音频码率、推送流量等信息;
  • 播放鉴权:支持播放客户端播放验证,无权限的播放地址将无法进行播放;
  • 播放信息统计:对播放客户端的数量进行统计,并且可以统计客户端的开始时间、播放时长、播放流量等信息;
  • 跨平台:平台部署运行,Windows、Linux等;
  • 二次开发:提供HTTP二次开发接口,可使用接口进行一定的二次开发;
  • 支持lua扩展:支持自定义lua脚本扩展服务功能与接口功能;
  • 支持H.265:支持H.265视频编码格式的输入与输出;
  • 支持RTSP:支持同步输出RTSP协议流媒体;
  • 支持推送成功通知
  • 支持推送关闭通知
  • 支持播放前鉴权
  • 支持播放关闭后通知
  • 支持关键帧缓冲,支持直播秒开功能;

关于并发

程序并发没有任何限制,但是实际并发数取决于网卡的速率和CPU的性能以及视频码率。期待大家拿更性能更强的机器测试,性能强劲的机器需要优化easydss.conf发挥多CPU性能

支持的协议

1)输入协议:RTMP; 2)输出协议:RTMP、RTSP、HLS、HTTP-FLV;

目录结构

  • release

    发布目录

  • web_src

    前端网页代码目录

使用方法

如何运行

  • windows

    cd easydss && 以管理员权限运行 install service.bat

  • linux

    cd easydss && sh start.sh

如何配置

配置文件路径:conf/easydss.conf,注意:无论是Windows还是Linux运行EasyDSS流媒体服务器,都不支持中文路径,请大家使用全英文路径

基础功能配置

http{ easydss_host				127.0.0.1;				//本机对外服务IP,默认127.0.0.1
http{ init_by_lua server:set("RECORD_PATH", "www/hls")	//录像检索的路径
http{ server{ listen			10088,					//HTTP服务端口
http{ server{ location{ root	www,					//HTTP Web目录

rtmp{ server{ listen			10085,					//RTMP 服务端口
rtmp{ server{ application{ hls_path	www/hls				//HLS直播切片目录

高级功能配置

1、rtmp功能配置

rtmp {
	server {
		listen $RTMP_PORT;		#rtmp 监听端口,默认10085

		#application可以自定义多个,例如:live/hls/record

		application live {		#rtmp 直播应用
			live on;
		}
		
		application hls {		#hls 直播应用
			live on;			#live 表示只分发 rtmp
			hls on;				#hls 同步输出 rtmp 和 hls 直播
			hls_path $HLS_PATH;	#hls切片目录
			hls_fragment 4s;	#ts 切片时长
		}

		application record {	#record 直播应用
			live on;			#live 表示只分发 rtmp
			hls on;				#hls 同步输出 rtmp 和 hls 直播
			hls_record on;		#不配置或者配置 off 表示不录像,on 表示服务器端同步录像
			hls_path $RECORD_PATH;	#hls录像目录
			hls_fragment 4s;	#ts 切片时长
		}
	}
}

2、rtmp拉流配置

rtmp {
	server {
		#rtmp 监听端口,默认 10085
		listen 10085;

		#自动拉流配置
		application pulltest {
			live on;
			
			#rtmp 地址为拉流地址,name 指定 rtmp 的 name
			pull rtmp://ip:port/app/stream1 name=stream1;
			pull rtmp://ip:port/app/stream2 name=stream2;
			pull rtmp://ip:port/app/stream3 name=stream3;
		}
	}
}

例如配置为

pull rtmp://www.easydass.com:10085/live/livetest name=livetest

则本地EasyDSS的转发地址为

rtmp://ip:port/pulltest/livetest

3、rtmp推流配置

EasyDSS提供rtmp推流转推功能

rtmp {
	server {
		listen 10085;			    #rtmp监听端口,默认10085

		#自动推流配置		
		application pushtest {
			live on;
			
			#rtmp地址为推流地址,name指定rtmp的name
			#当EasyDSS接收app为pushtest,name为stream1的rtmp流时
			#可以同步转发到指定的rtmp推流地址
			push rtmp://ip:port/app/stream1 name=stream1;

			#当EasyDSS接收app为pushtest的推流时
			#可以同步转发到指定的rtmp推流地址
			#rtmp流的name将自动添加到转发地址进行转发
			#如:接收推流为/pushtest/stream
			#则会转发到rtmp://ip:port/app/stream
			push rtmp://ip:port/app;
		}
	}
}

4、防盗链功能配置

http {
	...
    server {
        listen $HTTP_PORT;
		
        location / {
            root $HTTP_ROOT_PATH;
			#Anti-stealing-link
			valid_referers none blocked localhost 127.0.0.1 ~\.baidu\. ~\.google\. addyourdomain;
			if ($invalid_referer) {
				return   403;
			}
        }
	...

addyourdomain 此处替换成您自己的域名如:

www.easydss.com

多个用空格分开,如:

www.easydss.com *.easydss.com

通过以上配置,当在其他网站下试图打开您域名下的视频时, 将会得到 access denied 信息表示防盗链配置成功.

5、接收推流处理-on_publish

rtmp {
    ...
    application live {
        live on;
        ...
        on_publish http://ip:port/xxxxx;
    }
    ...
}

参数说明:

  • method: POST

  • MIME: application/x-www-form-urlencoded

  • args: app - RTMP的application名称

    name - 当前推流的流名称
    
  • response: HTTP code返回200允许推流,其他为不允许

6、接收推流处理结束-on_publish_done

rtmp {
    ...
    application live {
        live on;
        ...
        on_publish_done http://ip:port/xxxxx;
    }
    ...
}

参数说明:

  • method: POST

  • MIME: application/x-www-form-urlencoded

  • args: app - RTMP的application名称

    name - 当前推流的流名称
    
    begintime - 推流开始时间,从1970年1月1日的秒数
    
    duration - 推流持续时间,单位为秒
    
    inbytes - 推流总流量,单位为bytes
    
    outbytes - 客户端播放总流量,单位为bytes
    

7、客户端开始播放处理-on_play

rtmp {
    ...
    application live {
        live on;
        ...
        on_play http://ip:port/xxxxx;
    }
    ...
}

参数说明:

  • method: POST

  • MIME: application/x-www-form-urlencoded

  • args: app - RTMP的application名称

    name - 当前推流的流名称
    
    addr - 客户端地址
    
  • response: HTTP code返回200允许推流,其他为不允许

8、客户端停止播放处理-on_play_done

rtmp {
    ...
    application live {
        live on;
        ...
        on_play_done http://ip:port/xxxxx;
    }
    ...
}

参数说明:

  • method: POST

  • MIME: application/x-www-form-urlencoded

  • args: app - RTMP的application名称

    name - 当前推流的流名称
    
    addr - 客户端地址
    

部署说明

Windows

  • 直接运行

    Windows 版本 EasyDSS 流媒体服务器运行比较简单,直接运行 start.bat 即可,此时可以在 Windows 进程管理器中可以看到 EasyDSS 的进程运行,这里有两点需要注意:

    1. EasyDSS 采用的是多进程模式,所以任务管理器中可能会有多个 EasyDSS.exe 进程;

    2. EasyDSS 运行日志无控制台显示,日志记录在 logs/error.log

  • 以服务的形式运行

    以服务的形式运行程序, 能够达到开机自启动的目的, 方便维护. 在发布包的根目录下有两个脚本文件 install service.batuninstall service.bat, 分别用来安装和卸载 EasyDSS 服务.

Linux

  • 启动服务,运行 easydss 目录里面的 start.sh

    cd easydss ./start.sh

  • 停止服务,运行 stop.sh 即可;

    cd easydss ./stop.sh

启动服务后,在浏览器中打开测试页面,http://ip:10088

业务调用方案

点播调用

  • 以 Windows 文件点播为例

    我们将切片好的demo目录放置到EasyDSS服务器的www目录中,例如:

    www/videos

    那么demo文件的点播地址就是:

    http://{ip}:10088/videos/demo/video.m3u8

直播调用

  • 单次直播/录像/检索/回放流程

    以单次的警用单兵设备直播为例,在警用单兵 APP 中,以每一次案件或者警员出勤为例,我们为每一例案件或者出勤分配一个32位的 ID,然后再调用 EasyRTMP 推送到对应 EasyDSS 流媒体服务器,推送到:

    rtmp://{ip}:{port}/hls/{ID}

    {ip} 为 EasyDSS 流媒体服务器 IP 地址,公网演示用的地址为:www.easydss.com

    {port} 为直播推流端口,默认为 10085

    {ID} 为本次直播的案件 ID 或者出勤记录 ID

    例如:我们推送到

    rtmp://www.easydss.com:10085/hls/b344ab65-0767-448e-beef-b3c7b3344dc4

    那么本次直播现场的实时播放地址为:

    rtmp://www.easydss.com:10085/hls/b344ab65-0767-448e-beef-b3c7b3344dc4

    本次直播的实时录像回放地址可通过 视频回看接口 获取, 再根据侦办过程中的具体时间,对 Playback 地址进行回放即可;

    这样就能够将每一次侦办过程的直播、录像、检索、回放整个流程非常完美地完成!

服务接口

服务对外提供 HTTP RESTful 接口, 方便业务系统集成调用.

获取直播列表

GET /api/v1/getlivesessions

返回结果示例:

{
   "EasyDSS" : {
      "Body" : {
         "SessionCount" : 1,
         "Sessions" : {
            "Sessions" : [
               {
                  "Application" : "hls",
                  "AudioBitrate" : 0,
                  "AudioChannel" : 2,
                  "AudioCodec" : "AAC",
                  "AudioSampleRate" : 8000,
                  "AudioSampleSize" : 16,
                  "HLS" : "/hls/Livestream/Livestream_live.m3u8",
                  "HTTP-FLV" : "/hls/Livestream.flv",
                  "Id" : "Livestream",
                  "InBitrate" : 0,
                  "InBytes" : 167498,
                  "NumOutputs" : 0,
                  "OutBitrate" : 0,
                  "OutBytes" : 0,
                  "RTMP" : "rtmp://192.168.99.199:10085/hls/Livestream",
                  "RTSP" : "rtsp://192.168.99.199:554/Livestream",
                  "StartTime" : 1561102585655,
                  "Time" : "0h 0m 9s",
                  "VideoBitrate" : 0,
                  "VideoCodec" : "H264",
                  "VideoHeight" : 1280,
                  "VideoWidth" : 720
               }
            ]
         }
      },
      "Header" : {
         "Build" : "2019.0620.105128",
         "Copyright" : "www.easydss.com",
         "Version" : "v3.0"
      }
   }
}
字段 说明
Id 直播流ID
Application 直播类型,分为 live 和 hls
HLS hls直播地址
RTMP rtmp直播地址
HTTP-FLV http-flv直播地址
RTSP rtsp直播地址
InBitrate 推流输入码率
OutBitrate 播放输出码率
VideoBitrate 视频码率
AudioBitrate 音频码率
InBytes 推流总流量
OutBytes 客户端播放总流量
NumOutputs 客户端播放人数
Time 直播时长
AudioChannel 音频通道数
AudioCodec 音频编码格式
AudioSampleRate 音频采样率
AudioSampleSize 音频采样大小
StartTime 直播开始时间
VideoCodec 视频编码格式
VideoHeight 视频高
VideoWidth 视频宽

视频回看接口

请求回看设备列表

GET /api/v1/query_record_devices

返回结果示例:

{
	"msg": "success",
	"code": 0,
	"data": {
		"devices": [
			"stream_1000",
			"stream_1001"
		]
	}
}
字段 说明
devices 设备 ID 数组
按月检索录像接口

GET /api/v1/query_record_monthly?id=xxx&period=yyyyMM

参数 类型 说明
id string 指明设备id
period string 格式yyyyMM, 指明查询哪个月的录像记录

返回结果示例: ​ { "data": { "flags" : "00001100..." }, "code": 0, "msg": "成功" }

字段 类型 说明
flags string 固定长度31,每一位只能是"1"或"0", 分别表示当日有没有录像
按日检索录像接口

GET /api/v1/query_record_daily?id=xxx&period=yyyyMMdd

参数 类型 说明
id string 指明设备id
period string 格式yyyyMMdd, 指明查询哪一天的录像记录

返回结果示例:

{
	"data": {
		"list" : [{
			"start_time" : "20170731000000",
			"duration" : 90.00,
			"hls" : "/xxx/20170731000000/xxx_record.m3u8",
			"snap" : "/xxx/20170731000000/xxx_snap.png"
		},{
			"start_time" : "20170731010020",
			"duration" : 89.00,
			"hls" : "/xxx/20170731010020/xxx_record.m3u8",
			"snap" : "/xxx/20170731010020/xxx_snap.png"
		}]
	},
	"code": 0,
	"msg": "成功"
}
字段 类型 说明
start_time string 录像开始时间, 格式: yyyyMMddHHmmss
duration integer 录像历时,单位:秒
hls string 录像文件地址
snap string 录像快照地址
下载录像视频

GET /api/v1/download_video?id=xxx&time=yyyyMMddHHmmss

参数 类型 说明
id string 指明设备id
time string 格式yyyyMMddHHmmss, 所要下载录像视频的起始录制时间

返回结果示例:

{
	"data": {
		"url" : "/hls/1031/20180115/20180115153245/tmp.mp4"
	},
	"code": 0,
	"msg": "success"
}
字段 类型 说明
url string 录像 mp4 文件下载地址

注: 接口返回录像mp4文件下载地址, 客户端立即访问可能404, 因为后台合成mp4文件需要一定时间,客户端可以发起一组循环探测,一旦下载地址不再是404,即可启动下载

删除录像视频(按设备)

GET /api/v1/delete_files_device?id=xxx

参数 类型 说明
id string 指明设备id

注: 不可删除正在推流且开启录像设备录像视频, 业务层可通过获取直播列表接口确认指定设备是否处于推流且开启录像状态

删除录像视频(按月)

GET /api/v1/delete_files_monthly?id=xxx&period=yyyyMM

参数 类型 说明
id string 指明设备id
period string 格式yyyyMM, 指明删除哪个月的录像记录

注: 不可删除正在推流且开启录像设备的当月录像视频, 业务层可通过获取直播列表接口确认指定设备是否处于推流且开启录像状态

删除录像视频(按日)

GET /api/v1/delete_files_daily?id=xxx&period=yyyyMMdd

参数 类型 说明
id string 指明设备id
period string 格式yyyyMMdd, 指明删除哪一天的录像记录

注: 不可删除正在推流且开启录像设备的当日录像视频, 业务层可通过获取直播列表接口确认指定设备是否处于推流且开启录像状态

删除录像视频(按录像文件)

GET /api/v1/delete_file?id=xxx&period=yyyyMMdd&filename=yyyyMMddHHmmss

参数 类型 说明
id string 指明设备id
period string 格式yyyyMMdd, 指明删除哪一天的录像记录
filename string 格式yyyyMMddHHmmss, 指明删除当天哪一条录像文件

注: 不可删除正在推流且开启录像设备的当日录像视频, 业务层可通过获取直播列表接口确认指定设备是否处于推流且开启录像状态

获取基础配置信息

GET /api/v1/getbaseconfig

返回结果示例:

{
   "EasyDSS" : {
      "Body" : {
         "HTTPWanPort" : 10088,
         "RTMPWanPort" : 10085,
         "ServerWanIP" : "127.0.0.1"
      },
      "Header" : {
         "Build" : "2019.0620.105128",
         "Copyright" : "www.easydss.com",
         "Version" : "v3.0"
      }
   }
}
字段 说明
HTTPWanPort HTTP 端口
RTMPWanPort RTMP端口
ServerWanIP 服务器IP

获取服务运行信息

GET /api/v1/getserverinfo

返回结果示例:

{
   "EasyDSS" : {
      "Body" : {
         "Hardware" : "x86",
         "InterfaceVersion" : "v1",
         "LiveCount" : "0,20",
         "ProductType" : 0,
         "RunningTime" : "0 Days 0 Hours 0 Mins 23 Secs",
         "Server" : "EasyDSS-Kernel",
         "Validity" : "Validity Time Left: 9 day(s)",
         "VirtualLiveCount" : "0,20"
      },
      "Header" : {
         "Build" : "2019.0620.105128",
         "Copyright" : "www.easydss.com",
         "Version" : "v3.0"
      }
   }
}
字段 说明
Hardware 硬件信息硬件信息
InterfaceVersion 接口版本
RunningTime 运行时间
Server 软件信息
Validity 授权信息

更多流媒体音视频资源

EasyDarwin开源流媒体服务器:www.EasyDarwin.org

EasyDSS高性能互联网直播服务:www.EasyDSS.com

EasyNVR安防视频可视化服务:www.EasyNVR.com

EasyNVS视频综合管理平台:www.EasyNVS.com

EasyNTS云组网:www.EasyNTS.com

EasyGBS国标GB/T28181服务器:www.EasyGBS.com

EasyRTS应急指挥平台:www.EasyRTS.com

TSINGSEE青犀开放平台:open.TSINGSEE.com

Copyright © www.TSINGSEE.com Team 2012-2019

青犀TSINGSEE

easydss-kernel's People

Contributors

babosa avatar likeadust avatar tsingsee-seven avatar

Stargazers

 avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.