/// <summary> /// 生成对应的视频播放地址 /// </summary> /// <param name="aTerminalId">终端编号</param> /// <param name="aChn">通道号</param> /// <returns></returns> public static string GenRTSPUrl(string aTerminalId, AVChannel aChn) { return(string.Format("rtsp://{0}:{1}/{2}?channel={3}.sdp", Settings.Default.DVRSvrIp, Settings.Default.DVRSvrPort, aTerminalId, (byte)aChn)); }
/// <summary> /// 开启视频预览 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnOk_Click(object sender, EventArgs e) { string terminalId = this.txtTerminalId.Text.Trim(); if (string.IsNullOrEmpty(terminalId)) { errPrv.SetError(this.txtTerminalId, "终端编号不能为空..."); this.txtTerminalId.Focus(); return; } ValueString <AVChannel> selChn = this.cboChn.SelectedItem as ValueString <AVChannel>; if (selChn == null) { errPrv.SetError(this.cboChn, "请选择有效的预览通道..."); this.cboChn.Focus(); return; } string svrIp = this.txtSvrIp.Text.Trim(); if (string.IsNullOrEmpty(svrIp)) { errPrv.SetError(this.txtSvrIp, "视频服务器IP地址不能为空..."); this.txtSvrIp.Focus(); return; } ushort svrPort = (ushort)this.nudPort.Value; this.btnOk.Enabled = false; this.TerminalId = null; var task = Task.Factory.StartNew(() => { var result = UrlApiHelper.ControlVideo(terminalId, selChn.Value, VedioControlType.RealTime); if (result == null) { GuiHelper.MsgBox("服务器连接异常..."); } else if (result.Status != 0) { GuiHelper.MsgBox("实时预览开启失败: " + result.Message); } else { this.TerminalId = terminalId; this.Channel = selChn.Value; Settings.Default.DVRSvrIp = svrIp; Settings.Default.DVRSvrPort = svrPort; } }); task.Wait(); this.btnOk.Enabled = true; if (!string.IsNullOrEmpty(this.TerminalId)) { this.DialogResult = DialogResult.OK; this.Close(); } }
/// <summary> /// 使能对应终端通道的视频预览窗口 /// </summary> /// <param name="aTerminalId"></param> /// <param name="aChn"></param> public void EnableDVR(string aTerminalId, AVChannel aChn) { mFrmDVR?.InvokeIfRequired((frm) => frm.AddVideoToken(new DVR.DVRToken() { TerminalId = aTerminalId, LogicChn = aChn, })); }
/// <summary> /// 对指定终端进行视频控制 开启实时预览或者停止预览 /// </summary> /// <param name="aTerminalId">终端编号</param> /// <param name="aChn">通道号</param> /// <param name="aType">控制方式</param> /// <returns>服务器返回的响应数据</returns> public static JsonBase ControlVideo(string aTerminalId, AVChannel aChn, VedioControlType aType) { string jsonStr = GetApiReply(VideoControl(aTerminalId, aChn, aType)); if (string.IsNullOrEmpty(jsonStr)) { return(null); } return(ModelUtils.GetJsonObject <JsonBase>(jsonStr)); }
/// <summary> /// 对指定终端进行视频控制 开启实时预览或者停止预览的URL /// </summary> /// <param name="aTerminalId">终端编号</param> /// <param name="aChn">通道号</param> /// <param name="aType">控制方式</param> /// <returns></returns> private static string VideoControl(string aTerminalId, AVChannel aChn, VedioControlType aType) { return($"{SvrUrl}{LowerFirstChar(MethodBase.GetCurrentMethod().Name)}.action?" + $"{GetTermianlAkUrl(aTerminalId)}" + $"&type={(int)aType}&id={(byte)aChn}"); }