const int timeout = 30000;//connect时的超时时间 public void Close() { if (VideoClient != null) { VideoClient.Dispose(); VideoClient = null; } MTSession_lock.EnterWriteLock(); try { foreach (MediaStreamSession stream in MediaStreamSessions) { if (stream.IsConnected()) { stream.Close(); } } MediaStreamSessions.Clear(); } finally { MTSession_lock.ExitWriteLock(); } }
public void AddSession(MediaStreamSession MediaStreamSession) { MTSession_lock.EnterWriteLock(); try { MediaStreamSessions.Add(MediaStreamSession); } finally { MTSession_lock.ExitWriteLock(); } }
public void RemoveSession(MediaStreamSession MediaStreamSession) { MTSession_lock.EnterWriteLock(); try { if (MediaStreamSessions.Contains(MediaStreamSession)) { MediaStreamSessions.Remove(MediaStreamSession); } } finally { MTSession_lock.ExitWriteLock(); } }
void MediaDataReceived(MTClient sender, MediaData mediaData) { //int handle = (int)mediaData.DialogId; Byte[] framedate = new Byte[mediaData.FrameData.Count]; int frametype = 0; Buffer.BlockCopy(mediaData.FrameData.Array, mediaData.FrameData.Offset, framedate, 0, mediaData.FrameData.Count); if (mediaData.FrameType == FrameType.PFrame) { frametype = 4; } else if (mediaData.FrameType == FrameType.IFrame) { frametype = 3; } else if (mediaData.FrameType == FrameType.BFrame) { frametype = 5; } else if (mediaData.FrameType == FrameType.Audio) { frametype = 2; } else if (mediaData.FrameType == FrameType.MJpeg) { frametype = 6; } else { Console.WriteLine("frametype error"); ServiceEnvironment.Instance.Logger.Error("frametype error"); return; } MTSession_lock.EnterReadLock(); MediaStreamSession[] sessions = MediaStreamSessions.ToArray(); MTSession_lock.ExitReadLock(); try { foreach (MediaStreamSession livesession in sessions) { if (livesession.IsConnected()) { bool sendout = livesession.TrySend(frametype, framedate, 100, 10); if (sendout == false) { ThreadPool.QueueUserWorkItem(new WaitCallback(MediaStreamSessionClose), livesession); Console.WriteLine("预览流数据发送超时,主动关闭session"); ServiceEnvironment.Instance.Logger.Info("预览流数据发送超时,主动关闭session"); return; } } else { ThreadPool.QueueUserWorkItem(new WaitCallback(MediaStreamSessionClose), livesession); } } } finally { } }