AVFoundation Extensions Improvements
Currently, extension methods in TimecodeKit on AVFoundation objects (AVAsset, AVAssetTrack, AVMovie) are somewhat limited as far as reading and writing timecode track information.
1. Improve/Extend Functionality
Multiple timecode events are possible in a single timecode track, especially if a video track contains multiple edits.
The current implementation (as of TimecodeKit 2.0.10) covers the essential functionality of:
- [x] reading timecode track(s) and returning the start timecode (
startTimecode()) - [x] reading all timecode event(s) from all timecode track(s) (
timecodes()) - [x] writing a timecode track using a single origin timecode (
addTimecodeTrack()/replaceTimecodeTrack())
AVAsset Future Feature Roadmap
- [ ] writing complex timelines with more than one timecode event
- [ ] add an overload for
addTimecodeTrack()andreplaceTimecodeTrack()that takes a dictionary of [TimeInterval:Timecode] or something akin to it, keyed by time offsets from movie start with the timecode as values
- [ ] add an overload for
- [ ] refactor methods like
timecodes() → [[Timecode]]to include time ranges - [ ] support negative timecode (using negative bit for 32 and 64 bit timecode encoding)
- [ ] read/write Adobe Premiere XML data chunk in video file header, which contains timecode information
- [ ] Final Cut Pro embed chunk?
- [ ] Avid / Pro Tools embed chunk?
2. Improve async/await Support
Numerous AVFoundation methods being used by TimecodeKit in order to read/write AVAsset/AVMovie data are using legacy (deprecated) synchronous methods on AVFoundation objects. It would be ideal to add async variants to TimecodeKit methods to use the newer asynchronous counterparts.
- [x] Refactor asynchronous completion closure-based methods to
async(implemented in TimecodeKit 2.2.0)
TimecodeKit was fully updated for Swift Concurrency (async/await) as of release 2.2.0.
Further functionality improvements for AVFoundation methods may still come in future releases.