mirror of
https://github.com/ossrs/srs.git
synced 2025-02-15 04:42:04 +00:00
for #310, refine code to support he/hev2, use aac object.
This commit is contained in:
parent
8dbabe3708
commit
885b9af122
10 changed files with 23 additions and 21 deletions
|
@ -1397,15 +1397,15 @@ int SrsSource::on_audio(SrsCommonMessage* __audio)
|
|||
|
||||
// when got audio stream info.
|
||||
SrsStatistic* stat = SrsStatistic::instance();
|
||||
if ((ret = stat->on_audio_info(_req, SrsCodecAudioAAC, sample.sound_rate, sample.sound_type, codec.aac_profile)) != ERROR_SUCCESS) {
|
||||
if ((ret = stat->on_audio_info(_req, SrsCodecAudioAAC, sample.sound_rate, sample.sound_type, codec.aac_object)) != ERROR_SUCCESS) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
srs_trace("%dB audio sh, "
|
||||
"codec(%d, profile=%d, %dchannels, %dkbps, %dHZ), "
|
||||
"codec(%d, profile=%s, %dchannels, %dkbps, %dHZ), "
|
||||
"flv(%dbits, %dchannels, %dHZ)",
|
||||
msg.size, codec.audio_codec_id,
|
||||
codec.aac_profile, codec.aac_channels,
|
||||
srs_codec_aac_object2str(codec.aac_object).c_str(), codec.aac_channels,
|
||||
codec.audio_data_rate / 1000, aac_sample_rates[codec.aac_sample_rate],
|
||||
flv_sample_sizes[sample.sound_size], flv_sound_types[sample.sound_type],
|
||||
flv_sample_rates[sample.sound_rate]);
|
||||
|
|
|
@ -60,7 +60,7 @@ SrsStatisticStream::SrsStatisticStream()
|
|||
acodec = SrsCodecAudioReserved1;
|
||||
asample_rate = SrsCodecAudioSampleRateReserved;
|
||||
asound_type = SrsCodecAudioSoundTypeReserved;
|
||||
aac_profile = SrsAacProfileReserved;
|
||||
aac_object = SrsAacObjectTypeReserved;
|
||||
}
|
||||
|
||||
SrsStatisticStream::~SrsStatisticStream()
|
||||
|
@ -128,7 +128,7 @@ int SrsStatistic::on_video_info(SrsRequest* req,
|
|||
|
||||
int SrsStatistic::on_audio_info(SrsRequest* req,
|
||||
SrsCodecAudio acodec, SrsCodecAudioSampleRate asample_rate, SrsCodecAudioSoundType asound_type,
|
||||
SrsAacProfile aac_profile
|
||||
SrsAacObjectType aac_object
|
||||
) {
|
||||
int ret = ERROR_SUCCESS;
|
||||
|
||||
|
@ -139,7 +139,7 @@ int SrsStatistic::on_audio_info(SrsRequest* req,
|
|||
stream->acodec = acodec;
|
||||
stream->asample_rate = asample_rate;
|
||||
stream->asound_type = asound_type;
|
||||
stream->aac_profile = aac_profile;
|
||||
stream->aac_object = aac_object;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -257,7 +257,7 @@ int SrsStatistic::dumps_streams(stringstream& ss)
|
|||
<< __SRS_JFIELD_STR("codec", srs_codec_audio2str(stream->acodec)) << __SRS_JFIELD_CONT
|
||||
<< __SRS_JFIELD_ORG("sample_rate", (int)flv_sample_rates[stream->asample_rate]) << __SRS_JFIELD_CONT
|
||||
<< __SRS_JFIELD_ORG("channel", (int)stream->asound_type + 1) << __SRS_JFIELD_CONT
|
||||
<< __SRS_JFIELD_STR("profile", srs_codec_aac_profile2str(stream->aac_profile))
|
||||
<< __SRS_JFIELD_STR("profile", srs_codec_aac_object2str(stream->aac_object))
|
||||
<< __SRS_JOBJECT_END;
|
||||
}
|
||||
|
||||
|
|
|
@ -73,7 +73,7 @@ public:
|
|||
* 1.5.1.1 Audio object type definition, page 23,
|
||||
* in aac-mp4a-format-ISO_IEC_14496-3+2001.pdf.
|
||||
*/
|
||||
SrsAacProfile aac_profile;
|
||||
SrsAacObjectType aac_object;
|
||||
public:
|
||||
SrsStatisticStream();
|
||||
virtual ~SrsStatisticStream();
|
||||
|
@ -120,7 +120,7 @@ public:
|
|||
*/
|
||||
virtual int on_audio_info(SrsRequest* req,
|
||||
SrsCodecAudio acodec, SrsCodecAudioSampleRate asample_rate, SrsCodecAudioSoundType asound_type,
|
||||
SrsAacProfile aac_profile
|
||||
SrsAacObjectType aac_object
|
||||
);
|
||||
/**
|
||||
* when close stream.
|
||||
|
|
|
@ -43,7 +43,7 @@ SrsAacEncoder::SrsAacEncoder()
|
|||
_fs = NULL;
|
||||
got_sequence_header = false;
|
||||
tag_stream = new SrsStream();
|
||||
aac_profile = SrsAacProfileReserved;
|
||||
aac_object = SrsAacObjectTypeReserved;
|
||||
}
|
||||
|
||||
SrsAacEncoder::~SrsAacEncoder()
|
||||
|
@ -131,7 +131,7 @@ int SrsAacEncoder::write_audio(int64_t timestamp, char* data, int size)
|
|||
aac_sample_rate = ((audioObjectType << 1) & 0x0e) | ((aac_sample_rate >> 7) & 0x01);
|
||||
|
||||
audioObjectType = (audioObjectType >> 3) & 0x1f;
|
||||
aac_profile = srs_codec_aac_rtmp2ts((SrsAacObjectType)audioObjectType);
|
||||
aac_object = (SrsAacObjectType)audioObjectType;
|
||||
|
||||
got_sequence_header = true;
|
||||
|
||||
|
@ -186,6 +186,7 @@ int SrsAacEncoder::write_audio(int64_t timestamp, char* data, int size)
|
|||
// channel_configuration 3 uimsbf
|
||||
// original/copy 1 bslbf
|
||||
// home 1 bslbf
|
||||
SrsAacProfile aac_profile = srs_codec_aac_rtmp2ts(aac_object);
|
||||
*pp++ = ((aac_profile << 6) & 0xc0) | ((aac_sample_rate << 2) & 0x3c) | ((aac_channels >> 2) & 0x01);
|
||||
// 4bits left.
|
||||
// adts_variable_header(), 1.A.2.2.2 Variable Header of ADTS
|
||||
|
|
|
@ -45,7 +45,7 @@ class SrsAacEncoder
|
|||
private:
|
||||
SrsFileWriter* _fs;
|
||||
private:
|
||||
SrsAacProfile aac_profile;
|
||||
SrsAacObjectType aac_object;
|
||||
int8_t aac_sample_rate;
|
||||
int8_t aac_channels;
|
||||
bool got_sequence_header;
|
||||
|
|
|
@ -294,7 +294,7 @@ SrsAvcAacCodec::SrsAvcAacCodec()
|
|||
|
||||
avc_profile = 0;
|
||||
avc_level = 0;
|
||||
aac_profile = SrsAacProfileReserved;
|
||||
aac_object = SrsAacObjectTypeReserved;
|
||||
aac_sample_rate = __SRS_AAC_SAMPLE_RATE_UNSET; // sample rate ignored
|
||||
aac_channels = 0;
|
||||
avc_extra_size = 0;
|
||||
|
@ -493,8 +493,8 @@ int SrsAvcAacCodec::audio_aac_sequence_header_demux(char* data, int size)
|
|||
aac_sample_rate = samplingFrequencyIndex;
|
||||
|
||||
// convert the object type in sequence header to aac profile of ADTS.
|
||||
aac_profile = srs_codec_aac_rtmp2ts((SrsAacObjectType)profile_ObjectType);
|
||||
if (aac_profile == SrsAacProfileReserved) {
|
||||
aac_object = (SrsAacObjectType)profile_ObjectType;
|
||||
if (aac_object == SrsAacObjectTypeReserved) {
|
||||
ret = ERROR_HLS_DECODE_ERROR;
|
||||
srs_error("audio codec decode aac sequence header failed, "
|
||||
"adts object=%d invalid. ret=%d", profile_ObjectType, ret);
|
||||
|
|
|
@ -472,7 +472,7 @@ public:
|
|||
* 1.5.1.1 Audio object type definition, page 23,
|
||||
* in aac-mp4a-format-ISO_IEC_14496-3+2001.pdf.
|
||||
*/
|
||||
SrsAacProfile aac_profile;
|
||||
SrsAacObjectType aac_object;
|
||||
/**
|
||||
* samplingFrequencyIndex
|
||||
*/
|
||||
|
|
|
@ -2797,7 +2797,8 @@ int SrsTsCache::do_cache_aac(SrsAvcAacCodec* codec, SrsCodecSample* sample)
|
|||
int8_t number_of_raw_data_blocks_in_frame; //2bits, 0 indicating 1 raw_data_block()
|
||||
*/
|
||||
// profile, 2bits
|
||||
adts_header[2] = (codec->aac_profile << 6) & 0xc0;
|
||||
SrsAacProfile aac_profile = srs_codec_aac_rtmp2ts(codec->aac_object);
|
||||
adts_header[2] = (aac_profile << 6) & 0xc0;
|
||||
// sampling_frequency_index 4bits
|
||||
adts_header[2] |= (codec->aac_sample_rate << 2) & 0x3c;
|
||||
// channel_configuration 3bits
|
||||
|
|
|
@ -432,7 +432,7 @@ int SrsRawAacStream::adts_demux(SrsStream* stream, char** pframe, int* pnb_frame
|
|||
|
||||
// the codec info.
|
||||
codec.protection_absent = protection_absent;
|
||||
codec.profile = (SrsAacProfile)profile;
|
||||
codec.aac_object = srs_codec_aac_ts2rtmp((SrsAacProfile)profile);
|
||||
codec.sampling_frequency_index = sampling_frequency_index;
|
||||
codec.channel_configuration = channel_configuration;
|
||||
codec.frame_length = frame_length;
|
||||
|
@ -471,11 +471,11 @@ int SrsRawAacStream::mux_sequence_header(SrsRawAacStreamCodec* codec, string& sh
|
|||
int ret = ERROR_SUCCESS;
|
||||
|
||||
// only support aac profile 1-4.
|
||||
if (codec->profile == SrsAacProfileReserved) {
|
||||
if (codec->aac_object == SrsAacObjectTypeReserved) {
|
||||
return ERROR_AAC_DATA_INVALID;
|
||||
}
|
||||
|
||||
SrsAacObjectType audioObjectType = srs_codec_aac_ts2rtmp(codec->profile);
|
||||
SrsAacObjectType audioObjectType = codec->aac_object;
|
||||
char channelConfiguration = codec->channel_configuration;
|
||||
char samplingFrequencyIndex = codec->sampling_frequency_index;
|
||||
|
||||
|
|
|
@ -94,7 +94,7 @@ public:
|
|||
struct SrsRawAacStreamCodec
|
||||
{
|
||||
int8_t protection_absent;
|
||||
SrsAacProfile profile;
|
||||
SrsAacObjectType aac_object;
|
||||
int8_t sampling_frequency_index;
|
||||
int8_t channel_configuration;
|
||||
int16_t frame_length;
|
||||
|
|
Loading…
Reference in a new issue