Skip to content

Photon v5 Developer Notes

Florian Schleich edited this page Jan 21, 2025 · 1 revision

Intro

Photon v5 (latest PR as of 01/21/25) will introduce several (breaking) changes to API and build system (see changelog in PR for more details). One of the main goals of this update is the separation of analysis (i.e. reading what's there) and validation (i.e. checking for standards compliance). Below is an overview of the most relevant updates to the architecture and validation flow - click on the image for full resolution.

Validation Architecture

Below diagram illustrates the main classes involved in IMF validation. At its core remains IMPValidator, providing stateless/static methods for the validation of individual IMF assets and compositions.

Note

IMPAnalyzer - the class providing the popular cmdline tool used by most Photon users - fully depends on IMPValidator for the actual validation logic.

Starting with Photon v5, most specification-specific validation (e.g. for compliance to IMF App2E:2020) is provided by individual classes that implement the simple ConstraintsValidator interface. IMPValidator utilizes ConstraintsValidatorFactory to instantiate relevant validator classes, providing the following values from the input IMFCompositionPlaylist to the factory:

  • ApplicationIDs - e.g. http://www.smpte-ra.org/ns/2067-21/2020
  • CPL Schema Namespace - e.g. http://www.smpte-ra.org/schemas/2067-3/2016
  • Sequence Namespaces - e.g. http://www.smpte-ra.org/ns/2067-201/2019, http://www.smpte-ra.org/schemas/2067-2/2016

Warning

The diagram is intended to illustrate the general architecture and is not guaranteed to be complete and up-to-date.

Validation Flow

Below diagram is intended to illustrate the interaction between Photon Java packages, as well as the general validation flow starting from IMPAnalyzer.analyzeDelivery(). Make sure to click on the image for full resolution.

Warning

The diagram is intended to illustrate the general architecture and is not guaranteed to be complete and up-to-date.

Clone this wiki locally