Exemplo n.º 1
0
        private void OnFrameReceived(object sender, RawFrame rawFrame)
        {
            if (!(rawFrame is RawAudioFrame rawAudioFrame))
            {
                return;
            }

            FFmpegAudioDecoder decoder = GetDecoderForFrame(rawAudioFrame);

            if (!decoder.TryDecode(rawAudioFrame, out int decodedFrameSize))
            {
                return;
            }

            if (_decodedFrameBuffer.Length < decodedFrameSize)
            {
                _decodedFrameBuffer = new byte[decodedFrameSize];
            }

            var bufferSegment = new ArraySegment <byte>(_decodedFrameBuffer, 0, decodedFrameSize);

            IDecodedAudioFrame decodedFrame = decoder.GetDecodedFrame(bufferSegment);

            FrameReceived?.Invoke(this, decodedFrame);
        }
Exemplo n.º 2
0
        //convert the raw frame to decoded frame
        private void RtspClientOnFrameReceived(object sender, RawFrame rawFrame)
        {
            if (!(rawFrame is RawAudioFrame rawAudioFrame))
            {
                return;
            }

            FFmpegAudioDecoder decoder = GetDecoderForFrame(rawAudioFrame);

            if (!decoder.TryDecode(rawAudioFrame))
            {
                return;
            }

            //OutBitsPerSample may need to be set by user or the program?
            IDecodedAudioFrame decodedFrame = decoder.GetDecodedFrame(new AudioConversionParameters()
            {
                OutBitsPerSample = 16
            });

            System.Windows.Application.Current.Dispatcher.Invoke(_invalidateAction, DispatcherPriority.Send, decodedFrame);
        }
Exemplo n.º 3
0
        private void OnFrameReceived(object sender, RawFrame rawFrame)
        {
            if (!(rawFrame is RawAudioFrame rawAudioFrame))
            {
                return;
            }

            FFmpegAudioDecoder decoder = GetDecoderForFrame(rawAudioFrame);

            if (!decoder.TryDecode(rawAudioFrame))
            {
                return;
            }

            IDecodedAudioFrame decodedFrame = decoder.GetDecodedFrame(new AudioConversionParameters()
            {
                OutBitsPerSample = 16
            });



            FrameReceived?.Invoke(this, decodedFrame);
        }
Exemplo n.º 4
0
        //convert decodedAudioFrame to wave and sound
        private void Invalidate(IDecodedAudioFrame decodedAudioFrame)
        {
            frames++;
            audioSeriesData.Clear();
            audioSeriesDataPart.Clear();
            int len       = decodedAudioFrame.DecodedBytes.Count;
            int singleLen = decodedAudioFrame.Format.BitPerSample / 8;

            // convert the pcm data to ArrayList, each element in the array represents a sample
            if (decodedAudioFrame.Format.BitPerSample == 16)
            {
                for (int i = 0; i < len; i = i + singleLen)
                {
                    //only consider the bitPerSample == 16
                    int audioData = 0;
                    if (decodedAudioFrame.Format.Channels != 1)
                    {
                        audioData = (decodedAudioFrame.DecodedBytes.Array[i] * 255 + decodedAudioFrame.DecodedBytes.Array[i + 1] +
                                     decodedAudioFrame.DecodedBytes.Array[i + 2] * 255 + decodedAudioFrame.DecodedBytes.Array[i + 3]) / 2;
                        i = i + singleLen;
                    }
                    else
                    {
                        audioData = decodedAudioFrame.DecodedBytes.Array[i] * 255 + decodedAudioFrame.DecodedBytes.Array[i + 1];
                    }
                    audioSeriesData.Add(audioData);
                    if (i < maxPointsInChart)
                    {
                        audioSeriesDataPart.Add(audioData);
                    }
                }
            }
            else if (decodedAudioFrame.Format.BitPerSample == 8)
            {
                for (int i = 0; i < len; i = i + singleLen)
                {
                    int audioData = 0;
                    if (decodedAudioFrame.Format.Channels != 1)
                    {
                        audioData = (decodedAudioFrame.DecodedBytes.Array[i] + decodedAudioFrame.DecodedBytes.Array[i + 1]) / 2;
                        i         = i + singleLen;
                    }
                    else
                    {
                        audioData = decodedAudioFrame.DecodedBytes.Array[i];
                    }
                    audioSeriesData.Add(audioData);
                    if (i < maxPointsInChart)
                    {
                        audioSeriesDataPart.Add(audioData);
                    }
                }
            }

            //only one in several frames will be shown in the chart
            int fps = System.Math.Abs(decodedAudioFrame.Format.BytesPerSecond / len);

            if (frames % (fps / fpsChart) == 0)
            {
                DrawChart();
            }

            if (audioPlayer.WaveFormat == null)
            {
                audioPlayer.SetPcmPlayer(decodedAudioFrame.Format.SampleRate, decodedAudioFrame.Format.BitPerSample, decodedAudioFrame.Format.Channels);
            }

            audioPlayer.PlayData(decodedAudioFrame.DecodedBytes.Array);

            return;
        }