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