- Notifications
You must be signed in to change notification settings - Fork14
Convert MXF to XML: RegXML (SMPTE ST 2001-1) tools and libraries
License
NotificationsYou must be signed in to change notification settings
sandflow/regxmllib
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
__ ___ __ __ |__) |__ / _` \_/ |\/| | | | |__) | \ |___ \__> / \ | | |___ |___ | |__) INTRODUCTION============regxmllib is a collection of tools and libraries for the creation of RegXML (SMPTE ST 2001-1) representations of MXF header metadata(SMPTE ST 377-1). A RegXML Fragment example can be found at [1][1] src/test/resources/reference-filesTwo implementations of regxmllib are provided:* regxmllibj, which is implemented in pure Java; and* regxmllibc, which is implemented in C++03.KNOWN ISSUES AND LIMITATIONS============================regxmllib relies on SMPTE Metadata Registers that conform to SMPTE ST 335, ST 395, ST 400, ST 2003. These registers are published at [1].[1]https://smpte-ra.org/smpte-metadata-registryregxmllib deviates from ST 2001-1:2013 in a few narrow instances. Such deviations are noted in the source code and are expected to be submitted for consideration at the next revision of ST 2001-1. In particular: * no baseline metadictionary is used, instead one extension metadictionary per namespace is usedBugs are tracked at [2][2]https://github.com/sandflow/regxmllib/issuesREGXMLLIBJ==========Prerequisites-------------Java 8 language and SDKMaven(recommended) Git(recommended) SMPTE Metadata Registers (Types, Elements, Groups and Labels) Quick Start-----------The following outputs to path PATH_TO_FRAGMENT an XML representationof the header metadata of the MXF file at path PATH_TO_MXF_FILE * build the 'jar' target using Maven 'package' goal* choose one of the following: * OPTION 1 * retrieve the four SMPTE Metadata Registers (see [1] above) * build the metadictionaries from the SMPTE registers java -cp <PATH_TO_JAR> com.sandflow.smpte.tools.XMLRegistersToDict -e <PATH_TO_ELEMENTS_REG> -l <PATH_TO_LABELS_REG> -g <PATH_TO_GROUPS_REG> -t <PATH_TO_TYPES_REG> PATH_TO_DICT_DIR * OPTION 2 * retrieve metadictionaries from [3] [3]https://github.com/sandflow/IMF/tree/master/dict * generate the RegXML fragment run java -cp <PATH_TO_JAR> com.sandflow.smpte.tools.RegXMLDump -all -d <PATH_TO_DICT1> <PATH_TO_DICT2> ... -i <PATH_TO_MXF_FILE> > <PATH_TO_FRAGMENT>* (optional) generate XSDs for RegXML Fragments run java -cp <PATH_TO_JAR> com.sandflow.smpte.tools.GenerateDictionaryXMLSchema -d <PATH_TO_DICT1> <PATH_TO_DICT2> ... -o <PATH_TO_OUTPUT_DIR>* (optional) generate XSDs for SMPTE registers run java -cp <PATH_TO_JAR> com.sandflow.smpte.tools.GenerateXMLSchemaDocuments -cp <CLASS_PATH_TO_REGISTER_MODEL> -d <PATH_TO_OUTPUT_DIR> where <CLASS_PATH_TO_REGISTER_MODEL> is equal to com.sandflow.smpte.register.catsup.TypesRegisterModel, etc.Architecture------------At the heart of regxmllib is the FragmentBuilder.fragmentFromTriplet() methodthat creates an XML fragment from a KLV group given aa RegXML metadictionary and a collection of KLV groups from which strongreferences are resolved. The rules engine implemented in FragmentBuilder.fragmentFromTriplet() is intended to follow the rules specifiedin ST 2001-1 as closely as possible. A sister method, XMLSchemaBuilder.fromDictionary(),creates a matching XML Schema that can be used to validate RegXML fragments.Metadictionaries can be imported and exported from XML documents that conformto the schema specified in SMPTE ST 2001-1. They can also be createdfrom SMPTE Metadata Registers published in XML form.regxmllib includes a minimal MXF and KLV parser library.Packages--------com.sandflow.smpte.klv : Classes for processing SMPTE KLV triplets (ST 336) com.sandflow.smpte.mxf: Classes for processing SMPTE MXF structures (ST 377-1)com.sandflow.smpte.register: Classes for processing SMPTE metadata registers (ST 335, ST 395, ST 400, ST 2003) com.sandfow.smpte.regxml: Classes for managing RegXML metadictionaries and creating RegXML representations of MXF structures com.sandfow.smpte.tools: Application-level tools com.sandfow.smpte.util: Utilities classesTools-----RegXMLDump: dumps either the first essence descriptor or the entire header metadata of an MXF file as a RegXML structure XMLRegistersToDict: converts XML-based SMPTE metadata registers to a RegXML metadictionariesGenerateXMLSchemaDocuments: generates XSDs for the SMPTE metadata registers GenerateDictionaryXMLSchema: generate XSDs for RegXML Fragments from the RegXML metadictionaries Unit Test---------Unit testing is performed by generating RegXML fragments from sample files locatedat [1] and registers located at [2]. The resulting RegXML fragments are comparedto reference RegXML fragments located at [3].[1] src/test/mxf-files[2] src/test/registers[3] src/test/regxml-files Reference RegXML fragments can regenerated by running the package goal with the build-reference-test-files profile: mvn package -Pbuild-reference-files Maven Artifacts---------------* GroupId com.sandflow* ArtifactId regxmllibSnapshots are deployed athttps://oss.sonatype.org/content/repositories/snapshots/Releases are deployed at the central repositoryREGXMLLIBC==========Prerequisites-------------C++03 toolchainMetadictionaries generated by regxmllibj (see _Building Metadictionaries_ above)Xerces-C++ Version 3.1.4 (or above) [1](recommended) CMake[1]https://xerces.apache.org/xerces-c/ Architecture------------regxmllibc generally follows the architecture and idioms of regxmllibj.Applications will typically call FragmentBuilder::fromTriplet() orMXFFragmentBuilder::fromInputStream(), and the unit test at [1] provides an example.[1] src/test/cpp/com/sandflow/smpte/dict/MetaDictionaryTest.cppregxmllibc does not however support the conversion of the SMPTE Metadata Registers toRegXML metadictionaries, and instead relies on the metadictionaries generated byregxmllibj (see _Building Metadictionaries_ above).Unit Test---------As with regxmllibj, unit testing is performed by generating RegXML fragments from sample files locatedat [1] and reference metadictionaries located at [2]. The resulting RegXML fragments are comparedto reference RegXML fragments located at [3].[1] src/test/mxf-files[2] src/test/regxml-dicts[3] src/test/regxml-files DIRECTORIES AND NOTABLE FILES=============================build.xml Helper script (Ant)pom.xml Maven POM fileCMakeLists.txt CMake build filetarget Output of the Maven build process, including the JAR src/java regxmllibj codebasesrc/cpp regxmllibc codebasesrc/main/config/repoversion.properties Template Java properties file used to host the a unique source code version generated using git by the build systemsrc/main/resources/reg.xsd Common XML Schema definitions used when generating XML Schemas for RegXML Fragments src/test/resources/regxml-files Reference RegXML fragment used for unit testingsrc/test/resources/registers Reference SMPTE registers used for unit testingsrc/test/resources/mxf-files Sample MXF files used for unit testing src/test/resources/regxml-dicts Reference metadictionaries used for unit testing
About
Convert MXF to XML: RegXML (SMPTE ST 2001-1) tools and libraries
Topics
Resources
License
Stars
Watchers
Forks
Packages0
No packages published