diff --git a/modules/video_embed_media/src/Plugin/MediaEntity/Type/VideoEmbedField.php b/modules/video_embed_media/src/Plugin/MediaEntity/Type/VideoEmbedField.php
new file mode 100644
index 0000000..1a6cbe9
--- /dev/null
+++ b/modules/video_embed_media/src/Plugin/MediaEntity/Type/VideoEmbedField.php
@@ -0,0 +1,146 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\video_embed_media\Plugin\MediaEntity\Type\VideoEmbedField.
+ */
+
+namespace Drupal\video_embed_media\Plugin\MediaEntity\Type;
+
+use Drupal\Core\Entity\EntityFieldManagerInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\media_entity\MediaInterface;
+use Drupal\media_entity\MediaTypeBase;
+use Drupal\video_embed_field\ProviderManagerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\Core\Config\Config;
+
+/**
+ * Provides media type plugin for video embed field.
+ *
+ * @MediaType(
+ *   id = "video_embed_field",
+ *   label = @Translation("Video embed field"),
+ *   description = @Translation("Enables video_embed_field integration with media_entity.")
+ * )
+ */
+class VideoEmbedField extends MediaTypeBase {
+
+  /**
+   * The name of the field on the media entity.
+   */
+  const VIDEO_EMBED_FIELD_NAME = 'field_media_video_embed_field';
+
+  /**
+   * The video provider manager.
+   *
+   * @var \Drupal\video_embed_field\ProviderManagerInterface
+   */
+  protected $providerManager;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function thumbnail(MediaInterface $media) {
+    $provider = $this->loadProvider($media);
+    // @todo, https://www.drupal.org/node/2687077
+    $provider->renderThumbnail(NULL, NULL);
+    return $provider->getLocalThumbnailUri();
+  }
+
+  /**
+   * Load a video provider given a media entity.
+   *
+   * @param \Drupal\media_entity\MediaInterface $media
+   *   The media entity.
+   *
+   * @return \Drupal\video_embed_field\ProviderPluginInterface
+   *   The provider plugin.
+   */
+  protected function loadProvider(MediaInterface $media) {
+    $video_url = $media->{static::VIDEO_EMBED_FIELD_NAME}->value;
+    return $this->providerManager->loadProviderFromInput($video_url);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    return [
+      '#markup' => $this->t('A video_embed_field will be created on this media bundle when you save this form. Configure it further via the "Manage fields" interface.'),
+    ];
+  }
+
+  /**
+   * The function that is invoked during the insert of media bundles.
+   *
+   * @param $media_bundle_id
+   */
+  public static function createVideoEmbedField($media_bundle_id) {
+    if (!$storage = FieldStorageConfig::loadByName('media', static::VIDEO_EMBED_FIELD_NAME)) {
+      FieldStorageConfig::create([
+        'field_name' => static::VIDEO_EMBED_FIELD_NAME,
+        'entity_type' => 'media',
+        'type' => 'video_embed_field',
+      ])->save();
+    }
+    FieldConfig::create([
+      'entity_type' => 'media',
+      'field_name' => static::VIDEO_EMBED_FIELD_NAME,
+      'label' => 'Video URL',
+      'required' => TRUE,
+      'bundle' => $media_bundle_id,
+    ])->save();
+    // Make the field visible on the form display.
+    $form_display = entity_get_form_display('media', $media_bundle_id, 'default');
+    $form_display->setComponent(static::VIDEO_EMBED_FIELD_NAME, [
+      'type' => 'video_embed_field_textfield',
+    ])->save();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityTypeManagerInterface $entity_type_manager, EntityFieldManagerInterface $entity_field_manager, Config $config, ProviderManagerInterface $provider_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_type_manager, $entity_field_manager, $config);
+    $this->providerManager = $provider_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('entity_type.manager'),
+      $container->get('entity_field.manager'),
+      $container->get('config.factory')->get('media_entity.settings'),
+      $container->get('video_embed_field.provider_manager')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getField(MediaInterface $media, $name) {
+    $provider = $this->loadProvider($media);
+    // @todo, not sure how these are configured or if they are even used? There
+    // is already a field on the entity that can be configured for display.
+    return $provider->renderEmbedCode(854, 480, FALSE);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function providedFields() {
+    return [
+      'embed_code' => $this->t('Video Embed Code'),
+    ];
+  }
+
+}
diff --git a/modules/video_embed_media/src/Tests/VideoEmbedMediaBundleTest.php b/modules/video_embed_media/src/Tests/VideoEmbedMediaBundleTest.php
new file mode 100644
index 0000000..543c5c9
--- /dev/null
+++ b/modules/video_embed_media/src/Tests/VideoEmbedMediaBundleTest.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\video_embed_media\Tests\VideoEmbedMediaBundleTest.
+ */
+
+namespace Drupal\video_embed_media\Tests;
+
+use Drupal\video_embed_field\Tests\WebTestBase;
+
+/**
+ * Test the video_embed_field media integration.
+ *
+ * @group video_embed_media
+ */
+class VideoEmbedMediaBundleTest extends WebTestBase {
+
+  /**
+   * Modules to install.
+   *
+   * @var array
+   */
+  public static $modules = [
+    'video_embed_field',
+    'video_embed_media',
+    'media_entity',
+    'field_ui',
+    'node',
+    'image',
+  ];
+
+  /**
+   * Test the dialog form.
+   */
+  public function testMediaBundleCreation() {
+    $this->drupalLogin($this->adminUser);
+
+    // Create a new media bundle
+    $this->drupalGet('admin/structure/media/add');
+    $this->drupalPostForm(NULL, [
+      'label' => 'Video Bundle',
+      'id' => 'video_bundle',
+      'type' => 'video_embed_field',
+    ], 'Save media bundle');
+    $this->assertText('The media bundle Video Bundle has been added.');
+
+    // Ensure the video field is added to the media entity.
+    $this->drupalGet('admin/structure/media/manage/video_bundle/fields');
+    $this->assertText('field_media_video_embed_field');
+    $this->assertText('Video URL');
+
+    // Add a media entity with the new field.
+    $this->drupalGet('media/add/video_bundle');
+    $this->drupalPostForm(NULL, [
+      'name[0][value]' => 'Drupal video!',
+      'field_media_video_embed_field[0][value]' => 'https://www.youtube.com/watch?v=XgYu7-DQjDQ',
+    ], 'Save');
+  }
+
+}
diff --git a/modules/video_embed_media/video_embed_media.info.yml b/modules/video_embed_media/video_embed_media.info.yml
new file mode 100644
index 0000000..134518d
--- /dev/null
+++ b/modules/video_embed_media/video_embed_media.info.yml
@@ -0,0 +1,11 @@
+name: Video Embed Media
+type: module
+description: 'Integrates embedded videos into the Drupal Media Entity module.'
+package: Field types
+core: 8.x
+dependencies:
+  - media_entity
+  - video_embed_field
+
+test_dependencies:
+  - media_entity
diff --git a/modules/video_embed_media/video_embed_media.module b/modules/video_embed_media/video_embed_media.module
new file mode 100644
index 0000000..f4f91ea
--- /dev/null
+++ b/modules/video_embed_media/video_embed_media.module
@@ -0,0 +1,19 @@
+<?php
+
+/**
+ * @file
+ * The module file for video_embed_media.
+ */
+
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\video_embed_media\Plugin\MediaEntity\Type\VideoEmbedField;
+
+/**
+ * Implements hook_ENTITY_TYPE_insert().
+ */
+function video_embed_media_media_bundle_insert(EntityInterface $entity) {
+  if ($entity->type !== 'video_embed_field') {
+    return;
+  }
+  VideoEmbedField::createVideoEmbedField($entity->id());
+}
