Implemented MP4 "wave" box, added support for QuickTime-style ISOBMF AAC audio tracks ( = mp4a containing wave containing esds)

This commit is contained in:
Thulinma 2022-11-18 02:19:04 +01:00
parent a2700aad17
commit afbfd504fe
4 changed files with 25 additions and 3 deletions

View file

@ -238,6 +238,7 @@ namespace MP4{
case 0x6D646961: return ((MDIA *)this)->toPrettyString(indent); break;
case 0x6D696E66: return ((MINF *)this)->toPrettyString(indent); break;
case 0x64696E66: return ((DINF *)this)->toPrettyString(indent); break;
case 0x77617665: return ((WAVE *)this)->toPrettyString(indent); break;
case 0x6D66726F: return ((MFRO *)this)->toPrettyString(indent); break;
case 0x68646C72: return ((HDLR *)this)->toPrettyString(indent); break;
case 0x766D6864: return ((VMHD *)this)->toPrettyString(indent); break;

View file

@ -1318,6 +1318,8 @@ namespace MP4{
DINF::DINF(){memcpy(data + 4, "dinf", 4);}
WAVE::WAVE(){memcpy(data + 4, "wave", 4);}
MFRA::MFRA(){memcpy(data + 4, "mfra", 4);}
MFRO::MFRO(){memcpy(data + 4, "mfro", 4);}

View file

@ -346,6 +346,11 @@ namespace MP4{
DINF();
};
class WAVE : public containerBox{
public:
WAVE();
};
class MFRO : public Box{
public:
MFRO();

View file

@ -373,9 +373,23 @@ namespace Mist{
if (sType == "ac-3"){
meta.setCodec(tNumber, "AC3");
}else{
MP4::ESDS esdsBox = (MP4::ESDS &)(aEntryBox.getCodecBox());
meta.setCodec(tNumber, esdsBox.getCodec());
meta.setInit(tNumber, esdsBox.getInitData());
MP4::Box codingBox = aEntryBox.getCodecBox();
if (codingBox.getType() == "esds"){
MP4::ESDS & esdsBox = (MP4::ESDS &)codingBox;
meta.setCodec(tNumber, esdsBox.getCodec());
meta.setInit(tNumber, esdsBox.getInitData());
}
if (codingBox.getType() == "wave"){
MP4::WAVE & waveBox = (MP4::WAVE &)codingBox;
for (size_t c = 0; c < waveBox.getContentCount(); ++c){
MP4::Box content = waveBox.getContent(c);
if (content.getType() == "esds"){
MP4::ESDS & esdsBox = (MP4::ESDS &)content;
meta.setCodec(tNumber, esdsBox.getCodec());
meta.setInit(tNumber, esdsBox.getInitData());
}
}
}
}
meta.setSize(tNumber, 16); ///\todo this might be nice to calculate from mp4 file;
}