diff --git a/core/modules/media/config/schema/media.schema.yml b/core/modules/media/config/schema/media.schema.yml
index dad5189..b9156b2 100644
--- a/core/modules/media/config/schema/media.schema.yml
+++ b/core/modules/media/config/schema/media.schema.yml
@@ -52,6 +52,14 @@ media.source.image:
   type: media.source.field_aware
   label: '"Image" media source configuration'
 
+media.source.audio_file:
+  type: media.source.field_aware
+  label: '"Audio" media source configuration'
+
+media.source.video_file:
+  type: media.source.field_aware
+  label: '"Video" media source configuration'
+
 media.source.field_aware:
   type: mapping
   mapping:
diff --git a/core/modules/media/images/icons/audio.png b/core/modules/media/images/icons/audio.png
new file mode 100755
index 0000000..56b3d00
--- /dev/null
+++ b/core/modules/media/images/icons/audio.png
@@ -0,0 +1,15 @@
+‰PNG
+
+   IHDR   ´   ´   ²¯‘e   tEXtSoftware Adobe ImageReadyqÉe<   iTXtXML:com.adobe.xmp     <?xpacket begin="ï»¿" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00        "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:FAC3173D669D11E5A986C30B9493A0BC" xmpMM:DocumentID="xmp.did:FAC3173E669D11E5A986C30B9493A0BC"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:FAC3173B669D11E5A986C30B9493A0BC" stRef:documentID="xmp.did:FAC3173C669D11E5A986C30B9493A0BC"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?> EŸ:  CIDATxÚì]ÙWÉÓEeovºADdSÙWE@ÜæÅ‡ùóæ?™QY†mØaØE‡¥Gdi–i mÔß=]çãø9LEdu7V5qæaÌ“TWÞŠ¸yå—_~‰ÎC¤¼��C ä9B��C ä9B��C ä„!‡@È!r„!‡@È!r„!‡@ðˆ–W`6ÄÅÅÛíö´´´+W®¸Ýî÷ïß/--9.5œNgCCCFFÆÙÿILLÌËË+**Y__·rI‘™™ÙÞÞþ-3Î�žžþðáÃë×¯9.¥ú‹Œ¬®®Ž��ÿ¯±±±­­­0-BŽK›Í–••EÊ‘¶¶¶ììl!ÇåBBBÖž3üHIIr\"�œœpF‚�&`‰�#$ºïöíÛðñ¦zª½½½ÍÍMæ`8 è�«W¯
+9‚‰ÜÜÜ'Ož8Ž/_¾˜êÁð<“““�‡9ñmKKKtt´�#8¸uëÖãÇ�?}údÂÇÛÚÚêííå?[QQQUU•�#�bmm-L1B3?çúúzWW—×ëeŽ¯¨¨(,,rGLLÌ½{÷@Ž¨¨(ó?­ËåêëëcÚ¸ü´ôôt!‡Á±£££¼¼ÜBÏ¼¼¼<88ÈTEñññ!²ˆaN|ROŸ>½à¬sP°´´}Ê�¿êëë¯\¹"äà"??ÿÙ³gxq}~�cqq‘9¸´´r[ÈÁ}Yð&L¬ûàV†††˜;±0ÁÍœ†!9ðšêêêîß¿êÑ ²ât{{›)>ƒ˜ù7r\»v­­­­¦¦Æ�	ÿüóOoo/þËuDéVäHJJzòäIqqq˜1–£¿¿ŸÜVTT¤¥¥	9þ²²² ?sssÃRB¹\®‘‘‘¯_¿rœK°Ò¦aBŽ‚‚„¬Áúb‚+€°Z©©©ÉÉÉpy�Lµ°°ðæÍÎÈB?øp¨!½sç¢ü˜˜RöæÍ›ˆ bcczx<€¥¥¥££#³ÁlŒ��çääÀ{_|d$ŒÇû÷ï™5 ÿ…¨çÏŸ[—PæÐçˆMTåçÎÎÎêêjè,..®¥¥–žžË�¸	fqµÃáp:�»»»L�ùïà€ê$ó]ø£Ÿ??.©[ÑjæîÞ½k¶ƒ3 ‹Ï-�ïëèè0œšûËÎÈÛ·oÛl¶ËHxq&0Ú&|¶’’’7nè€	yôè‘1~ÀÀ¹r¢z|9�äÔ-Iø]ÈO»ÝnÂgƒµÈËË#‡AŸÂ~Khîïï���qF²{`=rÀZ<~ü8@ƒ:@^pê„#üåæp‹ÌÁßaÇ¹àa Ö/94nø…^|>?ÉÎÎ¾wïž±dîèèèÁÁ9ÎpîÇ2ä@`ÒÜÜŒ�5¤U“�š Áêéé)ßÖÔÔøC`ÆÜÜŽFEASÖ LäwÐKB�ååå¡¡!~suuuii©±ÈÅív“Ãòóó�)�±ß³gÏ¬U°3???00À·MMM~ ü×ë×¯9a”i’ÃétþôÓOä9Abaa�_êå§‰Æ€ñØÝÝå(ÞÔä(++ÓNX4³¸¸ûÂfÔÖÖªµòx<�8ä°„„9!ó’2-
+v`?ø¥ X¿‚‚aíÞÞgrU-oFrÀG¶¶¶ÖÕÕ™íÄ¢1LLLÌÌÌ0cuüj�.çâøø$‡¥¤¤¨¶o0ÝÛ‡uE`bL½›£££oß¾åŒÄˆláYHã�@OÕ³˜‹žOŸ>½Èþ$„-§ïÞ½ãÆ‡¡¹x½^ÄGä°ÜÜÜÔÔTK’oòÓ„;AÁÉÉI?g§^s.ª‡”VWWÉÉãââòóó­GŽòòò‡Zú$‰ƒƒƒ‘‘ÎÈôôtÕJX0ãÃ‡œ˜–ŸHüñä€„njj
+�“$ <8i+Í¹¨n!qdMšÜ¥Ñ·BœŠVäóùô³„øÍÍÍÆòwÅØØXvv6¹Y�Ð�³³³ü™?~ü¸¿¿¯ŸìÂ§Ï²³³(9~þùg~øßˆŠŠB§ÿó´›VYWÄØøQx'�´÷ðx<p.PWd ^RR²¼¼Ìßã…¬YYY!KÏív;~'5§GŽÀ ²›|‹õ[Ã[gddàÁ»ïîînll¬­­ûx |’á:ì?þ(gëõïß¿¿sçŽþ[ÍÌÌDÌÂ9EÚµ!wÌÖ{éÜØ¡²²ŸãYu;ø��Ÿ5ÌøÄÄ„±®Âˆ<�é«
+øeü(	~/<\†~/JÄAà‡ÒM�@YYÙ¹ç°rXx‡êêjökÃ)å‚­R
+>áï8dÍÉÉáÄ,B=€úYE uÚÛÛôN�ñàôºWMk¾{÷Ž”DP»œØPÈAH"Î1µÂÂÂ––Õ� ½½=NX¦T‡=D#ÉÉÉœT©�CÐ›Ì‹,À�¦¦&U~,,,�iMØ$%Ï‚g&ËÃ`6Îm¿/äP€Ïçã¤5ÜñCiþÃÃC«ä0§Ó©T„Ì)ÿáô˜rÐÁ!?¤ª««ƒÖSkÉxØn·+Õq!f!e,©“„677™	oM£444(�¦ÇB’:¦UÚ§…«"Sg			äs
+9|þüYéŠ$Ä·üùa–8u~ü3˜’p�¤5rÐðz½===œ%ÔP^^®T�à“ì•�””Ä�Y@8$bá##IÙ!ä`1K__3“s]VV¦$K].9''¾8Ãþþ>)•ÈhVÈ¡à_þøã¦ý¸yó&ßx|ýú1‘þ8|ŠR¶Ñ,$ÇÇÇëçv…
+Ðƒþý÷ßeªÔÕo{{›ô,øÐùyúü 3(ú‹�CXÂÁÁAN;%§ÓÉ/Ø„g!ã‹´´4~a:xLN'ä2vvv¦§§ÉaXH‡ÃÁ�/Èœ7ÖRéÔI±!”)hñ'3¡ÁAN£¤IIr@Ç9‚ŸÏÇ‰\ìv;_Eîíí‘ÕYJ87‚é×s	9bee…L4Álð{SAv�R)÷Ê©/Ëœžžrî»à_|||LêÜ«W¯ò7~a9Èúp}¶	9Œƒ³¿e³Ù˜ñ'§nkÉ�f1ÜŸ�ãÇÀív“•˜pê|ÙAÖŠjÍn™³AÁ�žE¿LÈ�,%Ëj°–üø“,,ºæ?ÕAjRÑ!Äþþ¾þ€¨¨(þr’k‰�_¬
+ËAŠý†ñBŽ€ppp@–êð;öÃèKH¨Q¥C£¤ Õ/r,'™œP*Läüé¿žm„!g-ùÁç?H%Á<!Ç&Éþrb-IrðM‡jBŽ"¸ß:§PÉïˆåø‘ˆ‹‹#0[MrÖÌ®[ÑŸMÈIrðû5p|JpÝŠ~
+UÈl6›þÀl0ÏÌE0öÕð¡×­9BØ²€Ûëõr¶Î5�7û�jüŽ œPV6!G@fƒ$ÇÉÉ	Ÿd0!þlb9~$222Èå<88`ÞßÉ¹âéØ¾a#{3	9BÄrº™ñ/ïŒ��ç�ƒ­`6RÄèSMÈayyyd§e,$³k1“J>…Ëä„B#€/çKQº\ä £bÎ¥ngàÜÞ¢_ð!ä0‚ÂÂBNƒv˜~pAž�C¨trèç`„ÊÀK¯¯¯'èPNc–³ÙØƒßfˆcBýÚ3!‡rn£±±‘|ïÀúú:§�£†””2²€>à“#::š,8ñCÈ4©QSS£ù™àÔ¦ŸfƒŒ,¶¶¶øÝŒ¡`Hr@‰ ªªª*++9#ÁrŽÄ�qŽs”Íívósçr€júš#Z–œÏŒºº:ÎHøòÙÙYþflBBy¼Åçóñ�”F² �”·b9X(--­­­e†CQêy�šš
+~�‚nEiNý0Bô‰=Yxyyyüç÷öö¦¦¦”æ¿uë9æÃ‡ä	¥oÕ(iŠ`ÞÈÒy!`óœ>Çññq¾lŒ`w7_YYáÏ	µAZÎž�ƒþ¬ù=@!5ø¹ÅÅÅäÙ…ÃÃCæõ9ÒÒÒÈL<œ¹#(äÐ–>…9ø¯¿þV*ÆINN.,,$‡mll(Y£¬¬,2GyKîá	9r0/ZCì:00 z}LQQyXQÏêêªR2†¬2ÁœäAN!�/~�Ãðööö2ë6ÎpíÚ5Î¦?V‘¿ïáO¶fffê�Ñ.›r¯×K~µkkk¯^½RÚ;3œøoÞ¼Qº,>…´FxZŽŸ’$}LOOÃ³œ{¢V(P,?È<CBBçJvÄdÿÚï|
+g»øãÇ�‹ZrxâÊ$Æ.oa…ÖÕU«~ûöíúúºÒ6é·¿ºººšs©b2ñ]àMúØ!N+UšÞ+à)oó`Ñ-'f0ßÂápp_10KJ3Ûívrw—s•MŽ/^ð7Î5q0¼úc677É{rÍƒ#?œ:´¡¡�Ó—r‡¿{§>…üÞðÎ™×MFë?\¨_7(
+>xð€ßuÏê¨¨¨àìÁ~úôIiÓ_‹SÈkY 5ø"æÇG+Õ ö9÷h†²³³™W}Am¨š„?¤ABËarhæº§§gjjÊüwèPš››9K¨º{ËI¶Âlðc³ä9´‘†‡‡�] n~@É¶¶¶2ïÙ@„¬š8�Ú +Š•“­¦zƒ3330!�‹>³Ú¼©©‰S_áÏ·ÎÏÏ«ÎŸBî§À¡(¹*ÓeHák_¾|ÉIîZÕÕÕœ”—–„0`>!ç9¹/¼[¥™Í˜>Áûí7þY1“´ 9˜ƒáP666TÿD.i6<�RQH„i÷V;;;ùwî™¡Ìžqø*þüóOÕ?áôƒc6Tó¹æÝxóz½}}}“““Aì¾xÁp8<`ö!Åï…Ca¦§ÎËDªÁ›ÈZ™zWêztt´¿¿Ÿß9É<ÈÏÏôè³ç_�®ª6”ŽJXƒ^½zÅ?‘lf´··óÛÓÎû¡úW`6ÊËËÉ#_¾|Y\\4°b�zˆSHT¥ƒ?Ö›(1ŸõÐÐ��àu?8óS÷–)öÑvaÖÖÖLþœpÿ|f¸ÝîÞÞ^©?ü‰ššN3I˜^c©E+U‚Á³tww0¿	yò„Ò·¿è÷ß7PEá¿=--�©¡tÂÊªäˆðïUBŸŽŒŒ˜vOÈŒ80Ì0 #ü°wïÞ%‡!Ð›��5¼#aÉÒ©©)½¬§ÂO0�ïŠð'Ëëëë9×¸`þ@r‰V-0^ZZêìì4f�C�¹¹9ý Ôçóõõõ©æ+ÏPRRÂÙ¦�qÅWHÀÂÕçø,Â3Ë!LÚÀÀÀÙü+¼‰áú•ÌÌLæa|?JgÎ	•Ÿ?n]~àE»\®¤¤$¥ÛxµØ'¤unÇÇÇ˜�§uÎ×2˜ 4¢V¥‚òïB¡¶¶6Ž…Ô…qRÍ·~ÿç",Ž£££®®.ø`4S•+ÃžOOO¿~ýÚf³�¾Ð†‡‡‡ÛÛÛ�ì Hv8L×¦T¶žäˆðgÙñ9z<ž††f£„¾Ý�~>•Óé98#·¶¶TëOÃMs|‡™™™îîns†0�±kKKçö?|*:”p#G„W•<a9ÄÆÆ¶¶¶rúŠj%Xyäp;+»¹¹ùë¯¿¨ÒM©ÆÆFæÑh�`ýé0<H}ppðòåË0(ÒPUUURRÂÔ^ÃÃÃA¬ÀÏSöð¸ýýýSSSÖ-ÒP\\\SSÃW]ÆR®—‹þ4öÈÈÈÀÀ@€çZ ŠŠŠ B™ñ<©êQ—ËKóóó���Ö*Òpýúõû÷ï3Õá†¢^.ü›·¸\®/^X¥PHƒÃá@xÂÙZÓ¤Æàà`(b´KÑÙÌ€DµÊY‡œœœöövfñ)DÕØØXˆ¶.KÛ§ÃÃÃ®®® äCŠÜÜÜŽŽ~¹‚2èÐ=Ì%ê	vrrÒ××7::Š¯�éË/Þ›(1css3¤uO—«'h199	áf³Ù"##MUN–””Jöz;DFOO�±¾SBŽÿÄÜÜ<ºÙR 7nÜà4üÖK¾ï*ä8!ýàŒ�¿Ÿ|ttÔÝÝ}ñ—ô!5˜f@+$3p6NÈaa@]’�'NOOûûû5rX�¡‡Î1�ª·29Â.—Ë®3.x«YÚ[›Xþ­­­ÊÊÊ¬¬¬äädÄÛ¼¡=§¦¦.>Ã+ä0ÜnwOO�žDÜŠ@È!r„!‡@È!r„!‡@È!rB��C ä9B��C ä9a‹ÿ	0 -Ô5^Â5    IEND®B`‚
\ No newline at end of file
diff --git a/core/modules/media/images/icons/video.png b/core/modules/media/images/icons/video.png
new file mode 100755
index 0000000..17b4816
--- /dev/null
+++ b/core/modules/media/images/icons/video.png
@@ -0,0 +1,7 @@
+‰PNG
+
+   IHDR   ´   ´    ¦Yî  �IDATxíÜ§zå0†á\m:
+ÙÞ[zJ;ÈÈLè0!#1#3¡Ù¾«‘Ó�Ge÷ÿ`ê‹\f”,ˆ›{º˜¡Oâæ€èrÐ'–XCSºˆeOÚRœÎ�ÖgšFÙühK£Bô	�rùÑŽF�h]Z4Ð“ZÔ‚!ÚSÜ<#zKühNqž¡ÇŸWâG[‹é[?S7ghaz
+s3ñ«ÍÅä½¿š9
+ë�`èÚzš¶—{â¶D…4Ðu ·>%mïÐï×·±5½·²˜¼�©è7‹ÚÃ,h �h �.mœ§¿õ�.­»žþæ�áhCq2?ZRœ)x–÷éöY^­SSÕ�èÿ]å)„*Ï{Ôy²æ$Rû¶„§¼ÖGæ¼ 4Ð@4Ð÷h �h �Z[fd	hi\˜ÕÝP”/a»å)ªaè�âL~´¡¸¡úí–ª­°	 èÉ-kAË›o.]~twËvËQ\“ÝPœchÙ�ÖdG��Öô2zžV:L–ñ<-u˜Â›Kn4Ð@4Ð@4Ð@4Ð@ËÖ„5e ÖJŽÖžxýI~ôIO<¯oÙnµùÑí¿²ÝªrÔ‹M@=h �ÆvÛ­¾ŽÛxÏÐªŽ&ÅÐâ¤1a³2Mg&¬9Á›Ð@4Ð÷è—‹ÚšˆÞ[Lßº˜ˆoS·²5-öÞ<MÚûCü¯^ �ÎÐ‡Ÿ÷è7+Éoˆ[wFk–*ã6®4+B«�x]	LñUç¡ï
+�Øna 4Ð@Wüçª¢tý‡TfåKØnyŠš1´Ð¦s³íI	³¼“Öº¿uFcjZh õÍlfèRßÜWdôà³[=F    IEND®B`‚
\ No newline at end of file
diff --git a/core/modules/media/src/Plugin/media/Source/AudioFile.php b/core/modules/media/src/Plugin/media/Source/AudioFile.php
new file mode 100644
index 0000000..2229143
--- /dev/null
+++ b/core/modules/media/src/Plugin/media/Source/AudioFile.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace Drupal\media\Plugin\media\Source;
+
+use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
+use Drupal\media\MediaTypeInterface;
+
+/**
+ * Media source wrapping around an audio file.
+ *
+ * @see \Drupal\file\FileInterface
+ *
+ * @MediaSource(
+ *   id = "audio_file",
+ *   label = @Translation("Audio file"),
+ *   description = @Translation("Use audio files for reusable media."),
+ *   allowed_field_types = {"file"},
+ *   default_thumbnail_filename = "audio.png"
+ * )
+ */
+class AudioFile extends File {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function createSourceField(MediaTypeInterface $type) {
+    return parent::createSourceField($type)->set('settings', ['file_extensions' => 'mp3 wav aac']);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareViewDisplay(MediaTypeInterface $type, EntityViewDisplayInterface $display) {
+    $display->setComponent($this->getSourceFieldDefinition($type)->getName(), [
+      'type' => 'file_audio',
+    ]);
+  }
+
+}
diff --git a/core/modules/media/src/Plugin/media/Source/VideoFile.php b/core/modules/media/src/Plugin/media/Source/VideoFile.php
new file mode 100644
index 0000000..214d36c
--- /dev/null
+++ b/core/modules/media/src/Plugin/media/Source/VideoFile.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace Drupal\media\Plugin\media\Source;
+
+use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
+use Drupal\media\MediaTypeInterface;
+
+/**
+ * Media source wrapping around a video file.
+ *
+ * @see \Drupal\file\FileInterface
+ *
+ * @MediaSource(
+ *   id = "video_file",
+ *   label = @Translation("Video file"),
+ *   description = @Translation("Use video files for reusable media."),
+ *   allowed_field_types = {"file"},
+ *   default_thumbnail_filename = "video.png"
+ * )
+ */
+class VideoFile extends File {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function createSourceField(MediaTypeInterface $type) {
+    return parent::createSourceField($type)->set('settings', ['file_extensions' => 'mp4']);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareViewDisplay(MediaTypeInterface $type, EntityViewDisplayInterface $display) {
+    $display->setComponent($this->getSourceFieldDefinition($type)->getName(), [
+      'type' => 'file_video',
+    ]);
+  }
+
+}
diff --git a/core/modules/media/tests/src/FunctionalJavascript/MediaSourceAudioVideoTest.php b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceAudioVideoTest.php
new file mode 100644
index 0000000..ab78bb8
--- /dev/null
+++ b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceAudioVideoTest.php
@@ -0,0 +1,105 @@
+<?php
+
+namespace Drupal\Tests\media\FunctionalJavascript;
+
+use Drupal\Core\Entity\Entity\EntityViewDisplay;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\file\Entity\File;
+
+/**
+ * Tests the Audio and Video media sources.
+ *
+ * @group media
+ */
+class MediaSourceAudioVideoTest extends MediaSourceTestBase {
+
+  /**
+   * Check the Audio source functionality.
+   */
+  public function testAudioTypeCreation() {
+    $assert_session = $this->assertSession();
+    $page = $this->getSession()->getPage();
+
+    $source_id = 'audio_file';
+    $type_name = 'audio_type';
+    $field_name = 'field_media_' . $source_id;
+    $this->doTestCreateMediaType($type_name, $source_id);
+
+    // Check that the source field was created with the correct settings.
+    $storage = FieldStorageConfig::load("media.$field_name");
+    $this->assertInstanceOf(FieldStorageConfig::class, $storage);
+    $field = FieldConfig::load("media.$type_name.$field_name");
+    $this->assertInstanceOf(FieldConfig::class, $field);
+    $this->assertSame('mp3 ogg wav wma aiff aac m4a', FieldConfig::load("media.$type_name.$field_name")->get('settings')['file_extensions']);
+
+    // Check that the display holds the correct formatter configuration.
+    $display = EntityViewDisplay::load("media.$type_name.default");
+    $this->assertInstanceOf(EntityViewDisplay::class, $display);
+    $formatter = $display->getComponent($field_name)['type'];
+    $this->assertSame('file_audio', $formatter);
+
+    // Create a media asset and verify that the <audio> tag is present.
+    file_put_contents('public://file.mp3', str_repeat('t', 10));
+    $file = File::create([
+      'uri' => 'public://file.mp3',
+      'filename' => 'file.mp3',
+    ]);
+    $file->save();
+
+    $this->drupalGet("media/add/$type_name");
+    $page->fillField('Name', 'Audio media asset');
+    $page->attachFileToField("files[{$field_name}_0]", \Drupal::service('file_system')->realpath('public://file.mp3'));
+    $result = $assert_session->waitForButton('Remove');
+    $this->assertNotEmpty($result);
+    $page->pressButton('Save');
+
+    $assert_session->pageTextContains("$type_name Audio media asset has been created.");
+    $assert_session->elementExists('css', "audio > source[type='audio/mpeg']");
+  }
+
+  /**
+   * Check the Video source functionality.
+   */
+  public function testVideoTypeCreation() {
+    $assert_session = $this->assertSession();
+    $page = $this->getSession()->getPage();
+
+    $source_id = 'video_file';
+    $type_name = 'video_type';
+    $field_name = 'field_media_' . $source_id;
+    $this->doTestCreateMediaType($type_name, $source_id);
+
+    // Check that the source field was created with the correct settings.
+    $storage = FieldStorageConfig::load("media.$field_name");
+    $this->assertInstanceOf(FieldStorageConfig::class, $storage);
+    $field = FieldConfig::load("media.$type_name.$field_name");
+    $this->assertInstanceOf(FieldConfig::class, $field);
+    $this->assertSame('mp4 webm ogg ogv', FieldConfig::load("media.$type_name.$field_name")->getSetting('file_extensions'));
+
+    // Check that the display holds the correct formatter configuration.
+    $display = EntityViewDisplay::load("media.$type_name.default");
+    $this->assertInstanceOf(EntityViewDisplay::class, $display);
+    $formatter = $display->getComponent($field_name)['type'];
+    $this->assertSame('file_video', $formatter);
+
+    // Create a media asset and verify that the <video> tag is present.
+    file_put_contents('public://file.mp4', str_repeat('t', 10));
+    $file = File::create([
+      'uri' => 'public://file.mp4',
+      'filename' => 'file.mp4',
+    ]);
+    $file->save();
+
+    $this->drupalGet("media/add/$type_name");
+    $page->fillField('Name', 'Video media asset');
+    $page->attachFileToField("files[{$field_name}_0]", \Drupal::service('file_system')->realpath('public://file.mp4'));
+    $result = $assert_session->waitForButton('Remove');
+    $this->assertNotEmpty($result);
+    $page->pressButton('Save');
+
+    $assert_session->pageTextContains("$type_name Video media asset has been created.");
+    $assert_session->elementExists('css', "video > source[type='video/mp4']");
+  }
+
+}
