fix #81: support all aac sample rate, for instance, 48000. to 0.9.150
正在显示
6 个修改的文件
包含
41 行增加
和
24 行删除
@@ -108,7 +108,7 @@ SrsAvcAacCodec::SrsAvcAacCodec() | @@ -108,7 +108,7 @@ SrsAvcAacCodec::SrsAvcAacCodec() | ||
108 | avc_profile = 0; | 108 | avc_profile = 0; |
109 | avc_level = 0; | 109 | avc_level = 0; |
110 | aac_profile = 0; | 110 | aac_profile = 0; |
111 | - aac_sample_rate = 0; | 111 | + aac_sample_rate = _SRS_AAC_SAMPLE_RATE_UNSET; // sample rate ignored |
112 | aac_channels = 0; | 112 | aac_channels = 0; |
113 | avc_extra_size = 0; | 113 | avc_extra_size = 0; |
114 | avc_extra_data = NULL; | 114 | avc_extra_data = NULL; |
@@ -166,25 +166,6 @@ int SrsAvcAacCodec::audio_aac_demux(int8_t* data, int size, SrsCodecSample* samp | @@ -166,25 +166,6 @@ int SrsAvcAacCodec::audio_aac_demux(int8_t* data, int size, SrsCodecSample* samp | ||
166 | sample->sound_rate = (SrsCodecAudioSampleRate)sound_rate; | 166 | sample->sound_rate = (SrsCodecAudioSampleRate)sound_rate; |
167 | sample->sound_size = (SrsCodecAudioSampleSize)sound_size; | 167 | sample->sound_size = (SrsCodecAudioSampleSize)sound_size; |
168 | 168 | ||
169 | - // reset the sample rate by sequence header | ||
170 | - static int aac_sample_rates[] = { | ||
171 | - 96000, 88200, 64000, 48000, | ||
172 | - 44100, 32000, 24000, 22050, | ||
173 | - 16000, 12000, 11025, 8000, | ||
174 | - 7350, 0, 0, 0 | ||
175 | - }; | ||
176 | - switch (aac_sample_rates[aac_sample_rate]) { | ||
177 | - case 11025: | ||
178 | - sample->sound_rate = SrsCodecAudioSampleRate11025; | ||
179 | - break; | ||
180 | - case 22050: | ||
181 | - sample->sound_rate = SrsCodecAudioSampleRate22050; | ||
182 | - break; | ||
183 | - case 44100: | ||
184 | - sample->sound_rate = SrsCodecAudioSampleRate44100; | ||
185 | - break; | ||
186 | - }; | ||
187 | - | ||
188 | // only support aac | 169 | // only support aac |
189 | if (audio_codec_id != SrsCodecAudioAAC) { | 170 | if (audio_codec_id != SrsCodecAudioAAC) { |
190 | ret = ERROR_HLS_DECODE_ERROR; | 171 | ret = ERROR_HLS_DECODE_ERROR; |
@@ -261,6 +242,27 @@ int SrsAvcAacCodec::audio_aac_demux(int8_t* data, int size, SrsCodecSample* samp | @@ -261,6 +242,27 @@ int SrsAvcAacCodec::audio_aac_demux(int8_t* data, int size, SrsCodecSample* samp | ||
261 | // ignored. | 242 | // ignored. |
262 | } | 243 | } |
263 | 244 | ||
245 | + // reset the sample rate by sequence header | ||
246 | + if (aac_sample_rate != _SRS_AAC_SAMPLE_RATE_UNSET) { | ||
247 | + static int aac_sample_rates[] = { | ||
248 | + 96000, 88200, 64000, 48000, | ||
249 | + 44100, 32000, 24000, 22050, | ||
250 | + 16000, 12000, 11025, 8000, | ||
251 | + 7350, 0, 0, 0 | ||
252 | + }; | ||
253 | + switch (aac_sample_rates[aac_sample_rate]) { | ||
254 | + case 11025: | ||
255 | + sample->sound_rate = SrsCodecAudioSampleRate11025; | ||
256 | + break; | ||
257 | + case 22050: | ||
258 | + sample->sound_rate = SrsCodecAudioSampleRate22050; | ||
259 | + break; | ||
260 | + case 44100: | ||
261 | + sample->sound_rate = SrsCodecAudioSampleRate44100; | ||
262 | + break; | ||
263 | + }; | ||
264 | + } | ||
265 | + | ||
264 | srs_info("audio decoded, type=%d, codec=%d, asize=%d, rate=%d, format=%d, size=%d", | 266 | srs_info("audio decoded, type=%d, codec=%d, asize=%d, rate=%d, format=%d, size=%d", |
265 | sound_type, audio_codec_id, sound_size, sound_rate, sound_format, size); | 267 | sound_type, audio_codec_id, sound_size, sound_rate, sound_format, size); |
266 | 268 |
@@ -35,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -35,6 +35,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
35 | class SrsStream; | 35 | class SrsStream; |
36 | 36 | ||
37 | #define SRS_MAX_CODEC_SAMPLE 128 | 37 | #define SRS_MAX_CODEC_SAMPLE 128 |
38 | +#define _SRS_AAC_SAMPLE_RATE_UNSET 15 | ||
38 | 39 | ||
39 | // Sampling rate. The following values are defined: | 40 | // Sampling rate. The following values are defined: |
40 | // 0 = 5.5 kHz = 5512 Hz | 41 | // 0 = 5.5 kHz = 5512 Hz |
@@ -365,7 +365,7 @@ SrsHlsAacJitter::~SrsHlsAacJitter() | @@ -365,7 +365,7 @@ SrsHlsAacJitter::~SrsHlsAacJitter() | ||
365 | { | 365 | { |
366 | } | 366 | } |
367 | 367 | ||
368 | -int64_t SrsHlsAacJitter::on_buffer_start(int64_t flv_pts, int sample_rate) | 368 | +int64_t SrsHlsAacJitter::on_buffer_start(int64_t flv_pts, int sample_rate, int aac_sample_rate) |
369 | { | 369 | { |
370 | // 0 = 5.5 kHz = 5512 Hz | 370 | // 0 = 5.5 kHz = 5512 Hz |
371 | // 1 = 11 kHz = 11025 Hz | 371 | // 1 = 11 kHz = 11025 Hz |
@@ -374,6 +374,17 @@ int64_t SrsHlsAacJitter::on_buffer_start(int64_t flv_pts, int sample_rate) | @@ -374,6 +374,17 @@ int64_t SrsHlsAacJitter::on_buffer_start(int64_t flv_pts, int sample_rate) | ||
374 | static int flv_sample_rates[] = {5512, 11025, 22050, 44100}; | 374 | static int flv_sample_rates[] = {5512, 11025, 22050, 44100}; |
375 | int flv_sample_rate = flv_sample_rates[sample_rate & 0x03]; | 375 | int flv_sample_rate = flv_sample_rates[sample_rate & 0x03]; |
376 | 376 | ||
377 | + // reset the sample rate by sequence header | ||
378 | + if (aac_sample_rate != _SRS_AAC_SAMPLE_RATE_UNSET) { | ||
379 | + static int aac_sample_rates[] = { | ||
380 | + 96000, 88200, 64000, 48000, | ||
381 | + 44100, 32000, 24000, 22050, | ||
382 | + 16000, 12000, 11025, 8000, | ||
383 | + 7350, 0, 0, 0 | ||
384 | + }; | ||
385 | + flv_sample_rate = aac_sample_rates[aac_sample_rate]; | ||
386 | + } | ||
387 | + | ||
377 | // sync time set to 0, donot adjust the aac timestamp. | 388 | // sync time set to 0, donot adjust the aac timestamp. |
378 | if (!sync_ms) { | 389 | if (!sync_ms) { |
379 | return flv_pts; | 390 | return flv_pts; |
@@ -1016,7 +1027,7 @@ int SrsHlsCache::write_audio(SrsAvcAacCodec* codec, SrsHlsMuxer* muxer, int64_t | @@ -1016,7 +1027,7 @@ int SrsHlsCache::write_audio(SrsAvcAacCodec* codec, SrsHlsMuxer* muxer, int64_t | ||
1016 | 1027 | ||
1017 | // start buffer, set the af | 1028 | // start buffer, set the af |
1018 | if (ab->size == 0) { | 1029 | if (ab->size == 0) { |
1019 | - pts = aac_jitter->on_buffer_start(pts, sample->sound_rate); | 1030 | + pts = aac_jitter->on_buffer_start(pts, sample->sound_rate, codec->aac_sample_rate); |
1020 | 1031 | ||
1021 | af->dts = af->pts = audio_buffer_start_pts = pts; | 1032 | af->dts = af->pts = audio_buffer_start_pts = pts; |
1022 | af->pid = TS_AUDIO_PID; | 1033 | af->pid = TS_AUDIO_PID; |
@@ -66,9 +66,11 @@ public: | @@ -66,9 +66,11 @@ public: | ||
66 | /** | 66 | /** |
67 | * when buffer start, calc the "correct" pts for ts, | 67 | * when buffer start, calc the "correct" pts for ts, |
68 | * @param flv_pts, the flv pts calc from flv header timestamp, | 68 | * @param flv_pts, the flv pts calc from flv header timestamp, |
69 | + * @param sample_rate, the sample rate in format(flv/RTMP packet header). | ||
70 | + * @param aac_sample_rate, the sample rate in codec(sequence header). | ||
69 | * @return the calc correct pts. | 71 | * @return the calc correct pts. |
70 | */ | 72 | */ |
71 | - virtual int64_t on_buffer_start(int64_t flv_pts, int sample_rate); | 73 | + virtual int64_t on_buffer_start(int64_t flv_pts, int sample_rate, int aac_sample_rate); |
72 | /** | 74 | /** |
73 | * when buffer continue, muxer donot write to file, | 75 | * when buffer continue, muxer donot write to file, |
74 | * the audio buffer continue grow and donot need a pts, | 76 | * the audio buffer continue grow and donot need a pts, |
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
31 | // current release version | 31 | // current release version |
32 | #define VERSION_MAJOR "0" | 32 | #define VERSION_MAJOR "0" |
33 | #define VERSION_MINOR "9" | 33 | #define VERSION_MINOR "9" |
34 | -#define VERSION_REVISION "149" | 34 | +#define VERSION_REVISION "150" |
35 | #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION | 35 | #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION |
36 | // server info. | 36 | // server info. |
37 | #define RTMP_SIG_SRS_KEY "SRS" | 37 | #define RTMP_SIG_SRS_KEY "SRS" |
-
请 注册 或 登录 后发表评论