All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning
- Nothing yet
0.47.0 - 2024-11-12
- CreatePrftBox now takes flags parameter
- PrftBox Info output
- Removed ReplaceChild method of StsdBox
- CreateHdlr name for timed metadata
- extension .m4s is interpreted as MP4 file in mp4ff-pslister
- moved mp4.GetVersion() to internal.GetVersion()
- NTP64 struct with methods to convert to time.Time
- Constants for PrftBox flags
- Unittest to all programs in cmd and examples.
- Documentation in doc.go files for all packages
- Allow missing optional DecoderSpecificInfo
- Avoid mp4.File.Mdat pointing to an empty mdat box
cmd/mp4ff-encrypt
did not parse command lineSeigSampleGroupEntry
calculated skipBytes incorrectlycmd/mp4ff-pslister
did not parse annex B HEVC correctly- error when decrypting and re-encrypting a segement (issue #378)
- Too specific functions DumpWithSampleData and Fragment.DumpSampleData
0.46.0 - 2024-08-08
- mvhd, tkhd, and mdhd timestamps were off by one day
- allow other sbgp and sgpd types than seig with senc
- mvhd, tkhd, and mdhd methods to set and get creation and modification times
- Event Message boxes evte, emib, emeb
- GetBtrt method to StsdBox
- Btrt pointer attribute in AudioSampleEnntry
- stpp can be used as value to CreateEmptyTrak
0.45.1 - 2024-07-12
- Box decoder error messages include start position
- Overflow in calculating sample decode time
- elng box errononously did not include full box headers
0.45.0 - 2024-06-06
- minimum Go version 1.16.
- ioutil imports replaced by io and os imports
- Info (mp4ff-info) output for esds boxes
- API of descriptors
- Parsing and info output for url boxes
- support for parsing of hierarchical sidx boxes
- handling of partially bad descriptors
- handle url boxes missing mandatory zero-ending byte
- support for ssix box
- support for leva box
- details of descriptors as Info outout (mp4ff-info)
0.44.0 - 2024-04-19
- New
TryDecodeMfro
function - New
mp4ff-subslister
tool replacingmp4ff-wvttlister
. It supportswvtt
andstpp
File.UpdateSidx()
to update or add a top level sidx box for a fragmented filemp4.DecStartSegmentOnMoof
flag to make the Decoder interpret every moof as a new segment start, unless styp, sidx, or mfra boxes give that information.- New example
add-sidx
shows how on can add a top-levelsidx
box to a fragmented file. It further has the option to remove unused encryption boxes, and to interpret each moof box as starting a new segment. - New method
MoovBox.IsEncrypted()
checks if an encrypted codec is signaled
- More robust check for mfro at the end of file
- GetTrex() return value
- Can now write PIFF
uuid
box that has previously been read - Does now avoid the second parsing of
senc
box if the file is ot encrypted as seen in moov box.
- mp4ff-wvttlister tool removed and replaced by mp4ff-subslister
0.43.0 - 2024-04-04
- InitSegment.TweakSingleTrakLive changes an init segment to fit live streaming
- Made bits.Mask() function public
- New counter methods added to bits.Reader
- colr box support for nclc and unknown colour_type
- av01, encv, and enca direct pointers in stsd
- All readers and writers in bits package now stop working at first error and provides the first error as AccError()
- Renamed bits.AccErrReader, bits.AccErrEBSPReader, bits.AccErrWriter to corresponiding names without AccErr
- Renamed bits.SliceWriterError to bits.ErrSliceWrite
- colr box supports unknown colrType
- kind box full-box header
- stpp support when the optional fields do not have a zero-termination byte
- mp4ff-wvttlister now lists all boxes in a sample
0.42.0 - 2024-01-26
- Support avc3 sample description when encrypting
- Full ProfileLevelTier parsing for HEVC
- Make pssh UUID comparison case-insensitive
- W3C Common PSSH Box UUID
- HEVC PicTiming SEI message parsing
- JSON marshaling of AVC PicTiming SEI message
0.41.0 - 2024-01-12
- Support for decrypting PIFF-encrypted segments
- Parsing of AVCDecoderConfigurationRecord
- Parsing of time offset in AVC PicTiming SEI
- Set senc.perSampleIVSize properly
0.40.2 - 2023-11-17
- Test of AVC PicTiming SEI with cbpDbpDelay set
- mp4ff-nallister has nicer output for annexb streams
- mp4ff-nallister handles AVC PicTiming SEI with cbpDbpDelay set
0.40.1 - 2023-11-01
- Swap of parameters in mp4ff-decrypt
0.40.0 - 2023-10-28
- New CLI app: mp4ff-encrypt to encrypt segments
- New CLI app: mp4ff-decrypt to decrypt segments
- New encyption-related functions in mp4
- GetAVCProtectRanges to fine protection ranges for AVC video
- CryptSampleCenc for encrypting of decrypting with cenc scheme
- EncryptSampleCbcs - for encrypting with cbcs scheme
- DecryptSampleCbcs - for decrypting with cbcs scheme
- InitProtect to protect an init segment
- EncryptFragment to encrypt a fragment
- DecryptInit to extract and remove decryption info from an init segment
- DecryptFragment to decrypt a fragment
- ExtractInitProtect to generate data needed for encryption
- AccErrEBSPReader.NrBitsRead method
- PsshBoxesFromBase64 and PsshBoxesFromBytes functions
- SPS.ChromaArrayType method
- Makefile now builds all CLI applications with version
- DecryptInit extracts pssh boxes
- Removed examples/decrypt-cenc and instead made cmd/mp4ff-decrypt
0.39.0 - 2023-10-13
- TfraEntry Time and MoofOffset types changed to unsigned
- TfraEntr attribute name SampleDelta corrected to SampleNumber
- MediaSegment and Fragment have new StartPos attribute
- mp4.File now has Mfra pointer
- MfraBox has new method FindEntry
- MediaSegment, Fragment, and Trun method CommonSampleDuration
- Added two MSS UUID constants
- fix AVC slice header parsing #272
- mp4ff-wvttlister works with Unified Streaming wvtt ismt file
- Fragment.GetFullSamples() allows tfdt to be absent
- Fragment.GetFullSamples() defaults to offset being moof
- mp4ff-wvttlister works for Unified Streaming wvtt asset
- mp4crop now crops elst entries
- mp4crop now handles multiple sample durations correctly
- HEVC SPS parsing details
0.38.1 - 2023-09-22
- ReadMP4File() failed when mfro not present
0.38.0 - 2023-09-06
- Loudness boxes
ludt
,tlou
, andalou
- Description boxes
desc
,©cpy
,©nam
,©ART
boxes GenericContainerBox
struct- new
DecFileFlags
provide option toDecodeFile
to look for mfra box
- Made
©too
useGenericContainerBox
- SidxBox got new attribute
AnchorPoint
- DecodeFile uses sidx or mfra data to find segment boundaries
0.37.0 - 2023-08-14
- Pointer to stpp sample entry in StsdBox
- Doc strings for pointers in StsdBox
- discard of parsing HEVC SPS data
SttsBox.GetSampleNrAtTime
now supports a final zero sample duration
0.36.0 - 2023-06-07
- SEI NAL unit parser reports ErrRbspTrailingBitsMissing error together with NAL units
- mp4ff-nallister reports error and SEI data when
rbsp_trailing_bits
are missing - AVC SPS HRD parameter name corrected to DpbOutputDelayLengthMinus1
- Add WriteFlag method to SliceWriter interface (present in FixedSliceWriter)
- Parsing of AVC SEI pic_timing with HRD parameters
- mp4ff-nallister handles AVC SEI pic_timing with HRD parameters if SPS is present
- fix error in TimeOffset output of SEI 136
- Support for SEI message 1 pic_timing for AVC
- Example
combine-segs
that shows how to multiplex init and media segments into multi-track segments
0.35.0 - 2023-04-18
stpp
box handles optional empty lists properly (a single zero byte)- AVC slice size value
- Exported function:
bits.CeilLog2
- PPS parsing for HEVC
mp4ff-pslister
now provides PPS details for HEVCmp4ff-pslister
now extracts inband parameter sets in progressive mp4 files- Complete parsing of HEVC SPS extensions
- Parsing of HEVC slice header
SetType
method formp4.AudioSampleEntryBox
0.34.1 - 2023-03-09
- Only start new segment at start or styp box
0.34.0 - 2023-02-28
- New function:
mp4.NewMediaSegmentWithStyp()
- Associate emsg boxes with fragments
- New Fragment method:
AddEmsg()
colr
box support- CHANGELOG.md (this file) instead of Versions.md
- More tests
- Bugs in FixedSliceReader: ReadUint24 and LookAhead
- Optimized translation from Annex B (start-code separated) video byte streams into length-field separated one
- Output of cenc example changed with styp boxes not included
- ADTS parsing somewhat more robust
- LastFragment() returns nil if no fragment in Segment
- Makefile target
coverage
0.33.2 - 2023-01-26
- Restored parsing of non-complete mdat box to v0.33.0 behavior, where a partial mdat box is not an error
0.33.1 - 2023-01-25
- Added missing parsing of sps_scaling_list_data_present_flag in HEVC SPS
0.33.0 - 2023-01-25
- Support QuickTime meta box as well as ISOBMFF meta box
- New possibility to disable parsing of specific boxes
0.32.0 - 2023-01-05
- Moved repo to github.com/Eyevinn/mp4ff
- The github.com/edgeware package path (but redirected by GitHub)
0.31.0 - 2022-12-28
- Support multiple sidx
- Optimize stsc lookups
- New return type for NewNaluArray
- Fixed bugs in prft, adts and avc interlace
0.30.1 - 2022-11-06
- Fixed optimized sample copying bug introduced in v0.30.0
0.30.0 - 2022-11-04
- Full AVC slice header parsing.
- Complete set of AVC and HEVC SEI message detection
- Parsing of some SEI messages (136, 137, 144)
- Write of SEI message (#182)
- Optimizations in ctts and sample copying
- More byte stream methods
- mp4ff-pslister can now work on mp4 segments
- New functions for extracting NALUs for AVC and HEVC
- Optimized ctts lookup
- Optimized file.CopySampleData output allocations
- mp4ff-nallister NALU output
- emsg parsing
- HEVC nalu array bug
- Overflow in tfdt time (#177)
0.29.0 - 2022-06-21
- Improved uuid box handling
- Improved esds box and underlying descriptor handling
- Extended decryption example with cbcs encryption
- Improved the decryption example with in-place cenc decryption
0.28.0 - 2022-05-12
- Full HEVC SPS parsing
- Better video sample entry generation
- More AC-3/EC-3 support.
- Extended EBSPWriter
- Optimize: struct field alignments in bits package
- sdtp reference in StblBox
- decrypt-cenc example
- mp4ff-crop bad command line parameters
0.27.0 - 2022-03-06
- New more efficient SliceReader/SliceWriter based Box methods
- AC-3 and Enhanced AC-3 support
- Public trun flag bits
- Public DecodeHeader method and BoxHeader structure
- mp4ff-nallister now takes Annex B byte stream
- mp4ff-pslister now takes Annex B byte stream and prints codec string
- mp4ff-crop stss bug
- ffmpeg data box decode
- stsz uniform size decode
0.26.1 - 2022-01-14
- Don't move trak boxes to be before mvex
0.26.0 - 2022-01-13
- New tool mp4ff-crop for cropping mp4 file
- New example decrypt-cenc for decrypting segment
- SEI parsing for H.264
- Interpret timestamps in mvhd, tkhd, and mdhd
0.25.0 - 2021-10-04
- Size() methods added to InitSegment, Fragment and MediaSegment
- SampleIntervals for more efficient transformation of segments
- Slices of samples and fullsamples
- Create init segments for wvtt and stpp
- Improvements to ctts and stts boxes
- Changed sample slices to remove pointers
- Spell out compositionTimeOffset instead of cto
- More efficient code to check for AVC and HEVC parameter sets
0.24.0 - 2021-06-26
- Support for cslg and ©too boxes
- DecodeFile API change to allow for lazy mdat decode
- segmenter example extension with lazy mode for decode and encode
- StssBox.IsSyncSample thread safe
0.23.1 - 2021-05-20
- Fixed segment encode mode without optimization
0.23.0 - 2021-04-30
- API change: Verbatim encode more flexible with FragEncMode and EncOptimize
0.22.0 - 2021-04-23
- Construct AVC and HEVC codec strings from SPS
- More robust parsing of ADTS
0.21.1 - 2021-03-24
- Allow ADTS ID corresponding to MPEG-2
0.21.0 - 2021-03-18
- Version number can be retrieved from cmd apps and from mp4 library.
- Updated version is inserted as cmd apps are built using top-level Makefile.
0.20.0 - 2021-03-09
- New tool
mp4ff-pslister
for SPS and other parameter sets
0.19.0 - 2021-03-08
- Added mfra, mfro, tfra boxes
- Added kind, trep, skip, ilst boxes
- Fix for double trun-optimization
0.18.0 - 2021-01-26
- New tool
mp4ff-wvttlister
lists details of wvtt (WebVTT in ISOBMFF) samples - More functions and methods for HEVC video handling
0.17.1 - 2021-01-19
- Fixed bugs in encoding/decoding hvcC box and HEVCDecoderConfigurationRecord
0.17.0 - 2021-01-15
- Support for HEVC/H.265 video parsing and encoding of boxes.
- New tool
mp4ff-nallister
to list nal units inside video samples in MP4 files. - Support for multi-track fragmented files including new example
- Support for some new boxes: meta, udta, pasp, clap
- mp4ff-pslister updated to support HEVC and reading parameter sets from byte streams and hex strings
- Improvements to Info output from mp4ff-info
0.16.2 - 2021-01-05
- Fixed and clarified that sample number starts at one
0.16.1 - 2021-01-04
- Fixed isNonSync flag definition
- Use sdtp entries and transfer to sample flags in segmenter example
0.16.0 - 2020-12-31
- New tool
mp4ff-info
prints details of a hierarchy of boxes. Has configurable levels of details - Many new boxes: saio, saiz, enca, encv, frma, schm, schi, sinf, tenc, sbgp, sgpd, sdtp
- Support for writing largesize mdat box, even for smaller sizes
- Support for adts encode and decode
- Much more detailed box info via recursive Info method
- Better tests vs golden files that can be updated with -update flag
- More error robustness in aac reading with new AccErrReader
- Replaced some panic calls with return of errors
0.15.0 - 2020-12-09
- API for AVC video to to allow multiple SPS.
- Some more NALU types identified.
- Bug in handling of start-code emulation prevention bytes
0.14.0 - 2020-12-09
- AVC Byte stream (Annex B) support
0.13.0 - 2020-11-17
- Removed non-standard log package dependency
0.12.0 - 2020-11-17
- Complete parsing of AVC (H.264) SPS and PP
0.11.1 - 2020-11-13
- Made SPS parser more robust
0.11.0 - 2020-11-13
- Lots of stuff
0.10.1 - 2020-09-23
- First sample-flag in trun and traf boxes
0.10.0 - 2020-09-03
- First release tag on GitHub
- Lots of stuff
- New unique repo name:
mp4ff