예제 #1
0
        private void MicCapturer_CallBack(byte[] buffer)
        {
            var buf = Enc_AAC(buffer);

            if (buf == null)
            {
                return;
            }
            if (buf.Length == 0)
            {
                return;
            }
            //生成媒体帧
            var mf = new StreamingKit.MediaFrame()
            {
                Frequency         = _frequency,
                Samples           = (short)_audioCfg.samples,
                IsKeyFrame        = (byte)((_audioFrameIndex++ % 50) == 0 ? 1 : 0),
                Encoder           = _audioCfg.encoder,
                MediaFrameVersion = 0,
                Channel           = _channels,
                AudioFormat       = 2,
                IsAudio           = 1,
                NTimetick         = Environment.TickCount,
                Ex   = 1,
                Size = buf.Length,
            };

            mf.SetData(buf);
            mf.MediaFrameVersion = (byte)(mf.IsKeyFrame == 1 ? 1 : 0);
            mf.Ex = (byte)(mf.IsKeyFrame == 1 ? 0 : 1);

            if (_isFirstKeyFrame)
            {
                _isFirstKeyFrame = false;
                var resetCodecMediaFrame = CreateResetCodecMediaFrame(mf);
                if (_callBack != null)
                {
                    _callBack(resetCodecMediaFrame);
                }
            }

            if (_callBack != null)
            {
                _callBack(mf);
            }
            if (bw == null)
            {
                bw = new BinaryWriter(new System.IO.FileStream(@"D:\aac5.aac", System.IO.FileMode.Create));
            }
            byte[] bufs = mf.GetBytes();
            bw.Write(bufs.Length);
            bw.Write(bufs);
        }
예제 #2
0
        public static MediaFrame CreateAudioKeyFrame(AudioEncodeCfg cfg, long timetick, byte[] data, int offset, int size)
        {
            MediaFrame mFrame = CreateAudioFrame(cfg, timetick, data, offset, size);// new

            // MediaFrame((byte)
            // 1);
            mFrame.MediaFrameVersion = 1;
            mFrame.IsKeyFrame        = 1;
            mFrame.Frequency         = cfg.Frequency;
            mFrame.Channel           = cfg.Channel;
            mFrame.AudioFormat       = (short)cfg.Format;
            mFrame.Samples           = (short)cfg.Samples;
            mFrame.Encoder           = cfg.encoder;

            return(mFrame);
        }
예제 #3
0
        public static MediaFrame CreateCommandMediaFrame(bool isAudio, MediaFrameCommandType cmd, byte[] data = null)
        {
            data ??= Array.Empty <byte>();
            var mf = new MediaFrame()
            {
                MediaFrameVersion = 0xff,
                Ex         = (byte)cmd,
                IsKeyFrame = 0,
                IsAudio    = (byte)(isAudio ? 1 : 0),
                NTimetick  = 0,
                Size       = data.Length,
            };

            mf.SetData(data ?? Array.Empty <byte>());
            return(mf);
        }
예제 #4
0
        public static MediaFrame CreateAudioFrame(AudioEncodeCfg cfg, long timetick, byte[] data, int offset, int size)
        {
            if (cfg is null)
            {
                throw new ArgumentNullException(nameof(cfg));
            }

            MediaFrame mFrame = new MediaFrame(0)
            {
                IsAudio    = 1,
                IsKeyFrame = 0,
                NTimetick  = timetick,
                Size       = size,
                Offset     = offset,
            };

            mFrame.SetData(data);
            return(mFrame);
        }