--- /dev/null
+<?php
+
+namespace Drupal\file\Plugin\Field\FieldFormatter;
+
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Plugin implementation of the 'file_video' formatter.
+ *
+ * @FieldFormatter(
+ * id = "file_video",
+ * label = @Translation("Video"),
+ * description = @Translation("Display the file using an HTML5 video tag."),
+ * field_types = {
+ * "file"
+ * }
+ * )
+ */
+class FileVideoFormatter extends FileMediaFormatterBase {
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function getMediaType() {
+ return 'video';
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public static function defaultSettings() {
+ return [
+ 'muted' => FALSE,
+ 'width' => 640,
+ 'height' => 480,
+ ] + parent::defaultSettings();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function settingsForm(array $form, FormStateInterface $form_state) {
+ return parent::settingsForm($form, $form_state) + [
+ 'muted' => [
+ '#title' => $this->t('Muted'),
+ '#type' => 'checkbox',
+ '#default_value' => $this->getSetting('muted'),
+ ],
+ 'width' => [
+ '#type' => 'number',
+ '#title' => $this->t('Width'),
+ '#default_value' => $this->getSetting('width'),
+ '#size' => 5,
+ '#maxlength' => 5,
+ '#field_suffix' => $this->t('pixels'),
+ '#min' => 0,
+ '#required' => TRUE,
+ ],
+ 'height' => [
+ '#type' => 'number',
+ '#title' => $this->t('Height'),
+ '#default_value' => $this->getSetting('height'),
+ '#size' => 5,
+ '#maxlength' => 5,
+ '#field_suffix' => $this->t('pixels'),
+ '#min' => 0,
+ '#required' => TRUE,
+ ],
+ ];
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function settingsSummary() {
+ $summary = parent::settingsSummary();
+ $summary[] = $this->t('Muted: %muted', ['%muted' => $this->getSetting('muted') ? $this->t('yes') : $this->t('no')]);
+ $summary[] = $this->t('Size: %width x %height pixels', [
+ '%width' => $this->getSetting('width'),
+ '%height' => $this->getSetting('height'),
+ ]);
+ return $summary;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function prepareAttributes(array $additional_attributes = []) {
+ return parent::prepareAttributes(['muted'])
+ ->setAttribute('width', $this->getSetting('width'))
+ ->setAttribute('height', $this->getSetting('height'));
+ }
+
+}