public static MediaFrameEntity MediaFrame2MediaSteamEntity(MediaFrame frame)
        {
            var result = new MediaFrameEntity()
            {
                Buffer     = frame.Data,
                Length     = (ushort)frame.nSize,
                EncodTime  = frame.nTimetick,
                MediaType  = frame.nIsAudio == 1 ? MediaType.AudioES : MediaType.VideoES,
                SampleRate = 32000,
                FrameRate  = 25,
                Width      = (ushort)frame.nWidth,
                Height     = (ushort)frame.nHeight,
                KeyFrame   = (byte)(frame.nIsAudio == 0 && frame.nIsKeyFrame == 1 ? 1 : 0),
            };

            if (frame.nIsAudio == 1 && frame.nIsKeyFrame == 1)
            {
                result.SampleRate = (ushort)frame.nFrequency;
            }
            if (frame.IsCommandMediaFrame())
            {
                result.Buffer = new byte[0];
                result.Length = 0;
            }
            return(result);
        }
示例#2
0
        private void OnCaptured(MediaFrame mf)
        {
            lock (this)
            {
                if (!mf.IsCommandMediaFrame())
                {
                    if (mf.nTimetick == _lastTick)
                    {
                        mf.nTimetick++;
                    }
                    if (mf.nTimetick > _lastTick)
                    {
                        _lastTick = mf.nTimetick;
                    }
                }
            }
            if (!IsAudioPub && mf.nIsAudio == 1)
            {
                return;
            }
            if (!IsVideoPub && mf.nIsAudio == 0)
            {
                return;
            }

            if (Captured != null)
            {
                Captured(this, new EventArgsEx <MediaFrame>(mf));
            }
        }
示例#3
0
        private bool CheckInit(MediaFrame frame, bool reinit = false)
        {
            if (!_inited)
            {
                if (frame.nIsKeyFrame == 1)
                {
                    Init(frame);
                }
            }

            if (!_inited)
            {
                return(false);
            }
            if (frame.IsCommandMediaFrame() && frame.GetCommandType() == MediaFrameCommandType.ResetCodec)
            {
                _inited = false;
                return(false);
            }
            else if (frame.nIsKeyFrame == 1)
            {
                if (_width != -1 && _height != -1 && (frame.nWidth != _width || frame.nHeight != _height))
                {
                    Init(frame, true);
                }
            }
            return(true);
        }
示例#4
0
        //System.IO.BinaryWriter bw = new BinaryWriter(new System.IO.FileStream(@"D:\\aac.aac", FileMode.Create));
        protected virtual void _Play(MediaFrame frame)
        {
            if (_isDisoseing || _isDisosed)
            {
                return;
            }

            if (!_inited && frame.IsKeyFrame == 1)
            {
                Init(frame);
            }
            if (!_inited)
            {
                return;
            }
            if (frame.IsCommandMediaFrame() && frame.GetCommandType() == MediaFrameCommandType.ResetCodec)
            {
                //在这里重置解码器,这里因为音频格式一般不会发生变化,所以暂时没有做处理
                return;
            }

            //string b = DateTime.Now.TimeOfDay + " begin  end:";


            byte[] buf = null;
            if (_aac != null)
            {
                buf = DecMultiAAC(frame.GetData());
            }
            if (_speex != null)
            {
                buf = DecSPEX(frame.GetData());
            }
            if (buf != null && buf.Length > 0)
            {
                _Play(buf);
            }
            else
            {
            }

            //Console.WriteLine(b + DateTime.Now.TimeOfDay + " : " + frame.Data.Length + " aac:" + buf.Length);
        }