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).
|
||||
* @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:
|
||||
* 0 = AAC sequence header
|
||||
* 1 = AAC raw
|
||||
|
@ -172,11 +172,16 @@ std::string srs_audio_codec_id2str(SrsAudioCodecId codec);
|
|||
enum SrsAudioAacFrameTrait
|
||||
{
|
||||
// set to the max value to reserved, for array map.
|
||||
SrsAudioAacFrameTraitReserved = 2,
|
||||
SrsAudioAacFrameTraitForbidden = 2,
|
||||
SrsAudioAacFrameTraitReserved = 0xff,
|
||||
SrsAudioAacFrameTraitForbidden = 0xff,
|
||||
|
||||
SrsAudioAacFrameTraitSequenceHeader = 0,
|
||||
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)
|
||||
{
|
||||
if (size < 2) {
|
||||
if (size < 3) {
|
||||
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.
|
||||
uint8_t sound_format = (data[0] >> 4) & 0x0f;
|
||||
if (sound_format == 13) {
|
||||
sound_rate = data[1];
|
||||
if (sound_format != SrsAudioCodecIdOpus) {
|
||||
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;
|
||||
|
@ -2409,16 +2415,13 @@ char srs_utils_flv_audio_aac_packet_type(char* data, int size)
|
|||
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;
|
||||
}
|
||||
|
||||
uint8_t aac_packet_type = data[1];
|
||||
if (aac_packet_type > 1) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
return aac_packet_type;
|
||||
uint8_t frame_trait = data[1];
|
||||
return frame_trait;
|
||||
}
|
||||
|
||||
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) {
|
||||
case 0: return sps_pps;
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue