1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

DVR: support mp3 audio codec. (#2593) v5.0.17

This commit is contained in:
Haibo Chen 2021-09-10 11:53:31 +08:00 committed by winlin
parent e03ada39a1
commit 7fd5e8607c
8 changed files with 167 additions and 14 deletions

View file

@ -1812,11 +1812,16 @@ SrsAudioCodecId SrsMp4TrackBox::soun_codec()
if (box->entry_count() == 0) {
return SrsAudioCodecIdForbidden;
}
SrsMp4SampleEntry* entry = box->entrie_at(0);
switch(entry->type) {
case SrsMp4BoxTypeMP4A: return SrsAudioCodecIdAAC;
default: return SrsAudioCodecIdForbidden;
SrsMp4EsdsBox* esds_box = mp4a()->esds();
switch (esds_box->es->decConfigDescr.objectTypeIndication) {
case SrsMp4ObjectTypeAac:
return SrsAudioCodecIdAAC;
case SrsMp4ObjectTypeMp3:
case SrsMp4ObjectTypeMp1a:
return SrsAudioCodecIdMP3;
default:
return SrsAudioCodecIdForbidden;
}
}
@ -3429,7 +3434,7 @@ srs_error_t SrsMp4DecoderConfigDescriptor::encode_payload(SrsBuffer* buf)
buf->write_3bytes(bufferSizeDB);
buf->write_4bytes(maxBitrate);
buf->write_4bytes(avgBitrate);
if (decSpecificInfo && (err = decSpecificInfo->encode(buf)) != srs_success) {
return srs_error_wrap(err, "encode des specific info");
}
@ -3440,7 +3445,7 @@ srs_error_t SrsMp4DecoderConfigDescriptor::encode_payload(SrsBuffer* buf)
srs_error_t SrsMp4DecoderConfigDescriptor::decode_payload(SrsBuffer* buf)
{
srs_error_t err = srs_success;
objectTypeIndication = (SrsMp4ObjectType)buf->read_1bytes();
uint8_t v = buf->read_1bytes();
@ -5488,7 +5493,7 @@ srs_error_t SrsMp4Decoder::parse_moov(SrsMp4MovieBox* moov)
if (vide && !avcc) {
return srs_error_new(ERROR_MP4_ILLEGAL_MOOV, "missing video sequence header");
}
if (soun && !asc) {
if (soun && !asc && soun->soun_codec() == SrsAudioCodecIdAAC) {
return srs_error_new(ERROR_MP4_ILLEGAL_MOOV, "missing audio sequence header");
}
@ -5910,13 +5915,15 @@ srs_error_t SrsMp4Encoder::flush()
es->ES_ID = 0x02;
SrsMp4DecoderConfigDescriptor& desc = es->decConfigDescr;
desc.objectTypeIndication = SrsMp4ObjectTypeAac;
desc.objectTypeIndication = get_audio_object_type();
desc.streamType = SrsMp4StreamTypeAudioStream;
srs_freep(desc.decSpecificInfo);
SrsMp4DecoderSpecificInfo* asc = new SrsMp4DecoderSpecificInfo();
desc.decSpecificInfo = asc;
asc->asc = pasc;;
if (SrsMp4ObjectTypeAac == desc.objectTypeIndication) {
SrsMp4DecoderSpecificInfo* asc = new SrsMp4DecoderSpecificInfo();
desc.decSpecificInfo = asc;
asc->asc = pasc;
}
}
if ((err = samples->write(moov)) != srs_success) {
@ -6045,6 +6052,18 @@ srs_error_t SrsMp4Encoder::do_write_sample(SrsMp4Sample* ps, uint8_t* sample, ui
return err;
}
SrsMp4ObjectType SrsMp4Encoder::get_audio_object_type()
{
switch (acodec) {
case SrsAudioCodecIdAAC:
return SrsMp4ObjectTypeAac;
case SrsAudioCodecIdMP3:
return (srs_flv_srates[sample_rate] > 24000) ? SrsMp4ObjectTypeMp1a : SrsMp4ObjectTypeMp3; // 11172 - 3
default:
return SrsMp4ObjectTypeForbidden;
}
}
SrsMp4M2tsInitEncoder::SrsMp4M2tsInitEncoder()
{
writer = NULL;