As author of your freeware encoder cli program, please fix your broken piece of software. Your manner of tagging files is incompatible with the ISO Base Media File Format.
Could you please pinpoint us to the part of the ISO 14496 that you believe we are breaking, especially with regards to the position of the MOOV atom in the physical file?
Thank you very much in advance.
It isn't the position of the moov atom. Currently, its the last 80 bytes or so - until you implement tagging when it will balloon in size. Those last 80 bytes where you try to implement fubar2000's tagging scheme is the problem.
Specifically:
• Your 'meta' atom moov.udta.meta.tags.meta is in direct violation of the file format. From the documentation:
8.44.1 The Meta box
8.44.1.1 Definition
Box Type: ‘meta’
Container: File, Movie Box (‘moov’), or Track Box (‘trak’)
Mandatory: No
Quantity: Zero or one
A meta box contains descriptive or annotative metadata. The 'meta' box is required to contain a ‘hdlr’ box
indicating the structure or format of the ‘meta’ box contents. That metadata is located either within a box
within this box (e.g. an XML box), or is located by the item identified by a primary item box
[snip]
aligned(8) class MetaBox (handler_type)
extends FullBox(‘meta’, version = 0, 0) {
HandlerBox(handler_type) theHandler;
[snip]
}
So your meta box is non-compliant with four (4) parts of the 'meta' atom specification:
1-improper placement (your meta is in not in the enumerated containers).
2- you are missing the required 'hdlr' box.
3- versioning of your meta atom is wrong (though 3 is less a violation since its a renegade atom).
4-lemme count the 'meta' atoms. I should have ZERO or ONE. I have 'moov.udta.meta' (Oh, that's my limit of 1... oh, just for fun I'll keep on looking...) 'moov.udta.meta.tags.meta' (oh dear, that's 2).
• Your atoms/boxes after your improper meta are NOT atoms/boxes as defined in the ISO Base Media File Format. As an example, take your tool atom (moov.udta.meta.tags.meta.tool - hopefully you see a double-meta there). The specification defines an atom as (edited for clarity):
class Box {
unsigned int(32) size; //number of bytes in this box, including all its fields and contained boxes
unsigned int(32) type = boxtype; //four printable characters
}
The atom directly after 'meta' is 'tool'. But... if you have a 32-bit number for size... what is 0x00000474 ? 1140 bytes. But you don't have 1140 bytes after that to EOF - that 0x74 is coming from the 't' in 'tool' because you WROTE A 24-BIT NUMBER. The 'tool' atom you intended to write became the 'ool ' atom (with a NULL at the end). Just count by 4's after meta.
That's 5 times you've broken compliance. In 80 bytes no less!
The entire file format is based off that 4byte-4byte specification. It isn't reassuring that Nero's freeware encoder is in violation of the ISO Base File Format specification. And if you follow down the fubar2000's path like a lemming - there are things in 'tags' which I assume are trying to be atoms. So, how does one pack 'artist' into 4bytes. Bitpacking? And what about the duplication - artwork being embedded twice? Is Nero going to be fubar2000's lemming? Nero has the duplicate tool/encoder tags, will Nero be duplicating everything? I say, will Nero be duplicating everything?
--------
Additionally, you want to spread this tagging manner to the 3GP world. There is nothing in THAT specification that says anything about iTunes-style metadata being in their file format (search for the word 'asset' to find their way of storing metadata). So while it isn't forbidden, no 3GP device will show any metadata because it isn't properly stored. And, you won't find support for that in libmp4v2, so please consider not trying to tag 3GP (and later or derivative) files.
MP4 file should not be streamable, there are MPEG-4 streaming protocols that deal with streaming of the MPEG-4 content.
Uh, they CAN be streamable. How do you think iTunes streams mp4 over an airport connection? But when the receiving device has no 'moov' atom at the beginning to tell it what its bitrate... or anything is, the device can't decode it. I also think that when you tag with libmp4v2 in its default manner, you will prevent the iPod Shuffle from playing your files. It has been discussed in in this forum.