public List <CameraInstance> GetCameraInstanceList(string mediaServerId) { ResponseStruct rs; var ret = MediaServerApis.GetCameraInstanceList(mediaServerId, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } return(ret); }
public bool SoftDeleteDvrVideoById(long dvrVideoId) { ResponseStruct rs; var ret = MediaServerApis.SoftDeleteDvrVideoById(dvrVideoId, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } return(ret); }
public bool StartMediaServer(string mediaServerId) { ResponseStruct rs; var ret = MediaServerApis.StartMediaServer(mediaServerId, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } return(ret); }
public List <CutMergeTaskStatusResponse> GetBacklogTaskList(string mediaServerId) { ResponseStruct rs; var ret = MediaServerApis.GetBacklogTaskList(mediaServerId, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } return(ret); }
public ResZLMediaKitCloseRtpPort CloseRtpPort(string mediaServerId, ReqZLMediaKitCloseRtpPort req) { ResponseStruct rs; var ret = MediaServerApis.CloseRtpPort(mediaServerId, req, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } return(ret); }
public ResZLMediaKitRtpPortList GetRtpPortList(string mediaServerId) { ResponseStruct rs; var ret = MediaServerApis.GetRtpPortList(mediaServerId, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } return(ret); }
public ResZLMediaKitAddFFmpegProxy AddFFmpegProxy(string mediaServerId, string src_url) { ResponseStruct rs; var ret = MediaServerApis.AddFFmpegProxy(mediaServerId, src_url, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } return(ret); }
public ResZLMediaKitIsRecord GetRecordStatus(string mediaServerId, ReqZLMediaKitStopRecord req) { ResponseStruct rs; var ret = MediaServerApis.GetRecordStatus(mediaServerId, req, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } return(ret); }
public CutMergeTaskResponse CutOrMergeVideoFile(ReqCutOrMergeVideoFile rcmv) { ResponseStruct rs; var ret = MediaServerApis.CutOrMergeVideoFile(rcmv, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } return(ret); }
public CameraInstance AddCameraInstance(string mediaServerId, ReqAddCameraInstance req) { ResponseStruct rs; var ret = MediaServerApis.AddCameraInstance(mediaServerId, req, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } return(ret); }
public bool DeleteCameraInstance(string mediaServerId, string cameraId) { ResponseStruct rs; var ret = MediaServerApis.DeleteCameraInstance(mediaServerId, cameraId, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } return(ret); }
public RecordFile GetDvrVideoById(long id) { ResponseStruct rs; var ret = MediaServerApis.GetDvrVideoById(id, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } return(ret); }
public ResZLMediaKitAddStreamProxy AddStreamProxy(string deviceid, string url) { ResponseStruct rs; var ret = MediaServerApis.AddStreamProxy(deviceid, url, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } return(ret); }
public DvrVideoResponseList GetDvrVideoList(ReqGetDvrVideo rgdv) { ResponseStruct rs; var ret = MediaServerApis.GetDvrVideoList(rgdv, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } return(ret); }
/// <summary> /// 停止gb28181摄像头 /// </summary> /// <param name="session"></param> private static void stopGB28181(CameraSession session) { try { ResponseStruct rs = null; var mediaObj = Common.MediaServerList.FindLast(x => x.MediaServerId.Equals(session.MediaServerId)); if (mediaObj == null || mediaObj.IsRunning == false) { return; } var req2 = new ReqZLMediaKitCloseStreams() { App = session.App, Force = true, Schema = "rtmp", Secret = "", Stream = session.StreamId, Vhost = session.Vhost, }; var ret2 = MediaServerApis.CloseStreams(mediaObj.MediaServerId, req2, out rs); var req3 = new ReqZLMediaKitCloseRtpPort() { Secret = "", Stream_Id = session.StreamId, }; var ret3 = MediaServerApis.CloseRtpPort(mediaObj.MediaServerId, req3, out rs); if (ret3.Code == 0) { Console.WriteLine("GB28181结束成功->" + session.CameraId + "->" + session.CameraEx.Camera.ParentID + "->" + session.CameraEx.Camera.DeviceID); } else { Console.WriteLine("GB28181结束失败->" + session.CameraId + "->" + session.CameraEx.Camera.ParentID + "->" + session.CameraEx.Camera.DeviceID + "->" + JsonHelper.ToJson(rs)); } } catch (Exception ex) { Console.WriteLine("stopGB28181 Except:\r\n" + ex.Message + "\r\n" + ex.StackTrace); } }
public List <PlayerSession> GetPlayerSessionList(string mediaServerId) { ResponseStruct rs; var ret = MediaServerApis.GetPlayerSessionList(mediaServerId, out rs); if (rs.Code != ErrorNumber.None) { throw new HttpResponseException(JsonHelper.ToJson(rs)); } foreach (var obj in ret) { obj.UpTime = (DateTime.Now - obj.OnlineTime).TotalSeconds; } return(ret); }
/// <summary> /// 获取录制状态 /// </summary> /// <param name="sdp"></param> /// <returns></returns> private bool getDvrOnorOff(StreamDvrPlan sdp) { var mediaServer = Common.MediaServerList.FindLast(x => x.MediaServerId.Equals(sdp.MediaServerId)); if (mediaServer != null && mediaServer.IsRunning) { var sessionList = MediaServerApis.GetCameraSessionList(mediaServer.MediaServerId, out _); if (sessionList != null) { var obj = sessionList.FindLast(x => x.CameraId.Equals(sdp.CameraId)); if (obj != null) { var ret = mediaServer.WebApi.GetRecordStatus(new ReqZLMediaKitStopRecord() { App = obj.App, Secret = "", Stream = obj.StreamId, Vhost = obj.Vhost, }, out _); if (ret.Code == 0 && ret.Status != null) { try { lock (Common.CameraSessionLock) { Common.CameraSessions.FindLast(x => x.CameraId.Equals(obj.CameraId) && x.MediaServerId.Equals(obj.MediaServerId)) .IsRecord = ret.Status; } } catch { // } return((bool)ret.Status); } } } } return(false); }
/// <summary> /// 停止rtsp摄像头 /// </summary> /// <param name="session"></param> private static void StopRtsp(CameraSession session) { try { ResponseStruct rs = null !; var mediaObj = Common.MediaServerList.FindLast(x => x.MediaServerId.Equals(session.MediaServerId)); if (mediaObj == null || mediaObj.IsRunning == false) { return; } var req = new ReqZLMediaKitCloseStreams() { App = session.App, Force = true, Schema = "rtmp", Secret = "", Stream = session.StreamId, Vhost = session.Vhost, }; var ret = MediaServerApis.CloseStreams(mediaObj.MediaServerId, req, out rs); if (ret.Code == 0) { Logger.Logger.Info("Rtsp结束成功->" + session.CameraId + "->" + session.CameraEx !.InputUrl); } else { Logger.Logger.Warn("Rtsp结束失败->" + session.CameraId + "->" + session.CameraEx !.InputUrl); } } catch (Exception ex) { Logger.Logger.Error("stopRtsp Except->" + ex.Message + "->" + ex.StackTrace); } }
/// <summary> /// 设置是否启用录制 /// </summary> /// <param name="sdp"></param> /// <param name="enable"></param> private void setDvrOnorOff(StreamDvrPlan sdp, bool enable) { var mediaServer = Common.MediaServerList.FindLast(x => x.MediaServerId.Equals(sdp.MediaServerId)); if (mediaServer != null && mediaServer.IsRunning) { var sessionList = MediaServerApis.GetCameraSessionList(mediaServer.MediaServerId, out _); if (sessionList != null) { var obj = sessionList.FindLast(x => x.CameraId.Equals(sdp.CameraId)); if (obj != null) { if (enable) { mediaServer.WebApi.StartRecord(new ReqZLMediaKitStartRecord() { App = obj.App, Secret = "", Stream = obj.StreamId, Vhost = obj.Vhost, Customized_Path = mediaServer.RecordFilePath, }, out _); } else { mediaServer.WebApi.StopRecord(new ReqZLMediaKitStopRecord() { App = obj.App, Secret = "", Stream = obj.StreamId, Vhost = obj.Vhost, }, out _); } } } } }
/// <summary> /// 文件一个一个删除 /// </summary> /// <param name="videoSize"></param> /// <param name="sdp"></param> private void deleteFileOneByOne(decimal videoSize, StreamDvrPlan sdp) { var mediaServer = Common.MediaServerList.FindLast(x => x.MediaServerId.Equals(sdp.MediaServerId)); if (mediaServer == null || !mediaServer.IsRunning) { return; } long deleteSize = 0; List <OrderByStruct> orderBy = new List <OrderByStruct>(); orderBy.Add(new OrderByStruct() { FieldName = "starttime", OrderByDir = OrderByDir.ASC, }); ReqGetDvrVideo rgdv = new ReqGetDvrVideo() { CameraId = sdp.CameraId, MediaServerId = sdp.MediaServerId, EndTime = null, IncludeDeleted = false, OrderBy = orderBy, PageIndex = 1, PageSize = 10, StartTime = null, }; while (videoSize - deleteSize > sdp.LimitSpace) { DvrVideoResponseList videoList = MediaServerApis.GetDvrVideoList(rgdv, out ResponseStruct rs); if (videoList != null && videoList.DvrVideoList != null && videoList.DvrVideoList.Count > 0) { OrmService.Db.Transaction(() => { foreach (var ret in videoList.DvrVideoList) { if (ret != null) { if (mediaServer.CheckFileExists(ret.VideoPath, out _)) { mediaServer.DeleteFile(ret.VideoPath, out _); deleteSize += (long)ret.FileSize !; OrmService.Db.Update <RecordFile>().Set(x => x.UpdateTime, DateTime.Now) .Set(x => x.Deleted, true) .Where(x => x.Id == ret !.Id).ExecuteAffrows(); LogWriter.WriteLog("删除录制文件", ret.VideoPath !); Thread.Sleep(20); } } if ((videoSize - deleteSize) < sdp.LimitSpace) { break; } } }); } } }
/// <summary> /// 启动rtsp摄像头 /// </summary> /// <param name="cil"></param> private static void liveRtsp(CameraInstance cil) { try { ResponseStruct rs = null !; var mediaObj = Common.MediaServerList.FindLast(x => x.MediaServerId.Equals(cil.PushMediaServerId)); if (mediaObj == null || mediaObj.IsRunning == false) { return; } bool useFFmpeg = true; if (cil.RetryTimes < 2) { //rtsp方式,先跳过三次,因为zlmediakit会自动维护掉线的ffmpeg,要延迟处理一下,不然会重复创建ffmpeg cil.RetryTimes++; return; } cil.RetryTimes = 0; ResZLMediaKitAddFFmpegProxy ret = null !; if (useFFmpeg) { ret = MediaServerApis.AddFFmpegProxy( mediaObj.MediaServerId, cil.IfRtspUrl, out rs); } else { ret = MediaServerApis.AddStreamProxy(mediaObj.MediaServerId, cil.IfRtspUrl, out rs); } if (ret != null && rs.Code == ErrorNumber.None) { Logger.Logger.Info("Rtsp推流成功->" + cil.CameraId + "->" + cil.IfRtspUrl); CameraSession sessionsub = null !; lock (Common.CameraSessionLock) { sessionsub = Common.CameraSessions.FindLast(x => x.App !.Equals(ret.App) && x.Vhost !.Equals(ret.Vhost) && x.StreamId !.Equals(ret.StreamId)) !; } if (sessionsub != null) { lock (Common.CameraSessionLock) { sessionsub.CameraId = cil.CameraId; } } } else { Logger.Logger.Warn( "Rtsp推流失败->" + cil.CameraId + "->" + cil.IfRtspUrl + "->" + JsonHelper.ToJson(rs)); } } catch (Exception ex) { Logger.Logger.Error("liveRtsp Except ->" + ex.Message + "->" + ex.StackTrace); } }
/// <summary> /// 5秒一次获取摄像头注册信息 /// </summary> private static void getCameraInstanceList() { int i = 0; while (true) { i++; try { if (i == 1 || i % 2 == 0) { lock (Common.CameraInstanceListLock) { Common.CameraInstanceList.Clear(); Common.CameraInstanceList.AddRange(OrmService.Db.Select <CameraInstance>().Where("1=1") .ToList()); } } if (Common.CameraInstanceList != null && Common.CameraInstanceList.Count > 0) { //循环列表 foreach (var cit in Common.CameraInstanceList) { Thread.Sleep(100); if (cit != null && cit.EnableLive) //如果cit的是启动状态 { Thread.Sleep(1000); var mediaObj = Common.MediaServerList.FindLast(x => x.MediaServerId.Equals(cit.PushMediaServerId)); if (mediaObj != null && mediaObj.IsRunning) { CameraSession session = null; try { if (cit.CameraType == CameraType.GB28181) { lock (Common.CameraSessionLock) { session = Common.CameraSessions.FindLast(x => x.ClientType == ClientType.Camera && x.CameraType == CameraType.GB28181 && x.CameraIpAddress.Equals(cit.CameraIpAddress) && x.CameraEx.Camera.DeviceID.Equals(cit.CameraChannelLable) && x.CameraEx.Camera.ParentID.Equals(cit.CameraDeviceLable)); } } if (cit.CameraType == CameraType.Rtsp) { lock (Common.CameraSessionLock) { session = Common.CameraSessions.FindLast(x => x.ClientType == ClientType.Camera && x.CameraType == CameraType.Rtsp && x.CameraIpAddress.Equals(cit.CameraIpAddress) && x.CameraEx.InputUrl.Equals(cit.IfRtspUrl)); } } } catch (Exception ex) { continue; } bool useFFmpeg = true; ResponseStruct rs; if (session == null || session.IsOnline == false) //如果没有,就启动 { switch (cit.CameraType) { case CameraType.Rtsp: //rtsp的启动方式 if (cit.RetryTimes < 2) { //rtsp方式,先跳过三次,因为zlmediakit会自动维护掉线的ffmpeg,要延迟处理一下,不然会重复创建ffmpeg cit.RetryTimes++; continue; } cit.RetryTimes = 0; ResZLMediaKitAddFFmpegProxy ret = null; if (useFFmpeg) { ret = MediaServerApis.AddFFmpegProxy( mediaObj.MediaServerId, cit.IfRtspUrl, out rs); } else { ret = MediaServerApis.AddStreamProxy(mediaObj.MediaServerId, cit.IfRtspUrl, out rs); } if (ret != null && rs.Code == ErrorNumber.None) { CameraSession sessionsub = null; lock (Common.CameraSessionLock) { sessionsub = Common.CameraSessions.FindLast(x => x.App !.Equals(ret.App) && x.Vhost !.Equals(ret.Vhost) && x.StreamId !.Equals(ret.StreamId)); } if (sessionsub != null) { lock (Common.CameraSessionLock) { sessionsub.CameraId = cit.CameraId; } } } break; case CameraType.GB28181: //28181的启动方式 var gbRet = CommonApi.LiveVideo(cit.PushMediaServerId, cit.CameraDeviceLable, cit.CameraChannelLable, out rs, (bool)cit.IfGb28181Tcp !); if (gbRet != null && rs.Code == ErrorNumber.None) { CameraSession sessionsub = null; lock (Common.CameraSessionLock) { sessionsub = Common.CameraSessions.FindLast(x => x.App !.Equals(gbRet.App) && x.Vhost !.Equals(gbRet.Vhost) && x.StreamId !.Equals(gbRet.MediaId)); } if (sessionsub != null) { lock (Common.CameraSessionLock) { sessionsub.CameraId = cit.CameraId; } } } break; } } else if (session != null && string.IsNullOrEmpty(session.CameraId)) { CameraSession sessionsub = null; lock (Common.CameraSessionLock) { sessionsub = Common.CameraSessions.FindLast(x => x.App !.Equals(session.App) && x.Vhost !.Equals(session.Vhost) && x.StreamId !.Equals(session.StreamId)); } if (sessionsub != null) { lock (Common.CameraSessionLock) { sessionsub.CameraId = cit.CameraId; } } } } } else if (cit.EnableLive == false) //如果非启动的状态,就要停掉现有的 { MediaServerInstance mediaObj = null; lock (Common.MediaServerList) { mediaObj = Common.MediaServerList.FindLast(x => x.MediaServerId.Equals(cit.PushMediaServerId)); } if (mediaObj != null && mediaObj.IsRunning) { CameraSession session = null; try { if (cit.CameraType == CameraType.GB28181) { lock (Common.CameraSessionLock) { session = Common.CameraSessions.FindLast(x => x.ClientType == ClientType.Camera && x.CameraType == CameraType.GB28181 && x.CameraIpAddress.Equals(cit.CameraIpAddress) && x.CameraEx.Camera.DeviceID.Equals(cit.CameraChannelLable) && x.CameraEx.Camera.ParentID.Equals(cit.CameraDeviceLable)); } } if (cit.CameraType == CameraType.Rtsp) { lock (Common.CameraSessionLock) { session = Common.CameraSessions.FindLast(x => x.ClientType == ClientType.Camera && x.CameraType == CameraType.Rtsp && x.CameraIpAddress.Equals(cit.CameraIpAddress) && x.CameraEx.InputUrl.Equals(cit.IfRtspUrl)); } } } catch (Exception ex) { continue; } ResponseStruct rs; if (session != null) { switch (cit.CameraType) { case CameraType.Rtsp: var req = new ReqZLMediaKitCloseStreams() { App = session.App, Force = true, Schema = "rtmp", Secret = "", Stream = session.StreamId, Vhost = session.Vhost, }; var ret = MediaServerApis.CloseStreams(mediaObj.MediaServerId, req, out rs); break; case CameraType.GB28181: var req2 = new ReqZLMediaKitCloseStreams() { App = session.App, Force = true, Schema = "rtmp", Secret = "", Stream = session.StreamId, Vhost = session.Vhost, }; var ret2 = MediaServerApis.CloseStreams(mediaObj.MediaServerId, req2, out rs); var req3 = new ReqZLMediaKitCloseRtpPort() { Secret = "", Stream_Id = session.StreamId, }; var ret3 = MediaServerApis.CloseRtpPort(mediaObj.MediaServerId, req3, out rs); break; } } } } } } } catch (Exception ex) { Console.WriteLine("报错了:\r\n" + ex.Message + "\r\n" + ex.StackTrace); continue; // } Thread.Sleep(5000); } }