-
Notifications
You must be signed in to change notification settings - Fork 344
数据库表与字段的解释
chatop2020 edited this page Feb 2, 2021
·
15 revisions
- 采用FreeSql做为AKStream的数据库组件,FreeSql支持绝大多数关系型数据库,是.net领域不可多得的数据库治理组件;AKStream利用FreeSql进行数据库连接,表生成及相关增删了改查操作
- AKStream采用CodeFirst模式,只需要在数据库中创建与配置文件中相对应的数据库即可,AKStream在启动时会根据配置文件中的数据库连接串连接数据库,并且根据需要创建所需的各类数据库
- AKStream采用的编码格式是UTF-8,请创建数据库时采用UTF-8编码
- 根据实际测试,如选用Mysql数据库,则版本最低需要5.7及以上
- 数据库表对应结构在程序中LibCommon.Structs.DBModels NameSpace内定义
- 如下是一个配置实例:
{
"MediaServerFirstToRestart": true,
"DbType": "MySql",
"OrmConnStr": "Data Source=192.168.2.26;Port=3307;User ID=root;Password=root; Initial Catalog=AKStream;Charset=utf8; SslMode=none;Min pool size=1;",
"WebApiPort": 5800,
"AccessKey": "047I4WS1-U51UBO6W-1J4BT21P-MF17IT99-92J8WIHU-944Q4KIW",
"HttpClientTimeoutSec": 5
}
- 这个配置中DbType,OrmConnStr两个字段是用于数据库配置的,DbType指定了数据库类型,OrmConnStr指定了连接数据库的连接串,不同的数据库类型拥有不同格式的OrmConnStr连接字符串和不同的DbType,因此具体采用哪种数据库,DbType和OrmConnStr的具体写法请参考下表
- MySql Data Source=127.0.0.1;Port=3306;User ID=root;Password=root; Initial Catalog=cccddd;Charset=utf8; SslMode=none;Min pool size=1
- PostgreSQL Host=192.168.164.10;Port=5432;Username=postgres;Password=123456; Database=tedb;Pooling=true;Minimum Pool Size=1
- SqlServer Data Source=.;User Id=sa;Password=123456;Initial Catalog=freesqlTest;Pooling=true;Min Pool Size=1
- Oracle user id=user1;password=123456; data source=//127.0.0.1:1521/XE;Pooling=true;Min Pool Size=1
- Sqlite Data Source=|DataDirectory|\document.db; Attachs=xxxtb.db; Pooling=true;Min Pool Size=1
- Firebird database=localhost:D:\fbdata\EXAMPLES.fdb;user=sysdba;password=123456
- MsAccess Provider=Microsoft.Jet.OleDb.4.0;Data Source=d:/accdb/2003.mdb
- Dameng(达梦) server=127.0.0.1;port=5236;user id=2user;password=123456789;database=2user;poolsize=5
- ShenTong(神通) HOST=192.168.164.10;PORT=2003;DATABASE=OSRDB;USERNAME=SYSDBA;PASSWORD=szoscar55;MAXPOOLSIZE=2
- KingbaseES(人大金仓) Server=127.0.0.1;Port=54321;UID=USER2;PWD=123456789;database=TEST;MAXPOOLSIZE=2
- OdbcMySql Driver={MySQL ODBC 8.0 Unicode Driver}; Server=127.0.0.1;Persist Security Info=False; Trusted_Connection=Yes;UID=root;PWD=root; DATABASE=cccddd_odbc;Charset=utf8; SslMode=none;Min Pool Size=1
- OdbcSqlServer Driver={SQL Server};Server=.;Persist Security Info=False; Trusted_Connection=Yes;Integrated Security=True; DATABASE=freesqlTest_odbc; Pooling=true;Min Pool Size=1
- OdbcOracle Driver={Oracle in XE};Server=//127.0.0.1:1521/XE; Persist Security Info=False; Trusted_Connection=Yes;UID=odbc1;PWD=123456; Min Pool Size=1
- OdbcPostgreSQL Driver={PostgreSQL Unicode(x64)};Server=192.168.164.10; Port=5432;UID=postgres;PWD=123456; Database=tedb_odbc;Pooling=true;Min Pool Size=1
- OdbcDameng (达梦) Driver={DM8 ODBC DRIVER};Server=127.0.0.1:5236; Persist Security Info=False; Trusted_Connection=Yes; UID=USER1;PWD=123456789
- OdbcKingbaseES (人大金仓) Driver={KingbaseES 8.2 ODBC Driver ANSI};Server=127.0.0.1;Port=54321;UID=USER2;PWD=123456789;database=TEST
- Odbc Driver={SQL Server};Server=.;Persist Security Info=False; Trusted_Connection=Yes;Integrated Security=True; DATABASE=freesqlTest_odbc; Pooling=true;Min pool size=1
- 具体详细的FreeSql使用方法及更多信息请查看FreeSql官方Wiki
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for VideoChannels
-- ----------------------------
DROP TABLE IF EXISTS `VideoChannels`;
CREATE TABLE `VideoChannels` (
`Id` bigint NOT NULL AUTO_INCREMENT COMMENT '数据库主键',
`MainId` varchar(32) NOT NULL COMMENT '设备的唯一ID',
`MediaServerId` varchar(64) NOT NULL COMMENT '流媒体服务器ID',
`Vhost` varchar(64) NOT NULL COMMENT 'vhost',
`App` varchar(64) NOT NULL COMMENT 'app',
`ChannelName` varchar(64) DEFAULT NULL COMMENT '通道名称,整个系统唯一',
`DepartmentId` varchar(20) DEFAULT NULL COMMENT '部门代码',
`DepartmentName` varchar(64) DEFAULT NULL COMMENT '部门名称',
`PDepartmentId` varchar(20) DEFAULT NULL COMMENT '上级部门代码',
`PDepartmentName` varchar(64) DEFAULT NULL COMMENT '上级部门名称',
`DeviceNetworkType` varchar(255) DEFAULT NULL COMMENT '设备的网络类型',
`DeviceStreamType` varchar(255) DEFAULT NULL COMMENT '设备的流类型',
`MethodByGetStream` varchar(255) DEFAULT NULL COMMENT '使用哪种方式拉取非rtp设备的流',
`VideoDeviceType` varchar(255) DEFAULT NULL COMMENT '设备类型,IPC,NVR,DVR',
`AutoVideo` bit(1) NOT NULL COMMENT '是否自动启用推拉流',
`AutoRecord` bit(1) NOT NULL COMMENT '是否自动启用录制计划',
`RecordSecs` int DEFAULT NULL COMMENT '此通道录制时的文件切片时长(秒)',
`RecordPlanName` varchar(255) DEFAULT NULL COMMENT '录制计划模板名称',
`IpV4Address` varchar(16) DEFAULT NULL COMMENT '设备的ipv4地址',
`IpV6Address` varchar(64) DEFAULT NULL COMMENT '设备的ipv6地址',
`HasPtz` bit(1) NOT NULL COMMENT '设备是否有云台控制',
`DeviceId` varchar(20) DEFAULT NULL COMMENT 'GB28181设备的SipDevice.DeviceId',
`ChannelId` varchar(20) DEFAULT NULL COMMENT 'GB28181设备的SipChannel.DeviceId',
`RtpWithTcp` bit(1) DEFAULT NULL COMMENT 'Rtp设备是否使用Tcp推流',
`VideoSrcUrl` varchar(255) DEFAULT NULL COMMENT '非Rtp设备的视频流源地址',
`DefaultRtpPort` bit(1) DEFAULT NULL COMMENT 'Rtp设备是否使用流媒体默认rtp端口,如10000端口',
`CreateTime` datetime(3) NOT NULL COMMENT '创建时间',
`UpdateTime` datetime(3) NOT NULL COMMENT '更新时间',
`Enabled` bit(1) DEFAULT NULL COMMENT '是否启用',
`NoPlayerBreak` bit(1) DEFAULT NULL COMMENT '无人观察时断开流端口,此字段为true时AutoVideo字段必须为Flase\n 如果AutoVideo为true,则此字段无效',
PRIMARY KEY (`Id`),
UNIQUE KEY `idx_vcs_maid` (`MainId`),
KEY `idx_vcs_chnn` (`ChannelName`),
KEY `idx_vcs_msid` (`MediaServerId`),
KEY `idx_vcs_dept` (`DepartmentId`),
KEY `idx_vcs_ipv4` (`IpV4Address`),
KEY `idx_vcs_ipv6` (`IpV6Address`),
KEY `idx_vcs_enbl` (`Enabled`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='摄像头通道实例';
SET FOREIGN_KEY_CHECKS = 1;
- "MainId" 此ID是全局唯一的,根据一定的算法,可确保每个通道唯一,此ID同时是ZLMediaKit的StreamId,是GB28181 SDP中SSRC值的CRC32结果
- "MediaServerId" 此ID确定了此音视频通道归属于哪个流媒体服务器
- "RecordSecs" 此字段指定了,该通道在录制时,每个文件录制的时长,表示多少时间(秒)换一个文件
- "DeviceNetworkType" 此字段表示设备的网络类型,在程序中是一个枚举类型,在数据库中表现为Varchar字段,其枚举定义如下:
public enum DeviceNetworkType
{
Mobile, //移动网络
Fixed //固定网络
}
- "DeviceStreamType" 此字段表示设备的流类型,在程序中是一个枚举类型,在数据库中表现为Varchar字段,其枚举定义如下:
public enum DeviceStreamType
{
GB28181, //gb28181流
Rtsp, //rtsp流
Http, //http流
Rtmp //rtmp流
}
- "MethodByGetStream" 此字段表示非GB28181音视频通道的拉流方法类型,在程序中是一个枚举类型,在数据库中表现为Varchar字段,其枚举定义如下:
public enum MethodByGetStream
{
SelfMethod, //内置方法AddStreamProxy,非GB28181音视频流时使用
UseFFmpeg, //引用ffmpeg,AddFFmpegSourceProxy,非GB28181音视频流时使用
None, //不需要,不做处理,GB28181音视频流时应该使用这个枚举值
}
- 此字段为SelfMethod时,AKStream拉流方法使用内置流代理器,为UseFFmpeg时拉流方法使用FFmpeg流代理器
- "VideoDeviceType" 此字段表示音视频通道的设备类型,在程序中是一个枚举类型,在数据库中表现为Varchar字段,其枚举定义如下:
public enum VideoDeviceType
{
IPC, //网络摄像机
NVR, //nvr
DVR, //dvr
UNKNOW, //未知设备
}
- "AutoVideo" 为true时AKStream自动对其进行推拉流
- "AutoRecord" 为true时AKStream自动对其进行文件录制,前提条件是要绑定录制计划模板,并且此模板为可用状态
- "RecordPlanName" 录制计划的模板名称,绑定以后才拥有录制视频的能力
- "HasPtz" GB28181音视频通道下,此字段表示该通道有无云台控制,true时AKStream认为此通道有云台,即可通过发送Sip信令来控制云台动作
- "RtpWithTcp" 此字段表示,是否使用tcp模式实现GB28181推流,及采用SelfMethod方式拉rtsp流时是否采用tcp模式拉流
- "DeviceId"和"ChannelId"是一组数据,两个组合唯一指定了一条GB28181的音视频通道,这是数据库的联合唯一键,全局只能有一份,否则将会报错
- "VideoSrcUrl" 非GB28181音视频通道的视频流源地址,如rtsp,rtmp,http等方式提供的音视频流将源地址写到这个字段中,AKStream会通过这个字段进行拉流
- "DefaultRtpPort" GB28181音视频通道是否采用ZLMediaKit默认的RtpProxy端口(10000端口),如果为true则使用10000端口,false则在rtp端口范围内找一个可以使用的端口来使用,建议udp推流模式下使这个字段为false
- "Enabled" 表示激活状态,true为已激活,false为未激活,AKStream对未激活状态的音视频通道保持缄默,不在实际运作中对其产生影响(除激活动作和查询未激活音视频通道动作以外)
- “NoPlayerBreak” 无人观看时是否断流,当AKStream发现此通道无人观看时,通过此字段来确定是否要断开推拉流,此字段为true时请保证AutoVideo字段为false,否则将不起作用
- RecordFile表是录制文件记录表,所有录制文件都会记录在这张表里
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for RecordFile
-- ----------------------------
DROP TABLE IF EXISTS `RecordFile`;
CREATE TABLE `RecordFile` (
`Id` bigint NOT NULL AUTO_INCREMENT COMMENT '数据库主键',
`MainId` varchar(255) DEFAULT NULL COMMENT '通道唯一id',
`MediaServerId` varchar(255) DEFAULT NULL COMMENT '流媒体服务器ID',
`MediaServerIp` varchar(255) DEFAULT NULL COMMENT '流媒体服务器IP地址',
`ChannelName` varchar(255) DEFAULT NULL COMMENT '通道名称',
`DepartmentId` varchar(255) DEFAULT NULL COMMENT '部门代码',
`DepartmentName` varchar(255) DEFAULT NULL COMMENT '部门名称',
`PDepartmentId` varchar(255) DEFAULT NULL COMMENT '上级部门代码',
`PDepartmentName` varchar(255) DEFAULT NULL COMMENT '上级部门名称',
`DeviceId` varchar(255) DEFAULT NULL COMMENT 'GB28181设备ID',
`ChannelId` varchar(255) DEFAULT NULL COMMENT 'GB21818设备通道ID',
`VideoSrcUrl` varchar(255) DEFAULT NULL COMMENT '非gb28181设备的视频流源地址',
`StartTime` datetime(3) DEFAULT NULL COMMENT '文件的开始时间',
`EndTime` datetime(3) DEFAULT NULL COMMENT '文件的结束时间',
`Duration` bigint DEFAULT NULL COMMENT '文件的时长',
`VideoPath` varchar(255) DEFAULT NULL COMMENT '文件的所在位置',
`FileSize` bigint DEFAULT NULL COMMENT '文件大小',
`Vhost` varchar(255) DEFAULT NULL COMMENT 'vhost',
`Streamid` varchar(255) DEFAULT NULL COMMENT 'stream',
`App` varchar(255) DEFAULT NULL COMMENT 'app',
`DownloadUrl` varchar(255) DEFAULT NULL COMMENT '文件下载与播放地址',
`CreateTime` datetime(3) NOT NULL COMMENT '记录创建时间',
`UpdateTime` datetime(3) DEFAULT NULL COMMENT '记录更新时间',
`RecordDate` varchar(255) DEFAULT NULL COMMENT '记录日期',
`Undo` bit(1) DEFAULT NULL COMMENT '是否可撤销删除操作',
`Deleted` bit(1) DEFAULT NULL COMMENT '是否删除',
PRIMARY KEY (`Id`),
KEY `idx_rfs_maid` (`MainId`),
KEY `idx_rfs_chnn` (`ChannelName`),
KEY `idx_rfs_msid` (`MediaServerId`),
KEY `idx_rfs_dept` (`DepartmentId`),
KEY `idx_rfs_del` (`Deleted`),
KEY `idx_rfs_undo` (`Undo`),
KEY `idx_rfs_setime` (`StartTime`,`EndTime`),
KEY `idx_rfs_stime` (`StartTime`),
KEY `idx_rfs_etime` (`EndTime`),
KEY `idx_rfs_rede` (`RecordDate`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='录制文件实例';
SET FOREIGN_KEY_CHECKS = 1;
- "Undo" 这是删除恢复标记,AKStream提供软删除功能,通过软删除方式删除的录制文件Undo字段被标记成true,表示这个删除可以被删除;软删除时录制文件不会被立即删除,只是标记成已删除(Deleted字段为true),可以通过AKStream提供的恢复软删除功能来恢复它,恢复以后Undo字段为False,同时Deleted字段也被设置成flase
- "DownloadUrl" 这个字段是录像文件播放与下载地址
- RecordPlan和RecordPlanRange两张表相互配合,一起完成录制计划模板数据的存储
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for RecordPlan
-- ----------------------------
DROP TABLE IF EXISTS `RecordPlan`;
CREATE TABLE `RecordPlan` (
`Id` int NOT NULL AUTO_INCREMENT COMMENT '数据库主键',
`Name` varchar(255) DEFAULT NULL COMMENT '录制计划名称',
`Enable` bit(1) NOT NULL COMMENT '是否启用该录制计划(true为启用)',
`Describe` varchar(255) DEFAULT NULL COMMENT '录制计划的描述',
`LimitSpace` bigint DEFAULT NULL COMMENT '录制占用空间限制(Byte),最大录制到某个值后做相应处理',
`LimitDays` int DEFAULT NULL COMMENT '录制占用天数限制,最大录制到某个值后做相应处理',
`OverStepPlan` varchar(255) DEFAULT NULL COMMENT '具体的录制计划列表',
PRIMARY KEY (`Id`),
UNIQUE KEY `idx_rp_name` (`Name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='录制计划,是数据库StreamDvrPlan表的字段映射';
SET FOREIGN_KEY_CHECKS = 1;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for RecordPlanRange
-- ----------------------------
DROP TABLE IF EXISTS `RecordPlanRange`;
CREATE TABLE `RecordPlanRange` (
`Id` int NOT NULL AUTO_INCREMENT COMMENT '数据库主键',
`RecordPlanId` int NOT NULL COMMENT '计划任务表的主键',
`WeekDay` varchar(255) DEFAULT NULL COMMENT '星期n枚举',
`StartTime` datetime(3) NOT NULL COMMENT '录制开始时间(只取时间部分)',
`EndTime` datetime(3) NOT NULL COMMENT '录制结束时间(只取时间部分)',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='录制计划详细计划的结构,是数据库DvrDayTimeRange表的字段映射';
SET FOREIGN_KEY_CHECKS = 1;
- "RecordPlan.Name" 录制模板的名称,有全库唯一性,不能重复,也是VideoChannel表中记录需要绑定的录制计划模板名称
- "RecordPlan.Enable" 录制模板是否启用,如果此字段为false,则所有绑定此模板的VideoChannel也将失去录制功能
- "RecordPlanRange.WeekDay" 此字段表示星期几,在程序中是一个枚举类型,在数据库中表现为Varchar字段,其枚举定义如下:
public enum DayOfWeek
{
Sunday, //星期天
Monday, //星期一
Tuesday, //星期二
Wednesday, //星期三
Thursday, //星期四
Friday, //星期五
Saturday, //星期六
}
- "RecordPlanRange.RecordPlanId" 此字段对应"RecordPlan.Id"字段