From b9195122cf6ee70fb4a155d46d96d0cd1f97abe5 Mon Sep 17 00:00:00 2001 From: runner365 Date: Thu, 12 Mar 2020 20:30:07 +0800 Subject: [PATCH] support all sample rate in aac --- trunk/src/protocol/srs_raw_avc.cpp | 19 +++++-------------- trunk/src/protocol/srs_raw_avc.hpp | 5 +++++ trunk/src/srt/srt_to_rtmp.cpp | 20 +++----------------- 3 files changed, 13 insertions(+), 31 deletions(-) diff --git a/trunk/src/protocol/srs_raw_avc.cpp b/trunk/src/protocol/srs_raw_avc.cpp index 8f4acbd76..da0fd1835 100644 --- a/trunk/src/protocol/srs_raw_avc.cpp +++ b/trunk/src/protocol/srs_raw_avc.cpp @@ -438,7 +438,8 @@ srs_error_t SrsRawAacStream::adts_demux(SrsBuffer* stream, char** pframe, int* p srs_error_t SrsRawAacStream::mux_sequence_header(SrsRawAacStreamCodec* codec, string& sh) { srs_error_t err = srs_success; - + char samplingFrequencyIndex = codec->sampling_frequency_index; + // only support aac profile 1-4. if (codec->aac_object == SrsAacObjectTypeReserved) { return srs_error_new(ERROR_AAC_DATA_INVALID, "invalid aac object"); @@ -446,21 +447,11 @@ srs_error_t SrsRawAacStream::mux_sequence_header(SrsRawAacStreamCodec* codec, st SrsAacObjectType audioObjectType = codec->aac_object; char channelConfiguration = codec->channel_configuration; - char samplingFrequencyIndex = codec->sampling_frequency_index; - // override the aac samplerate by user specified. - // @see https://github.com/ossrs/srs/issues/212#issuecomment-64146899 - switch (codec->sound_rate) { - case SrsAudioSampleRate11025: - samplingFrequencyIndex = 0x0a; break; - case SrsAudioSampleRate22050: - samplingFrequencyIndex = 0x07; break; - case SrsAudioSampleRate44100: - samplingFrequencyIndex = 0x04; break; - default: - break; + if (samplingFrequencyIndex >= 16) { + samplingFrequencyIndex = 4;//default 44100 } - + char chs[2]; // @see ISO_IEC_14496-3-AAC-2001.pdf // AudioSpecificConfig (), page 33 diff --git a/trunk/src/protocol/srs_raw_avc.hpp b/trunk/src/protocol/srs_raw_avc.hpp index de81bf2ad..fc6b00f32 100644 --- a/trunk/src/protocol/srs_raw_avc.hpp +++ b/trunk/src/protocol/srs_raw_avc.hpp @@ -30,6 +30,11 @@ #include +static const int mpeg4audio_sample_rates[16] = { + 96000, 88200, 64000, 48000, 44100, 32000, + 24000, 22050, 16000, 12000, 11025, 8000, 7350 +}; + class SrsBuffer; // The raw h.264 stream, in annexb. diff --git a/trunk/src/srt/srt_to_rtmp.cpp b/trunk/src/srt/srt_to_rtmp.cpp index 0842a7e7f..ae40791d0 100644 --- a/trunk/src/srt/srt_to_rtmp.cpp +++ b/trunk/src/srt/srt_to_rtmp.cpp @@ -516,25 +516,11 @@ srs_error_t rtmp_client::on_ts_video(std::shared_ptr avs_ptr, uint64_ return err; } -int rtmp_client::get_sample_rate(char sound_rate) { +int rtmp_client::get_sample_rate(char sample_index) { int sample_rate = 44100; - switch (sound_rate) - { - case SrsAudioSampleRate44100: - sample_rate = 44100; - break; - case SrsAudioSampleRate22050: - sample_rate = 22050; - break; - case SrsAudioSampleRate11025: - sample_rate = 11025; - break; - case SrsAudioSampleRate5512: - sample_rate = 5512; - break; - default: - break; + if ((sample_index >= 0) && (sample_index < 16)) { + sample_rate = mpeg4audio_sample_rates[sample_index]; } return sample_rate; }