/// <summary> /// Send VOD init control message /// </summary> /// <param name="msgIn"></param> /// <param name="start"></param> private void SendVODInitCM(IMessageInput msgIn, int start) { OOBControlMessage oobCtrlMsg = new OOBControlMessage(); oobCtrlMsg.Target = typeof(IPassive).Name; oobCtrlMsg.ServiceName = "init"; oobCtrlMsg.ServiceParameterMap.Add("startTS", start); _msgIn.SendOOBControlMessage(this, oobCtrlMsg); }
/// <summary> /// Send VOD seek control message /// </summary> /// <param name="msgIn">Message input</param> /// <param name="position">New timestamp to play from</param> private void SendVODSeekCM(IMessageInput msgIn, int position) { OOBControlMessage oobCtrlMsg = new OOBControlMessage(); oobCtrlMsg.Target = typeof(ISeekableProvider).Name; oobCtrlMsg.ServiceName = "seek"; oobCtrlMsg.ServiceParameterMap.Add("position", position); msgIn.SendOOBControlMessage(this, oobCtrlMsg); lock (this.SyncRoot) { // Reset properties _vodStartTS = 0; _serverStartTS = System.Environment.TickCount; if (_nextRTMPMessage != null) { try { PushMessage(_nextRTMPMessage); } catch (IOException ex) { log.Error("Error while sending message.", ex); } _nextRTMPMessage = null; } ResetMessage reset = new ResetMessage(); try { PushMessage(reset); } catch (IOException ex) { log.Error("Error while sending message.", ex); } ScheduleNextMessage(); } }
/// <summary> /// Send VOD check video control message /// </summary> /// <param name="msgIn"></param> /// <returns></returns> private bool SendCheckVideoCM(IMessageInput msgIn) { OOBControlMessage oobCtrlMsg = new OOBControlMessage(); oobCtrlMsg.Target = typeof(IStreamTypeAwareProvider).Name; oobCtrlMsg.ServiceName = "hasVideo"; msgIn.SendOOBControlMessage(this, oobCtrlMsg); if (oobCtrlMsg.Result is Boolean) { return (Boolean)oobCtrlMsg.Result; } else { return false; } }
/// <summary> /// Send VOD seek control message /// </summary> /// <param name="msgIn"></param> /// <param name="position"></param> /// <returns></returns> private int SendVODSeekCM(IMessageInput msgIn, int position) { OOBControlMessage oobCtrlMsg = new OOBControlMessage(); oobCtrlMsg.Target = typeof(ISeekableProvider).Name; oobCtrlMsg.ServiceName = "seek"; oobCtrlMsg.ServiceParameterMap.Add("position", position); msgIn.SendOOBControlMessage(this, oobCtrlMsg); if (oobCtrlMsg.Result is int) { return (int)oobCtrlMsg.Result; } else { return -1; } }