Skip to content

数据库表与字段的解释

chatop2020 edited this page Feb 2, 2021 · 15 revisions

AKStream数据库介绍


数据库组件

  • 采用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

数据库表说明


VideoChannel表

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表

  • 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表

  • 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"字段