示例#1
0
        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();
            }
        }
示例#2
0
 public void AddSession(MediaStreamSession MediaStreamSession)
 {
     MTSession_lock.EnterWriteLock();
     try
     {
         MediaStreamSessions.Add(MediaStreamSession);
     }
     finally
     {
         MTSession_lock.ExitWriteLock();
     }
 }
示例#3
0
 public void RemoveSession(MediaStreamSession MediaStreamSession)
 {
     MTSession_lock.EnterWriteLock();
     try
     {
         if (MediaStreamSessions.Contains(MediaStreamSession))
         {
             MediaStreamSessions.Remove(MediaStreamSession);
         }
     }
     finally
     {
         MTSession_lock.ExitWriteLock();
     }
 }
示例#4
0
        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
            {
            }
        }