JSON identification: include transport stream program number, bump version to 7

This commit is contained in:
Moritz Bunkus 2017-05-21 20:02:21 +02:00
parent 2a76ce4539
commit c69f3e73d7
4 changed files with 410 additions and 2 deletions

View File

@ -0,0 +1,407 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "https://mkvtoolnix.download/doc/mkvmerge-identification-output-schema-v7.json",
"title": "mkvmerge identification output",
"description": "The JSON output produced by mkvmerge's file identification mode",
"type": "object",
"properties": {
"attachments": {
"description": "an array describing the attachments found if any",
"type": "array",
"items": {
"type": "object",
"properties": {
"content_type": {
"type": "string",
"minLength": 1
},
"description": {
"type": "string"
},
"file_name": {
"type": "string"
},
"id": {
"type": "integer",
"minimum": 0
},
"size": {
"type": "integer",
"minimum": 0
},
"properties": {
"type": "object",
"properties": {
"uid": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"type": {
"type": "string"
}
},
"additionalProperties": false,
"required": [
"file_name",
"id",
"properties",
"size"
]
}
},
"chapters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"num_entries": {
"type": "integer"
}
},
"additionalProperties": false,
"required": [
"num_entries"
]
}
},
"container": {
"description": "information about the identified container",
"type": "object",
"properties": {
"properties": {
"description": "additional properties for the container varying by container format",
"type": "object",
"properties": {
"container_type": {
"description": "A unique number identifying the container type that's supposed to stay constant over all future releases of MKVToolNix",
"type": "integer",
"minLength": 1
},
"date_local": {
"description": "The muxing date in ISO 8601 format (in local time zone)",
"type": "string",
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([+-][0-9]{2}:[0-9]{2}|Z)$"
},
"date_utc": {
"description": "The muxing date in ISO 8601 format (in UTC)",
"type": "string",
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}([+-][0-9]{2}:[0-9]{2}|Z)$"
},
"duration": {
"description": "The file's/segment's duration in nanoseconds",
"type": "integer",
"minimum": 0
},
"is_providing_timecodes": {
"description": "States whether or not the container has timestamps for the packets (e.g. Matroska, MP4) or not (e.g. SRT, MP3)",
"type": "boolean"
},
"muxing_application": {
"description": "A Unicode string containing the name and possibly version of the low-level library or application that created the file",
"type": "string"
},
"next_segment_uid": {
"description": "A hexadecimal string of the next segment's UID (only for Matroska files)",
"type": "string",
"minLength": 32,
"maxLength": 32
},
"other_file": {
"description": "An array of names of additional files processed as well",
"type": "array",
"items": {
"type": "string"
}
},
"playlist": {
"description": "States whether or not the identified file is a playlist (e.g. MPLS) referring to several other files",
"type": "boolean"
},
"playlist_chapters": {
"description": "The number of chapters in a playlist if it is a one",
"type": "integer",
"minimum": 0
},
"playlist_duration": {
"description": "The total duration in nanoseconds of all files referenced by the playlist if it is a one",
"type": "integer",
"minimum": 0
},
"playlist_file": {
"description": "An array of file names the playlist contains",
"type": "array",
"items": {
"type": "string"
}
},
"playlist_size": {
"description": "The total size in bytes of all files referenced by the playlist if it is a one",
"type": "integer",
"minimum": 0
},
"previous_segment_uid": {
"description": "A hexadecimal string of the previous segment's UID (only for Matroska files)",
"type": "string",
"minLength": 32,
"maxLength": 32
},
"segment_uid": {
"description": "A hexadecimal string of the segment's UID (only for Matroska files)",
"type": "string",
"minLength": 32,
"maxLength": 32
},
"title": {
"type": "string"
},
"writing_application": {
"description": "A Unicode string containing the name and possibly version of the high-level application that created the file",
"type": "string"
}
},
"additionalProperties": false
},
"recognized": {
"description": "States whether or not mkvmerge knows about the format",
"type": "boolean"
},
"supported": {
"description": "States whether or not mkvmerge can read the format",
"type": "boolean"
},
"type": {
"description": "A human-readable description/name for the container format",
"type": "string",
"minLength": 1
}
},
"additionalProperties": false,
"required": [
"recognized",
"supported"
]
},
"errors": {
"type": "array",
"items": {
"type": "string"
}
},
"file_name": {
"description": "the identified file's name",
"type": "string",
"minLength": 1
},
"global_tags": {
"type": "array",
"items": {
"type": "object",
"properties": {
"num_entries": {
"type": "integer"
}
},
"additionalProperties": false,
"required": [
"num_entries"
]
}
},
"identification_format_version": {
"description": "The output format's version",
"type": "integer",
"minimum": 7,
"maximum": 7
},
"track_tags": {
"type": "array",
"items": {
"type": "object",
"properties": {
"num_entries": {
"type": "integer"
},
"track_id": {
"type": "integer"
}
},
"additionalProperties": false,
"required": [
"num_entries",
"track_id"
]
}
},
"tracks": {
"type": "array",
"items": {
"type": "object",
"properties": {
"codec": {
"type": "string",
"minLength": 1
},
"id": {
"type": "integer",
"minLength": 0
},
"type": {
"type": "string"
},
"properties": {
"type": "object",
"properties": {
"aac_is_sbr": {
"type": "string",
"enum": [
"true",
"false",
"unknown"
]
},
"audio_bits_per_sample": {
"type": "integer",
"minimum": 0
},
"audio_channels": {
"type": "integer",
"minimum": 0
},
"audio_sampling_frequency": {
"type": "integer",
"minimum": 0
},
"codec_delay": {
"type": "integer"
},
"codec_id": {
"type": "string"
},
"codec_private_data": {
"type": "string"
},
"codec_private_length": {
"type": "integer",
"minimum": 0
},
"content_encoding_algorithms": {
"type": "string",
"minLength": 1
},
"default_duration": {
"type": "integer",
"minimum": 0
},
"default_track": {
"type": "boolean"
},
"display_dimensions": {
"type": "string",
"pattern": "^[0-9]+x[0-9]+$"
},
"enabled_track": {
"type": "boolean"
},
"forced_track": {
"type": "boolean"
},
"language": {
"type": "string"
},
"minimum_timestamp": {
"description": "The minimum timestamp in nanoseconds of all the frames of this track found within the first couple of seconds of the file",
"type": "integer",
"minimum": 0
},
"multiplexed_tracks": {
"description": "An array of track IDs indicating which tracks were originally multiplexed within the same track in the source file",
"type": "array",
"items": {
"type": "integer",
"minimum": 0
}
},
"number": {
"type": "integer",
"minimum": 0
},
"packetizer": {
"type": "string",
"minLength": 1
},
"pixel_dimensions": {
"type": "string",
"pattern": "^[0-9]+x[0-9]+$"
},
"program_number": {
"type": "integer",
"minimum": 0
},
"stereo_mode": {
"type": "integer",
"minimum": 0
},
"stream_id": {
"type": "string",
"pattern": "^[0-9a-f]{2}$"
},
"sub_stream_id": {
"type": "string",
"pattern": "^[0-9a-f]{2}$"
},
"tag_artist": {
"type": "string"
},
"tag_bitsps": {
"type": "string"
},
"tag_bps": {
"type": "string"
},
"tag_fps": {
"type": "string"
},
"tag_title": {
"type": "string"
},
"teletext_page": {
"type": "integer",
"minimum": 0
},
"text_subtitles": {
"type": "boolean"
},
"track_name": {
"type": "string"
},
"ts_pid": {
"type": "integer",
"minimum": 0
},
"uid": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
}
},
"additionalProperties": false,
"required": [
"codec",
"id",
"type"
]
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
}
}
}

View File

@ -57,6 +57,7 @@ char const * const playlist_duration = "playlist_duration";
char const * const playlist_file = "playlist_file"; // container uinstr
char const * const playlist_size = "playlist_size"; // container unsigned-integer
char const * const previous_segment_uid = "previous_segment_uid"; // container ascii-string format:^[0-9A-F]{32}$
char const * const program_number = "program_number"; // track unsigned-integer
char const * const segment_uid = "segment_uid"; // container ascii-string format:^[0-9A-F]{32}$
char const * const stereo_mode = "stereo_mode"; // track unsigned-integer
char const * const stream_id = "stream_id"; // track unsigned-integer

View File

@ -27,7 +27,7 @@
#define ID_RESULT_TAGS "tags"
#define ID_RESULT_GLOBAL_TAGS_ID -1
#define ID_JSON_FORMAT_VERSION 6
#define ID_JSON_FORMAT_VERSION 7
struct id_result_t {
int64_t id;

View File

@ -333,7 +333,7 @@ class SimpleTest
json_store = JsonSchema::DocumentStore.new
parser = JsonSchema::Parser.new
expander = JsonSchema::ReferenceExpander.new
schema = parser.parse JSON.load(File.read("../doc/json-schema/mkvmerge-identification-output-schema-v6.json"))
schema = parser.parse JSON.load(File.read("../doc/json-schema/mkvmerge-identification-output-schema-v7.json"))
expander.expand(schema, store: json_store)
json_store.add_schema schema