mirror of
https://github.com/ossrs/srs.git
synced 2025-02-15 04:42:04 +00:00
Support Opus audio-level
This commit is contained in:
parent
f1b1f78c4e
commit
98706f793e
2 changed files with 31 additions and 13 deletions
|
@ -164,7 +164,7 @@ std::string srs_audio_codec_id2str(SrsAudioCodecId codec);
|
||||||
/**
|
/**
|
||||||
* The audio AAC frame trait(characteristic).
|
* The audio AAC frame trait(characteristic).
|
||||||
* @doc video_file_format_spec_v10_1.pdf, page 77, E.4.2 Audio Tags
|
* @doc video_file_format_spec_v10_1.pdf, page 77, E.4.2 Audio Tags
|
||||||
* AACPacketType IF SoundFormat == 10 UI8
|
* AACPacketType IF SoundFormat == 10 or 13 UI8
|
||||||
* The following values are defined:
|
* The following values are defined:
|
||||||
* 0 = AAC sequence header
|
* 0 = AAC sequence header
|
||||||
* 1 = AAC raw
|
* 1 = AAC raw
|
||||||
|
@ -172,11 +172,16 @@ std::string srs_audio_codec_id2str(SrsAudioCodecId codec);
|
||||||
enum SrsAudioAacFrameTrait
|
enum SrsAudioAacFrameTrait
|
||||||
{
|
{
|
||||||
// set to the max value to reserved, for array map.
|
// set to the max value to reserved, for array map.
|
||||||
SrsAudioAacFrameTraitReserved = 2,
|
SrsAudioAacFrameTraitReserved = 0xff,
|
||||||
SrsAudioAacFrameTraitForbidden = 2,
|
SrsAudioAacFrameTraitForbidden = 0xff,
|
||||||
|
|
||||||
SrsAudioAacFrameTraitSequenceHeader = 0,
|
SrsAudioAacFrameTraitSequenceHeader = 0,
|
||||||
SrsAudioAacFrameTraitRawData = 1,
|
SrsAudioAacFrameTraitRawData = 1,
|
||||||
|
|
||||||
|
// For Opus, the frame trait, may has more than one traits.
|
||||||
|
SrsAudioOpusFrameTraitRaw = 2,
|
||||||
|
SrsAudioOpusFrameTraitSamplingRate = 4,
|
||||||
|
SrsAudioOpusFrameTraitAudioLevel = 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2363,7 +2363,7 @@ char srs_utils_flv_audio_sound_format(char* data, int size)
|
||||||
|
|
||||||
char srs_utils_flv_audio_sound_rate(char* data, int size)
|
char srs_utils_flv_audio_sound_rate(char* data, int size)
|
||||||
{
|
{
|
||||||
if (size < 2) {
|
if (size < 3) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2372,8 +2372,14 @@ char srs_utils_flv_audio_sound_rate(char* data, int size)
|
||||||
|
|
||||||
// For Opus, the first UINT8 is sampling rate.
|
// For Opus, the first UINT8 is sampling rate.
|
||||||
uint8_t sound_format = (data[0] >> 4) & 0x0f;
|
uint8_t sound_format = (data[0] >> 4) & 0x0f;
|
||||||
if (sound_format == 13) {
|
if (sound_format != SrsAudioCodecIdOpus) {
|
||||||
sound_rate = data[1];
|
return sound_rate;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The FrameTrait for AAC or Opus.
|
||||||
|
uint8_t frame_trait = data[1];
|
||||||
|
if ((frame_trait&SrsAudioOpusFrameTraitSamplingRate) == SrsAudioOpusFrameTraitSamplingRate) {
|
||||||
|
sound_rate = data[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
return sound_rate;
|
return sound_rate;
|
||||||
|
@ -2409,16 +2415,13 @@ char srs_utils_flv_audio_aac_packet_type(char* data, int size)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (srs_utils_flv_audio_sound_format(data, size) != 10) {
|
uint8_t sound_format = srs_utils_flv_audio_sound_format(data, size);
|
||||||
|
if (sound_format != SrsAudioCodecIdAAC && sound_format != SrsAudioCodecIdOpus) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t aac_packet_type = data[1];
|
uint8_t frame_trait = data[1];
|
||||||
if (aac_packet_type > 1) {
|
return frame_trait;
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return aac_packet_type;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char* srs_human_amf0_print(srs_amf0_t amf0, char** pdata, int* psize)
|
char* srs_human_amf0_print(srs_amf0_t amf0, char** pdata, int* psize)
|
||||||
|
@ -2624,6 +2627,16 @@ const char* srs_human_flv_audio_aac_packet_type2string(char aac_packet_type)
|
||||||
switch (aac_packet_type) {
|
switch (aac_packet_type) {
|
||||||
case 0: return sps_pps;
|
case 0: return sps_pps;
|
||||||
case 1: return raw;
|
case 1: return raw;
|
||||||
|
|
||||||
|
// See enum SrsAudioAacFrameTrait
|
||||||
|
// For Opus, the frame trait, may has more than one traits.
|
||||||
|
case 2: return "RAW";
|
||||||
|
case 4: return "SR";
|
||||||
|
case 8: return "AL";
|
||||||
|
case 6: return "RAW|SR";
|
||||||
|
case 10: return "RAW|AL";
|
||||||
|
case 14: return "RAW|SR|AL";
|
||||||
|
|
||||||
default: return unknown;
|
default: return unknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue