Coder Social home page Coder Social logo

Comments (5)

shawnisingh avatar shawnisingh commented on August 11, 2024

Here are the three options that were discussed, with some additional details that I could think of:

(1) Use media_time in ISOBMFF edit list, plus all the subsequent timestamp and duration changes scattered across the mp4 boxes. In particular, duration of last packet in TRUN and corresponding SubSegmentDuration would need to be shorter as well, so that playback could seek sample-accurately and know how to trim off the end as well.

(2) Start and end trimming described within ia_static_meta(), colocated with the description of scalable multi-channel and ambisonic. In my proposal that would be within AudioElement.

(3) for Opus only, there is preSkip in the typical opus config structure - I assume preSkip is the number of audio samples to be trimmed from the first audio frame? If I understand correctly, Opus audio frames are capable of expressing their shorter duration, so then end trimming does not need to be explicit.

From these three options, perhaps we should use all three, except that we don't keep preSkip?
The reason I think all three are meaningful: (1) ISOBMFF approach allows sample-accurate seeking, and helps to represent sample-accurate presentation durations that may be useful for some users. (2) will allow us to express correct trimming if any parser reads OBU syntax without the MP4 container. It seems OK that the redundancy exists when the OBU is contained in MP4. (3) -- preSkip would be redundant and unnecessary, but for shortened duration of last audio frame, I would expect it will be easier to keep the semantics of the Opus encoder and not force the frame to be full size unnecessarily.

Would be interested to hear what others think, thanks for considering!

from iamf.

tdaede avatar tdaede commented on August 11, 2024

For (3), Opus audio packets themselves cannot express their shorter duration, however as a whole the stream can because of the inclusion of preSkip. This is technically redundant with the edit list in normal Opus-in-ISOBMFF packaging, and is mainly there to keep the same config box format when Opus is put into other containers without an equivalent feature to edit list start trimming.

from iamf.

cconcolato avatar cconcolato commented on August 11, 2024

In my view, it should be possible to store the information in OBU streams, when not stored into MP4. We should not reproduce the errors of AAC where the round tripping from MP4 to AAC looses the information.

Also, ideally, when storing in MP4, it should be possible to remove the information from the bitstream, to avoid redundancy and possibility of divergence. If that is not possible, then the spec should be clear that the 2 places (bitstream and container) shall match.

from iamf.

sunghee-hwang avatar sunghee-hwang commented on August 11, 2024

In my view, it should be possible to store the information in OBU streams, when not stored into MP4. We should not reproduce the errors of AAC where the round tripping from MP4 to AAC looses the information.

Also, ideally, when storing in MP4, it should be possible to remove the information from the bitstream, to avoid redundancy and possibility of divergence. If that is not possible, then the spec should be clear that the 2 places (bitstream and container) shall match.

It has been resolved as implementing obu_trimming_status information in Audio Frame OBU.

from iamf.

tdaede avatar tdaede commented on August 11, 2024

OK. One thing that seems to be still missing is how this interacts with edit lists.

from iamf.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.