diff --git a/core/modules/media/config/schema/media.schema.yml b/core/modules/media/config/schema/media.schema.yml index dad518985a7cf3987a33c75d64259ea2922882ec..b9156b23f86c675750d23af16fd29f51a00fd8d9 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 100644 index 0000000000000000000000000000000000000000..23efc4a83fd1b102ad579faac2bf14d00d735f19 --- /dev/null +++ b/core/modules/media/images/icons/audio.png @@ -0,0 +1,27 @@ +PNG + + IHDRJ6gAMA aIDATx]ִ*"rz .8^ (\O+%8 ,8 +#".ii~ߛ6io<헦ɛ˗_ek +~5װKC׳gφń*!cݻweC#+(&^_\rQ +R \VE1M&2Y.*n +onnF-Κ5)_HlP.ׯwF>}:۶m:*[K\ʹ$Qxv&O֭['YIK~>dvܹ ىY/4*qb˛c,=VU~)鑵6˕6˪Ί\rtJfWE)pe#V E-*=Ћ-*.rw5k0#rYt׮]C:׮]t+$$]|xX-Yr-2[_,XPDE7ǏF嫯vK#A +зvA5\ps\{d޽{=)ƍa9㭷ZۣHʣ'\'-6ĉz>9e#XZgEUǏש2=`Ċ801OUp-e(U9G1Wu;|pUX1e^j" ۾}{({{P VP|!WT^Lnm޼9 fΜKJ| 84+Eħsk1j+G2L; 4<&&fa!&5H.LpD}&<:\ֲ# +c=fԠ˨;1D7~Ǒj͘1d0HL7jhyBm -ĉ9 Ć |)X@￟566,Sޚ577W#fBQR,[Z 0@@P$͆@j(-Kv\g #Є7c$ΝzC|}\wu / *B@S:uyZ+g#hO*A,+>%}K[ϪbtʛO@B& !`H 16!5h hCRS@رc A:PeLFmC \N3z̘1۠4s-z!_mu| qhL5jW4@oڴ#&2"NԔyKX[[XWWK3qѣG3&ƌe[uttSND'4E)0؜;,mMx뭷xk~Oh3@y2{<o׮]>(&M䋛X+--- = ՀqN6-Tȑ#4[:G/^u_-v|>Pyرc u4h sIR 28p@̢m.OB8 +6)goT14x8|: +`"UիW +6BU?'b&Д@w?#D/F04 [7\喗|QiooeC] W\whS +2x[DvyNw' EIJ3(04 +` *aH1f>bo>_dQi77bضm1,:h __틛84*zj%1qEc:Aõo&h9Q{ ^j"1|bD곛K .|&{i*Z}IbZ [DΝe4 (S։p9z9lݺ5k9jnX0mp6!5h hCRѮ Od##XV:(/]t֏el?0ٹnmmͥ,A9/ЉOs γ( Qv\09/Ȑ(C)?r=:CgIIiN@k2I & IiN;M@7'@VhB HDh7ځЄZ$ nY "& IhZ}>cWtLOYqa0bԷ~ˎ=*^Jhjłyj9 7;N/ܹ3LHFht5Btb{u$-6X^!_|[[N]7 +466z2a2"t[۱ueذa +^H"tNN8{y2dH>tˬޛc o&-IgD贈Q~ocٳg{S[q%K+-QB;z޼ylܹ,D"ѭٽ{fGgt]#3Q͛n-Z:"1SN(\K {ꕔDB`/t˖-US[{а]T8XY%!b#mRgGGß Au筘K]+Ң B,ɵ +줴(E!Kr @;)- +"tQȒ\+NJB]$ +Dh+Ң B,ɵ}{z؂b{}裏@C:!Bl D,?rHNiO?48p`СC?^ D茭>x0`۷oOv(*`jf%oʔ)J7HT2Dc„ lO+V0#xD?xǎرc6oڴ-\PJ\3f ۿjPOh,ĉ?.&α[=N +xR^kIubbcLYZQݺucrLEU-7kT._i-/*C֍hJyq>}HͲzd_ B[n@Μ9u)ޣGPO믿iЖÄQ!Q,.E܍ѕZ 5Ah/p6CjQLaJ(6T q7<ukT)OMC[NM{ڴi{Gz#O؅ " 745q B$吏zbccˤZw>h6>c:*O(u%vvvBl<Ȍ$[nU" 4(1KTӝ;wF]t"tLrbI'va4XV(^V,6rH6vP:O@{Æ k}Zؘ50<_f\gϞdƨH-NG""b]6ElYq=x mܸQi/T +%i{[=j鳶JSUPr$F/jm\9-5;-(vd"J*/DY.A-ʋmGK BK@"ck2'˻Āe \IENDB` \ 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 100644 index 0000000000000000000000000000000000000000..4364cf3a8f4c031b647c198c73250dda5301d4e3 --- /dev/null +++ b/core/modules/media/images/icons/video.png @@ -0,0 +1,18 @@ +PNG + + IHDRJ6gAMA a IDATx흉DLJRbD +#OL0D( ?c( 9|Cx|iNi;o>l;jժenb;kK\2t믋Ǐ7ŧ#.uZ&z;zjqyY֫(1/s8/rv[9sQ:mL\rxG H!1P~Z`L{y|yiT㌑.rwQG)1xũSȘJD8cLY6tZY&Z4~ ~7e)عsgwCoTD7t]9R(.">bРAU@LkڒtOOQQNO<%'u/tLYD\]-IKmm*RW`ǽ; qp+V(𶻻[,YD`Æ /u<(1cp?/u$`ȑæ}">eA^*j-34NP2&JƮ~~z@ m'=nܸ6uBuOwZ:tm%_y2֘<<={vr=kkXti96l؀v.xH=Ҁum9_ݻw畩git55tooضm[ڶ}cWW1a1LsX"i+Xs*_d'?dži<^vٳgl>ۖ]x]Qʣne}R>-뒫+\WT@H="z-qѢN@/_܉?tʯzȐ!MɓM."ʾ]r/(kw@9 r/Eq`w!} t ZBl Zw تs)t^pQg2tM4-*HQ-Kx1"~=l}@_{8϶h}B;*âR4֭3b>wĉڶJѵ)8H &hG䏡!1#M:رc? ={7èn^I>2|gb߾}0mpsܔ뮻>2رc0mp[)܂ 9sFa  {:w0)coH:mL@U4z#蕄xӡm+8Э.GovCb9tv֦MĮ]bYgp1d[t4,{g^M#MЎ8*}u{ >ܸq^Lߨwr2FnPҁjmX ?厖Q+Z #_0. hGҽ#T4A;"*pT MЎ8*vZ^M7j:tH]Z&K2dˌj\@4 v]kvlދ\ |ԋ[IZ?B}2/e}X1Cgێ W_}Нj u$h@´3f̨ʫv b'NӦM JƎ PSL6D8_pLn ?wy0aI :c̙ɐT]Π /<H9 ̙#0@4Ν+FUpz4A`pBqH~KX= /,IU~'xB!U$ݚYf !hEjǏWLm+И'`Qϊ|aXzVezvD GP툀bhvDQ1T4A;"ਘ㱿c~G(h Ֆ>CXWW! 믿kmqD'zjcɌumdΞq7!CNOu!0#DZgW] W]]] W]]] Wgǜ#FK P1g(.'@AgǜlT]sHu3fLcMv{^K: "3~?S4%UИgW]uCxˎ_8}裏į`x4Ș8[C }GĩS/;|և)f|E kjb93MиB3'1C7Di[C_|!N<- +:zhtRqdrL Z;N̪lTҍ;6Y㡇r:/贳ܯO+HR멸[Ү}k֮-YqƉ+W3gjZ +3{}0Մ >{7nBՀnW,֭[ (5OWN,6enhMAk#l/ӦMK8qbl6Nc8Œ3?X2>tLWjϟxٍBt->8{Xn]pQioIcԱ:bdiZX$]Zg'C ܉'A?4E|`E aÆQ +:fۉQF%Kyyu[KAy饗˗{}J̬YDACY[bȑ --@5arڵQ<(5KxۮEC ,Ìe!#P>W,OBP}.^P[(h[di  + vjm,z!@A{Bmm]/(h/Y--; EO +-ɓ''P%mc˖-k/$38p` ;P%G lr9gΜ$#̰Ooo8~x6)K WYi$0{9k.cq̙x +r-I϶mķ~+| ,pm)蒦r.1y2}t\oy +IAg€{w SmmٲkCAWgf- Św%0} VQ)6ЭF7pCA:+sN7߈NYѪst} :%[ fc;K$cL5nܤK8rssӦM~dˑ= IwNeh&@A73 *Oq˯1KBc}nt`%XU7ľ}͛s2e%9uFWЕK8#GKJ(J`}t Wh +: c#%@AGpt;υ#m8OH PБ6':ݻg + IENDB` \ 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 0000000000000000000000000000000000000000..22291434e971f7d91877472e495bff216549ddc2 --- /dev/null +++ b/core/modules/media/src/Plugin/media/Source/AudioFile.php @@ -0,0 +1,39 @@ +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 0000000000000000000000000000000000000000..214d36c41a3d68a85b337e4f7b812ecf6b384039 --- /dev/null +++ b/core/modules/media/src/Plugin/media/Source/VideoFile.php @@ -0,0 +1,39 @@ +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 0000000000000000000000000000000000000000..4ad3c5be08e85e507ccf3f32d220d01217c652a5 --- /dev/null +++ b/core/modules/media/tests/src/FunctionalJavascript/MediaSourceAudioVideoTest.php @@ -0,0 +1,105 @@ +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 wav aac', 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