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); }
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)); } }
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); }
//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); }