diff --git a/schema_media_object/config/schema/schema_media_object.metatag_tag.schema.yml b/schema_media_object/config/schema/schema_media_object.metatag_tag.schema.yml
new file mode 100644
index 0000000..4dab044
--- /dev/null
+++ b/schema_media_object/config/schema/schema_media_object.metatag_tag.schema.yml
@@ -0,0 +1,45 @@
+# The 'type' should be "label" for short meta tags and "text" for ones which
+# could get longer, especially ones which use a textarea field instead of a
+# textfield.
+metatag.metatag_tag.schema_video_object_content_url:
+  type: text
+  label: 'contentUrl'
+metatag.metatag_tag.schema_video_object_description:
+  type: text
+  label: 'description'
+metatag.metatag_tag.schema_video_object_duration:
+  type: text
+  label: 'duration'
+metatag.metatag_tag.schema_video_object_embed_url:
+  type: text
+  label: 'embedUrl'
+metatag.metatag_tag.schema_video_object_expires:
+  type: text
+  label: 'expires'
+metatag.metatag_tag.schema_video_object_id:
+  type: text
+  label: '@id'
+metatag.metatag_tag.schema_video_object_interaction_count:
+  type: text
+  label: 'interactionCount'
+metatag.metatag_tag.schema_video_object_name:
+  type: text
+  label: 'name'
+metatag.metatag_tag.schema_video_object_thumbnail_url:
+  type: text
+  label: 'thumbnailUrl'
+metatag.metatag_tag.schema_video_object_type:
+  type: string
+  label: '@type'
+metatag.metatag_tag.schema_video_object_upload_date:
+  type: text
+  label: 'uploadDate'
+metatag.metatag_tag.schema_video_object_aggregate_rating:
+  type: text
+  label: 'aggregateRating'
+metatag.metatag_tag.schema_video_object_review:
+  type: text
+  label: 'review'
+metatag.metatag_tag.schema_video_object_transcript:
+  type: text
+  label: 'transcript'
diff --git a/schema_media_object/schema_media_object.info.yml b/schema_media_object/schema_media_object.info.yml
new file mode 100644
index 0000000..b7bcbb0
--- /dev/null
+++ b/schema_media_object/schema_media_object.info.yml
@@ -0,0 +1,8 @@
+name: Schema.org Media Object
+type: module
+description: 'Adds Schema.org/MdiaObject to the JSON LD array.'
+core_version_requirement: ^9 || ^10
+php: 7.2.0
+package: SEO
+dependencies:
+  - schema_metatag:schema_metatag
diff --git a/schema_media_object/schema_media_object.module b/schema_media_object/schema_media_object.module
new file mode 100644
index 0000000..e11576e
--- /dev/null
+++ b/schema_media_object/schema_media_object.module
@@ -0,0 +1,6 @@
+<?php
+
+/**
+ * @file
+ * Contains schema_media_object.module.
+ */
diff --git a/schema_media_object/src/Plugin/metatag/Group/SchemaMediaObject.php b/schema_media_object/src/Plugin/metatag/Group/SchemaMediaObject.php
new file mode 100644
index 0000000..3c79aec
--- /dev/null
+++ b/schema_media_object/src/Plugin/metatag/Group/SchemaMediaObject.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace Drupal\schema_media_object\Plugin\metatag\Group;
+
+use Drupal\schema_metatag\Plugin\metatag\Group\SchemaGroupBase;
+
+/**
+ * Provides a plugin for the 'MediaObject' meta tag group.
+ *
+ * @MetatagGroup(
+ *   id = "schema_media_object",
+ *   label = @Translation("Schema.org: MediaObject"),
+ *   description = @Translation("See Schema.org definitions for this Schema type at <a href="":url"">:url</a>.", arguments = {
+ *     ":url" = "https://schema.org/MediaObject"
+ *   }),
+ *   weight = 10,
+ * )
+ */
+class SchemaMediaObject extends SchemaGroupBase {
+  // Nothing here yet. Just a placeholder class for a plugin.
+}
diff --git a/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectContentUrl.php b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectContentUrl.php
new file mode 100644
index 0000000..8f66a22
--- /dev/null
+++ b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectContentUrl.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_media_object\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_media_object_content_url' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_media_object_content_url",
+ *   label = @Translation("contentUrl"),
+ *   description = @Translation("A URL pointing to the actual media file."),
+ *   name = "contentUrl",
+ *   group = "schema_media_object",
+ *   weight = 0,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "url",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaMediaObjectContentUrl extends SchemaNameBase {
+
+}
diff --git a/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectDescription.php b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectDescription.php
new file mode 100644
index 0000000..e557b0f
--- /dev/null
+++ b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectDescription.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_media_object\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_media_object_description' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_media_object_description",
+ *   label = @Translation("description"),
+ *   description = @Translation("The description of the media."),
+ *   name = "description",
+ *   group = "schema_media_object",
+ *   weight = -1,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "text",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaMediaObjectDescription extends SchemaNameBase {
+
+}
diff --git a/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectDuration.php b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectDuration.php
new file mode 100644
index 0000000..42bb091
--- /dev/null
+++ b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectDuration.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_media_object\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_media_object_duration' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_media_object_duration",
+ *   label = @Translation("duration"),
+ *   description = @Translation("The media duration in seconds or ISO 8601 format, i.e. PT1H30M."),
+ *   name = "duration",
+ *   group = "schema_media_object",
+ *   weight = 0,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "duration",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaMediaObjectDuration extends SchemaNameBase {
+
+}
diff --git a/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectEmbedUrl.php b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectEmbedUrl.php
new file mode 100644
index 0000000..d6389c2
--- /dev/null
+++ b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectEmbedUrl.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_media_object\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_media_object_embed_url' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_media_object_embed_url",
+ *   label = @Translation("embedUrl"),
+ *   description = @Translation("A URL pointing to a player for the specific media. Usually this is the information in the src element of an <embed> tag."),
+ *   name = "embedUrl",
+ *   group = "schema_media_object",
+ *   weight = 0,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "url",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaMediaObjectEmbedUrl extends SchemaNameBase {
+
+}
diff --git a/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectExpires.php b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectExpires.php
new file mode 100644
index 0000000..7206b82
--- /dev/null
+++ b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectExpires.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_media_object\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_media_object_expires' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_media_object_expires",
+ *   label = @Translation("expires"),
+ *   description = @Translation("If applicable, the date after which the media will no longer be available, in ISO 8601 format. Don't supply this information if your media does not expire."),
+ *   name = "expires",
+ *   group = "schema_video_object",
+ *   weight = 0,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "date",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaMediaObjectExpires extends SchemaNameBase {
+
+}
diff --git a/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectName.php b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectName.php
new file mode 100644
index 0000000..9252c1c
--- /dev/null
+++ b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectName.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_media_object\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_media_object_name' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_media_object_name",
+ *   label = @Translation("name"),
+ *   description = @Translation("The title of the media."),
+ *   name = "name",
+ *   group = "schema_media_object",
+ *   weight = -1,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "text",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaMediaObjectName extends SchemaNameBase {
+
+}
diff --git a/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectReview.php b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectReview.php
new file mode 100644
index 0000000..2d2ad8d
--- /dev/null
+++ b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectReview.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Drupal\schema_media_object\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_media_object_review' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_media_object_review",
+ *   label = @Translation("review"),
+ *   description = @Translation("Reviews of this media."),
+ *   name = "review",
+ *   group = "schema_media_object",
+ *   weight = 11,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = TRUE,
+ *   property_type = "review",
+ *   tree_parent = {
+ *     "Review",
+ *   },
+ *   tree_depth = 0,
+ * )
+ */
+class SchemaMediaObjectReview extends SchemaNameBase {
+
+}
diff --git a/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectThumbnailUrl.php b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectThumbnailUrl.php
new file mode 100644
index 0000000..4df0178
--- /dev/null
+++ b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectThumbnailUrl.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_media_object\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_media_object_thumbnail_url' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_media_object_thumbnail_url",
+ *   label = @Translation("thumbnailUrl"),
+ *   description = @Translation("The thumbnail URL(s) of the media(s)."),
+ *   name = "thumbnailUrl",
+ *   group = "schema_media_object",
+ *   weight = -1,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = TRUE,
+ *   property_type = "url",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaMediaObjectThumbnailUrl extends SchemaNameBase {
+
+}
diff --git a/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectType.php b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectType.php
new file mode 100644
index 0000000..cc741f7
--- /dev/null
+++ b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectType.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Drupal\schema_media_object\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_media_object_type' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_media_object_type",
+ *   label = @Translation("@type"),
+ *   description = @Translation("REQUIRED. The type of MediaObject"),
+ *   name = "@type",
+ *   group = "schema_media_object",
+ *   weight = -10,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "type",
+ *   tree_parent = {
+ *     "MediaObject",
+ *   },
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaMediaObjectType extends SchemaNameBase {
+
+}
diff --git a/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectUploadDate.php b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectUploadDate.php
new file mode 100644
index 0000000..5385722
--- /dev/null
+++ b/schema_media_object/src/Plugin/metatag/Tag/SchemaMediaObjectUploadDate.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_media_object\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_media_object_upload_date' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_media_object_upload_date",
+ *   label = @Translation("uploadDate"),
+ *   description = @Translation("The date the media was first published, in ISO 8601 format."),
+ *   name = "uploadDate",
+ *   group = "schema_media_object",
+ *   weight = -1,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "date",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaMediaObjectUploadDate extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/config/schema/schema_movie.metatag_tag.schema.yml b/schema_podcast_episode/config/schema/schema_movie.metatag_tag.schema.yml
new file mode 100644
index 0000000..5ece169
--- /dev/null
+++ b/schema_podcast_episode/config/schema/schema_movie.metatag_tag.schema.yml
@@ -0,0 +1,69 @@
+# The 'type' should be "label" for short meta tags and "text" for ones which
+# could get longer, especially ones which use a textarea field instead of a
+# textfield.
+metatag.metatag_tag.schema_movie_actor:
+  type: text
+  label: 'actor'
+metatag.metatag_tag.schema_movie_date_created:
+  type: text
+  label: 'dateCreated'
+metatag.metatag_tag.schema_movie_description:
+  type: text
+  label: 'description'
+metatag.metatag_tag.schema_movie_director:
+  type: text
+  label: 'director'
+metatag.metatag_tag.schema_movie_duration:
+  type: text
+  label: 'duration'
+metatag.metatag_tag.schema_movie_image:
+  type: text
+  label: 'image'
+metatag.metatag_tag.schema_movie_music_by:
+  type: text
+  label: 'musicBy'
+metatag.metatag_tag.schema_movie_name:
+  type: text
+  label: 'name'
+metatag.metatag_tag.schema_movie_producer:
+  type: text
+  label: 'producer'
+metatag.metatag_tag.schema_movie_production_company:
+  type: text
+  label: 'productionCompany'
+metatag.metatag_tag.schema_movie_type:
+  type: string
+  label: '@type'
+metatag.metatag_tag.schema_movie_id:
+  type: text
+  label: '@id'
+metatag.metatag_tag.schema_movie_url:
+  type: text
+  label: 'url'
+metatag.metatag_tag.schema_movie_same_as:
+  type: text
+  label: 'sameAs'
+metatag.metatag_tag.schema_movie_released_event:
+  type: text
+  label: 'releasedEvent'
+metatag.metatag_tag.schema_movie_potential_action:
+  type: text
+  label: 'potentialAction'
+metatag.metatag_tag.schema_movie_episode_number:
+  type: text
+  label: 'episodeNumber'
+metatag.metatag_tag.schema_movie_season_number:
+  type: text
+  label: 'seasonNumber'
+metatag.metatag_tag.schema_movie_part_of_season:
+  type: text
+  label: 'partOfSeason'
+metatag.metatag_tag.schema_movie_part_of_series:
+  type: text
+  label: 'partOfSeries'
+metatag.metatag_tag.schema_movie_has_part:
+  type: text
+  label: 'hasPart'
+metatag.metatag_tag.schema_movie_aggregate_rating:
+  type: text
+  label: 'aggregateRating'
diff --git a/schema_podcast_episode/schema_podcast_episode.info.yml b/schema_podcast_episode/schema_podcast_episode.info.yml
new file mode 100644
index 0000000..4b1ef32
--- /dev/null
+++ b/schema_podcast_episode/schema_podcast_episode.info.yml
@@ -0,0 +1,8 @@
+name: Schema.org Podcast Episode
+type: module
+description: 'Adds Schema.org PodcastEpisode to the JSON LD array. Creates PodcastEpisode.'
+core_version_requirement: ^9 || ^10
+php: 7.2.0
+package: SEO
+dependencies:
+  - schema_metatag:schema_metatag
diff --git a/schema_podcast_episode/schema_podcast_episode.module b/schema_podcast_episode/schema_podcast_episode.module
new file mode 100644
index 0000000..c489535
--- /dev/null
+++ b/schema_podcast_episode/schema_podcast_episode.module
@@ -0,0 +1,6 @@
+<?php
+
+/**
+ * @file
+ * Contains schema_podcast_episode.module.
+ */
diff --git a/schema_podcast_episode/src/Plugin/metatag/Group/SchemaPodcastEpisode.php b/schema_podcast_episode/src/Plugin/metatag/Group/SchemaPodcastEpisode.php
new file mode 100644
index 0000000..99aca45
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Group/SchemaPodcastEpisode.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Group;
+
+use Drupal\schema_metatag\Plugin\metatag\Group\SchemaGroupBase;
+
+/**
+ * Provides a plugin for the 'PodcastEpisode' meta tag group.
+ *
+ * @MetatagGroup(
+ *   id = "schema_podcast_episode",
+ *   label = @Translation("Schema.org: PodcastEpisode"),
+ *   description = @Translation("See Schema.org definitions for this Schema type at <a href="":url"">:url</a>.", arguments = {
+ *     ":url" = "https://schema.org/PodcastEpisode",
+ *   }),
+ *   weight = 10,
+ * )
+ */
+class SchemaPodcastEpisode extends SchemaGroupBase {
+  // Nothing here yet. Just a placeholder class for a plugin.
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeActor.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeActor.php
new file mode 100644
index 0000000..59a49c8
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeActor.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_podcast_episode_actor' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_actor",
+ *   label = @Translation("actor"),
+ *   description = @Translation("The names of Actors."),
+ *   name = "actor",
+ *   group = "schema_podcast_episode",
+ *   weight = 4,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = TRUE,
+ *   property_type = "person",
+ *   tree_parent = {
+ *     "Person",
+ *   },
+ *   tree_depth = 0,
+ * )
+ */
+class SchemaPodcastEpisodeActor extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeAssociatedMedia.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeAssociatedMedia.php
new file mode 100644
index 0000000..628310c
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeAssociatedMedia.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_podcast_episode_associated_media' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_associated_media",
+ *   label = @Translation("Associated Media"),
+ *   description = @Translation("The associated Media."),
+ *   name = "associatedMedia",
+ *   group = "schema_podcast_episode",
+ *   weight = 4,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "media_object",
+ *   tree_parent = {
+ *     "MediaObject",
+ *   },
+ *   tree_depth = 0,
+ * )
+ */
+class SchemaPodcastEpisodeAssociatedMedia extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDateCreated.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDateCreated.php
new file mode 100644
index 0000000..83fcf0c
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDateCreated.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'dateCreated' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_date_created",
+ *   label = @Translation("dateCreated"),
+ *   description = @Translation("The date on which the work was created or was added to a DataFeed."),
+ *   name = "dateCreated",
+ *   group = "schema_podcast_episode",
+ *   weight = 3,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "date",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaPodcastEpisodeDateCreated extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDatePublished.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDatePublished.php
new file mode 100644
index 0000000..bd112a4
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDatePublished.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'datePublished' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_date_published",
+ *   label = @Translation("datePublished"),
+ *   description = @Translation("Date of first broadcast/publication."),
+ *   name = "datePublished",
+ *   group = "schema_podcast_episode",
+ *   weight = 3,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "date",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaPodcastEpisodeDatePublished extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDescription.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDescription.php
new file mode 100644
index 0000000..5cd577a
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDescription.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_podcast_episode_description' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_description",
+ *   label = @Translation("description"),
+ *   description = @Translation("A description of the work."),
+ *   name = "description",
+ *   group = "schema_podcast_episode",
+ *   weight = 1,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "text",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaPodcastEpisodeDescription extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDirector.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDirector.php
new file mode 100644
index 0000000..54263a2
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDirector.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_podcast_episode_director' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_director",
+ *   label = @Translation("director"),
+ *   description = @Translation("The name of Director."),
+ *   name = "director",
+ *   group = "schema_podcast_episode",
+ *   weight = 5,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = TRUE,
+ *   property_type = "person",
+ *   tree_parent = {
+ *     "Person",
+ *   },
+ *   tree_depth = 0,
+ * )
+ */
+class SchemaPodcastEpisodeDirector extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDuration.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDuration.php
new file mode 100644
index 0000000..334c015
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeDuration.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_podcast_episode_duration' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_duration",
+ *   label = @Translation("duration"),
+ *   description = @Translation("Runtime of the work in ISO 8601 format (for example, 'PT2H22M' (142 minutes))."),
+ *   name = "duration",
+ *   group = "schema_podcast_episode",
+ *   weight = 3,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "duration",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaPodcastEpisodeDuration extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeEpisodeNumber.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeEpisodeNumber.php
new file mode 100644
index 0000000..c6e2c64
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeEpisodeNumber.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'episodeNumber' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_episode_number",
+ *   label = @Translation("episodeNumber"),
+ *   description = @Translation("Position of the episode within an ordered group of episodes."),
+ *   name = "episodeNumber",
+ *   group = "schema_podcast_episode",
+ *   weight = 3,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "text",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaPodcastEpisodeEpisodeNumber extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeImage.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeImage.php
new file mode 100644
index 0000000..d89d007
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeImage.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'image' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_image",
+ *   label = @Translation("image"),
+ *   description = @Translation("The primary image for this work."),
+ *   name = "image",
+ *   group = "schema_podcast_episode",
+ *   weight = 2,
+ *   type = "image",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "image_object",
+ *   tree_parent = {
+ *     "ImageObject",
+ *   },
+ *   tree_depth = 0,
+ * )
+ */
+class SchemaPodcastEpisodeImage extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeMusicBy.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeMusicBy.php
new file mode 100644
index 0000000..cfb57cb
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeMusicBy.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_podcast_episode_music_by' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_music_by",
+ *   label = @Translation("musicBy"),
+ *   description = @Translation("The composer of the soundtrack."),
+ *   name = "musicBy",
+ *   group = "schema_podcast_episode",
+ *   weight = 15,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = TRUE,
+ *   property_type = "organization",
+ *   tree_parent = {
+ *     "Person",
+ *     "Organization",
+ *   },
+ *   tree_depth = 0,
+ * )
+ */
+class SchemaPodcastEpisodeMusicBy extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeName.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeName.php
new file mode 100644
index 0000000..6a79c63
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeName.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'name' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_name",
+ *   label = @Translation("name"),
+ *   description = @Translation("The name of the work."),
+ *   name = "name",
+ *   group = "schema_podcast_episode",
+ *   weight = 0,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "text",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaPodcastEpisodeName extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodePartOfSeason.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodePartOfSeason.php
new file mode 100644
index 0000000..3e34357
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodePartOfSeason.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'partOfSeason' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_part_of_season",
+ *   label = @Translation("partOfSeason"),
+ *   description = @Translation("The season to which this episode belongs."),
+ *   name = "partOfSeason",
+ *   group = "schema_podcast_episode",
+ *   weight = 10,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "creative_work_season",
+ *   tree_parent = {
+ *     "CreativeWorkSeason",
+ *   },
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaPodcastEpisodePartOfSeason extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodePartOfSeries.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodePartOfSeries.php
new file mode 100644
index 0000000..062b55a
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodePartOfSeries.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'partOfSeries' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_part_of_series",
+ *   label = @Translation("partOfSeries"),
+ *   description = @Translation("The series to which this episode or season belongs."),
+ *   name = "partOfSeries",
+ *   group = "schema_podcast_episode",
+ *   weight = 10,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "creative_work",
+ *   tree_parent = {
+ *     "Series",
+ *   },
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaPodcastEpisodePartOfSeries extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeTimeRequired.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeTimeRequired.php
new file mode 100644
index 0000000..bef6dec
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeTimeRequired.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'schema_podcast_episode_time_required' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_time_required",
+ *   label = @Translation("timeRequired"),
+ *   description = @Translation("Runtime of the work in ISO 8601 format (for example, 'PT2H22M' (142 minutes))."),
+ *   name = "timeRequired",
+ *   group = "schema_podcast_episode",
+ *   weight = 3,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "duration",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaPodcastEpisodeTimeRequired extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeType.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeType.php
new file mode 100644
index 0000000..044f861
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeType.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'type' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_type",
+ *   label = @Translation("@type"),
+ *   description = @Translation("The type of work."),
+ *   name = "@type",
+ *   group = "schema_podcast_episode",
+ *   weight = -5,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = FALSE,
+ *   property_type = "type",
+ *   tree_parent = {
+ *     "Episode",
+ *   },
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaPodcastEpisodeType extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeUrl.php b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeUrl.php
new file mode 100644
index 0000000..48bcb33
--- /dev/null
+++ b/schema_podcast_episode/src/Plugin/metatag/Tag/SchemaPodcastEpisodeUrl.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\schema_podcast_episode\Plugin\metatag\Tag;
+
+use Drupal\schema_metatag\Plugin\metatag\Tag\SchemaNameBase;
+
+/**
+ * Provides a plugin for the 'url' meta tag.
+ *
+ * - 'id' should be a globally unique id.
+ * - 'name' should match the Schema.org element name.
+ * - 'group' should match the id of the group that defines the Schema.org type.
+ *
+ * @MetatagTag(
+ *   id = "schema_podcast_episode_url",
+ *   label = @Translation("url"),
+ *   description = @Translation("URL of the item."),
+ *   name = "url",
+ *   group = "schema_podcast_episode",
+ *   weight = 0,
+ *   type = "string",
+ *   secure = FALSE,
+ *   multiple = TRUE,
+ *   property_type = "url",
+ *   tree_parent = {},
+ *   tree_depth = -1,
+ * )
+ */
+class SchemaPodcastEpisodeUrl extends SchemaNameBase {
+
+}
diff --git a/schema_podcast_episode/tests/src/Functional/SchemaMovieTest.php b/schema_podcast_episode/tests/src/Functional/SchemaMovieTest.php
new file mode 100644
index 0000000..5dad33c
--- /dev/null
+++ b/schema_podcast_episode/tests/src/Functional/SchemaMovieTest.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Drupal\Tests\schema_movie\Functional;
+
+use Drupal\Tests\schema_metatag\Functional\SchemaMetatagTagsTestBase;
+
+/**
+ * Tests that each of the Schema Metatag Movie tags work correctly.
+ *
+ * @group schema_metatag
+ * @group schema_movie
+ */
+class SchemaMovieTest extends SchemaMetatagTagsTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = ['schema_movie'];
+
+  /**
+   * {@inheritdoc}
+   */
+  public $moduleName = 'schema_movie';
+
+  /**
+   * {@inheritdoc}
+   */
+  public $groupName = 'schema_movie';
+
+}
diff --git a/src/Plugin/schema_metatag/PropertyType/MediaObject.php b/src/Plugin/schema_metatag/PropertyType/MediaObject.php
new file mode 100644
index 0000000..b4d3e0b
--- /dev/null
+++ b/src/Plugin/schema_metatag/PropertyType/MediaObject.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace Drupal\schema_metatag\Plugin\schema_metatag\PropertyType;
+
+use Drupal\schema_metatag\Plugin\schema_metatag\PropertyTypeBase;
+
+/**
+ * Provides a plugin for the 'MediaObject' Schema.org property type.
+ *
+ * @SchemaPropertyType(
+ *   id = "media_object",
+ *   label = @Translation("MediaObject"),
+ *   tree_parent = {
+ *     "MediaObject",
+ *   },
+ *   tree_depth = 0,
+ *   property_type = "MediaObject",
+ *   sub_properties = {
+ *     "@type" = {
+ *       "id" = "type",
+ *       "label" = @Translation("@type"),
+ *       "description" = "",
+ *     },
+ *     "contentSize" = {
+ *       "id" = "text",
+ *       "label" = @Translation("contentSize"),
+ *       "description" = @Translation("File size in (mega/kilo) bytes"),
+ *     },
+ *     "contentUrl" = {
+ *       "id" = "url",
+ *       "label" = @Translation("contentUrl"),
+ *       "description" = @Translation("Absolute URL of the media."),
+ *     },
+ *     "duration" = {
+ *       "id" = "duration",
+ *       "label" = @Translation("duration"),
+ *       "description" = @Translation("The media duration in seconds or ISO 8601 format, i.e. PT1H30M."),
+ *     },
+ *     "url" = {
+ *       "id" = "url",
+ *       "label" = @Translation("url"),
+ *       "description" = @Translation("Absolute URL of the media."),
+ *     },
+ *   },
+ * )
+ */
+class MediaObject extends PropertyTypeBase {
+
+}
