Parse Opus for tools

pull/1304/head
winlin 6 years ago
parent e77b570636
commit f1b1f78c4e

@ -89,6 +89,11 @@ string srs_audio_sample_rate2str(SrsAudioSampleRate v)
case SrsAudioSampleRate11025: return "11025";
case SrsAudioSampleRate22050: return "22050";
case SrsAudioSampleRate44100: return "44100";
case SrsAudioSampleRateNB8kHz: return "NB8kHz";
case SrsAudioSampleRateMB12kHz: return "MB12kHz";
case SrsAudioSampleRateWB16kHz: return "WB16kHz";
case SrsAudioSampleRateSWB24kHz: return "SWB24kHz";
case SrsAudioSampleRateFB48kHz: return "FB48kHz";
default: return "Other";
}
}

@ -193,13 +193,23 @@ enum SrsAudioAacFrameTrait
enum SrsAudioSampleRate
{
// set to the max value to reserved, for array map.
SrsAudioSampleRateReserved = 4,
SrsAudioSampleRateForbidden = 4,
SrsAudioSampleRateReserved = 0xff,
SrsAudioSampleRateForbidden = 0xff,
// For FLV, only support 5, 11, 22, 44KHz sampling rate.
SrsAudioSampleRate5512 = 0,
SrsAudioSampleRate11025 = 1,
SrsAudioSampleRate22050 = 2,
SrsAudioSampleRate44100 = 3,
// For Opus, support 8, 12, 16, 24, 48KHz
// We will write a UINT8 sampling rate after FLV audio tag header.
// @doc https://tools.ietf.org/html/rfc6716#section-2
SrsAudioSampleRateNB8kHz = 8, // NB (narrowband)
SrsAudioSampleRateMB12kHz = 12, // MB (medium-band)
SrsAudioSampleRateWB16kHz = 16, // WB (wideband)
SrsAudioSampleRateSWB24kHz = 24, // SWB (super-wideband)
SrsAudioSampleRateFB48kHz = 48, // FB (fullband)
};
std::string srs_audio_sample_rate2str(SrsAudioSampleRate v);

@ -2354,7 +2354,7 @@ char srs_utils_flv_audio_sound_format(char* data, int size)
uint8_t sound_format = data[0];
sound_format = (sound_format >> 4) & 0x0f;
if (sound_format > 15 || sound_format == 12 || sound_format == 13) {
if (sound_format > 15 || sound_format == 12) {
return -1;
}
@ -2363,13 +2363,19 @@ char srs_utils_flv_audio_sound_format(char* data, int size)
char srs_utils_flv_audio_sound_rate(char* data, int size)
{
if (size < 1) {
if (size < 2) {
return -1;
}
uint8_t sound_rate = data[0];
sound_rate = (sound_rate >> 2) & 0x03;
// For Opus, the first UINT8 is sampling rate.
uint8_t sound_format = (data[0] >> 4) & 0x0f;
if (sound_format == 13) {
sound_rate = data[1];
}
return sound_rate;
}
@ -2519,6 +2525,7 @@ const char* srs_human_flv_audio_sound_format2string(char sound_format)
static const char* aac = "AAC";
static const char* speex = "Speex";
static const char* mp3_8khz = "MP3KHz8";
static const char* opus = "Opus";
static const char* device_specific = "DeviceSpecific";
static const char* unknown = "Unknown";
@ -2535,6 +2542,7 @@ const char* srs_human_flv_audio_sound_format2string(char sound_format)
case 9: return reserved;
case 10: return aac;
case 11: return speex;
case 13: return opus;
case 14: return mp3_8khz;
case 15: return device_specific;
default: return unknown;
@ -2551,11 +2559,26 @@ const char* srs_human_flv_audio_sound_rate2string(char sound_rate)
static const char* khz_44 = "44KHz";
static const char* unknown = "Unknown";
// For Opus, support 8, 12, 16, 24, 48KHz
// We will write a UINT8 sampling rate after FLV audio tag header.
// @doc https://tools.ietf.org/html/rfc6716#section-2
static const char* NB8kHz = "NB8kHz";
static const char* MB12kHz = "MB12kHz";
static const char* WB16kHz = "WB16kHz";
static const char* SWB24kHz = "SWB24kHz";
static const char* FB48kHz = "FB48kHz";
switch (sound_rate) {
case 0: return khz_5_5;
case 1: return khz_11;
case 2: return khz_22;
case 3: return khz_44;
// For Opus, support 8, 12, 16, 24, 48KHz
case 8: return NB8kHz;
case 12: return MB12kHz;
case 16: return WB16kHz;
case 24: return SWB24kHz;
case 48: return FB48kHz;
default: return unknown;
}

Loading…
Cancel
Save