FMUSER Wirless edastab videot ja heli lihtsamalt!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> afrikaans
sq.fmuser.org -> albaania keel
ar.fmuser.org -> araabia
hy.fmuser.org -> Armeenia
az.fmuser.org -> aserbaidžaanlane
eu.fmuser.org -> baski keel
be.fmuser.org -> valgevenelane
bg.fmuser.org -> Bulgaaria
ca.fmuser.org -> katalaani keel
zh-CN.fmuser.org -> hiina (lihtsustatud)
zh-TW.fmuser.org -> Hiina (traditsiooniline)
hr.fmuser.org -> horvaadi keel
cs.fmuser.org -> tšehhi
da.fmuser.org -> taani keel
nl.fmuser.org -> Hollandi
et.fmuser.org -> eesti keel
tl.fmuser.org -> filipiinlane
fi.fmuser.org -> soome keel
fr.fmuser.org -> Prantsusmaa
gl.fmuser.org -> galicia keel
ka.fmuser.org -> gruusia keel
de.fmuser.org -> saksa keel
el.fmuser.org -> Kreeka
ht.fmuser.org -> Haiti kreool
iw.fmuser.org -> heebrea
hi.fmuser.org -> hindi
hu.fmuser.org -> Ungari
is.fmuser.org -> islandi keel
id.fmuser.org -> indoneesia keel
ga.fmuser.org -> iiri keel
it.fmuser.org -> Itaalia
ja.fmuser.org -> jaapani keel
ko.fmuser.org -> korea
lv.fmuser.org -> läti keel
lt.fmuser.org -> Leedu
mk.fmuser.org -> makedoonia
ms.fmuser.org -> malai
mt.fmuser.org -> malta keel
no.fmuser.org -> Norra
fa.fmuser.org -> pärsia keel
pl.fmuser.org -> poola keel
pt.fmuser.org -> portugali keel
ro.fmuser.org -> Rumeenia
ru.fmuser.org -> vene keel
sr.fmuser.org -> serbia
sk.fmuser.org -> slovaki keel
sl.fmuser.org -> Sloveenia
es.fmuser.org -> hispaania keel
sw.fmuser.org -> suahiili keel
sv.fmuser.org -> rootsi keel
th.fmuser.org -> Tai
tr.fmuser.org -> türgi keel
uk.fmuser.org -> ukrainlane
ur.fmuser.org -> urdu
vi.fmuser.org -> Vietnam
cy.fmuser.org -> kõmri keel
yi.fmuser.org -> Jidiši
Viimastel aastatel on kasvav nõudlus mitme platvormi kohandamise järele toonud kaasa voogedastuse adaptiivse bitikiirusega taasesituse, mis on sundinud veebi- ja mobiiliarendajaid videotehnoloogia loogikat ümber mõtlema. Kõigepealt andsid hiiglased välja HLS-, HDS- ja Smooth Streaming -protokollid eraldi, peites kõik asjakohased üksikasjad oma spetsiaalsetesse SDK-desse. Arendajad ei saa pleieris multimeediumimootori loogikat vabalt muuta: te ei saa muuta kohanduva bitikiiruse ja vahemälu suuruse reegleid ega isegi viilude pikkust. Neid mängijaid võib olla lihtne kasutada, kuid teil pole selle kohandamiseks liiga palju võimalusi ja isegi halbu funktsioone saab lubada.
Kuid erinevate rakendusstsenaariumide suurenemisega muutub nõudlus kohandatavate funktsioonide järele järjest tugevamaks. Otseülekannete ja tellitavate toodete vahel on puhvrihalduses, ABR-i strateegiates ja vahemällu salvestamise strateegiates erinevusi. Need nõuded sünnitasid rida madalama taseme multimeediaoperatsioonide API-sid: Netstream Flashil, Media Source Extensions HTML5-l ja Media Codec Androidil. Samal ajal ilmus tööstuses tavaline HTTP-põhine voogesitusvorming MPEG-DASH. . Need täiustatud võimalused pakuvad arendajatele suuremat paindlikkust, võimaldades neil ehitada mängijaid ja multimeediumimootoreid, mis vastavad nende ärivajadustele.
Täna jagame, kuidas moodsat mängijat ehitada ja milliseid põhikomponente on sellise mängija ehitamiseks vaja. Üldiselt võib tüüpilise mängija jagada kolmeks osaks: kasutajaliides, multimeediumimootor ja dekooder.
Kasutajaliides (UI): see on mängija ülemine osa. See määratleb lõppkasutaja vaatamiskogemuse kolme erineva funktsionaalse omaduse kaudu: nahk (mängija välimus), kasutajaliides (kõik kohandatavad funktsioonid, nagu esitusloendid ja sotsiaalne jagamine jne) ja äriloogika (konkreetne äriloogika). reklaamide, seadmete ühilduvuse loogika ja sertifitseerimise haldamine jne).
Multimeediumimootor: see haldab kogu taasesituse juhtimisega seotud loogikat, näiteks kirjeldusfailide analüüsi, videoklippide tõmbamist ning adaptiivsete bitikiiruse reeglite seadistamist ja vahetamist. Seda osa selgitame üksikasjalikult allpool. Kuna need mootorid on üldiselt platvormiga tihedalt seotud, võib kõigi platvormide katmiseks osutuda vajalikuks kasutada erinevaid mootoreid.
Dekooder ja DRM-haldur: mängija madalaim osa on dekoodri ja DRM-i haldur. Selle kihi funktsioonid kutsuvad otse operatsioonisüsteemi poolt eksponeeritud API-sid. Dekoodri põhiülesanne on videosisu dekodeerimine ja renderdamine, DRM-haldur aga kontrollib, kas tal on õigus dekrüpteerimisprotsessi kaudu mängida.
Järgmisena kasutame näiteid, et tutvustada iga kihi erinevaid rolle.
1. Kasutajaliides (UI)
Kasutajaliidese kiht on mängija ülemine kiht. See kontrollib, mida teie kasutajad saavad näha ja millega suhelda. Samal ajal saate seda oma kaubamärgiga kohandada, et pakkuda kasutajatele ainulaadset kasutuskogemust. See kiht on kõige lähemal esiosa arendusosale, millest räägime. UI-sse lisame ka äriloogika komponendid, mis moodustavad teie taasesituse kogemuse ainulaadsuse, kuigi lõppkasutaja ei saa funktsiooni selle osaga otse suhelda.
Kasutajaliidese osa sisaldab peamiselt kolme komponenti:
1) Nahk
Nahk on mängija visuaalselt seotud osade üldine mõiste: edenemise juhtimisribad, nupud, animeeritud ikoonid jne, nagu on näidatud joonisel 2. Nagu enamik kujunduskomponente, on ka selle komponendi osa rakendatud CSS-i abil, mis võimaldab disainerid või arendajad saavad neid hõlpsasti integreerida (isegi kui kasutate terviklikku lahendust, näiteks JW Player ja Bitdash).
2) kasutajaliidese loogika
Kasutajaliidese loogikaosas määratletakse kõik nähtavad interaktsioonid taasesituse ja kasutajate interaktsiooni ajal: esitusloendid, pisipildid, taasesituskanalite valik ja sotsiaalmeedia jagamine. Lähtudes eeldatavast taasesituskogemusest, võib sellele osale minevikus lisada palju muid funktsioone, millest paljud eksisteerivad pistikprogrammidena ja võib-olla leiate inspiratsiooni: pistikprogrammid · videojs / video.js Wiki · GitHubi loogikaosa Komplektis on palju funktsioone. Me ei tutvusta neid üksikasjalikult, vaid võtame näiteks nende funktsioonide intuitiivseks kogemiseks Eurospordi mängija kasutajaliidese.
Lisaks traditsioonilistele kasutajaliidese elementidele on ka väga huvitav funktsioon. Kui kasutaja vaatab DVR-voogesituse meediumit, kuvatakse otseülekanne väikese akna kujul ja publik saab selle väikese akna kaudu igal ajal otseülekande juurde naasta. Kuna paigutus või kasutajaliides ja multimeediumimootor on täiesti sõltumatud, saab neid funktsioone rakendada HTML5-s dash.js-i abil, kasutades vaid mõnda koodirida. Kasutajaliidese osas on parim viis selle rakendamiseks lisada kasutajaliidese põhimoodulitele pistikprogrammide / moodulite kujul erinevaid funktsioone.
3) Äriloogika
Lisaks ülaltoodud kahe osa "nähtavatele" omadustele on veel üks nähtamatu osa, mis moodustab teie ettevõtte ainulaadsuse: autentimine ja maksmine, kanalite ja esitusloendite hankimine ning reklaamimine. Samuti on mõned tehnoloogiaga seotud asjad, näiteks A / B testmoodulid ja seadmetega seotud konfiguratsioonid. Neid konfiguratsioone kasutatakse mitme erineva meediumimootori valimiseks erinevat tüüpi seadmete hulgast.
Altpoolt peidetud keerukuse paljastamiseks selgitame neid mooduleid üksikasjalikumalt siin:
Seadme tuvastamise ja seadistamise loogika: see on üks olulisemaid funktsioone, kuna see eraldab taasesituse ja renderdamise. Näiteks võib teie brauseri erinevate versioonide põhjal mängija valida HLS-i videovoogude esitamiseks automaatselt HTML5 MSE-l, hls.js-il või välgupõhisel taasesitusmootoril FlasHls põhineva multimeediumimootori. Selle osa suurim omadus on see, et hoolimata sellest, millist alusmootorit kasutate, saate ülemise kihi kasutajaliidese või äriloogika kohandamiseks kasutada sama JavaScripti või CSS-i.
Võimalus tuvastada kasutajate seadmeid võimaldab teil vajaduse korral seadistada lõppkasutaja kogemusi: kui mängite 4K ekraaniseadme asemel mobiilseadmes, peate võib-olla alustama väiksema bitikiirusega.
A / B-testi loogika: A / B-test peab olema osade kasutajate jaoks tootmisprotsessis hall. Näiteks võite mõnele Chrome'i kasutajale anda uue nupu või uue multimeediumimootori ning samuti saate tagada, et kogu selle töö jätkub plaanipäraselt.
Reklaam (valikuline): reklaami töötlemine kliendipoolel on üks keerulisemaid äriloogikaid. Nagu on näidatud pistikmooduli videojs-contrib-ads reklaamide vooskeemil, on reklaamide sisestamise protsessis mitu sammu. HTTP-video voogesituse jaoks kasutate enam-vähem mõnda olemasolevat vormingut, näiteks VAST, VPAID või Google IMA, mis võivad aidata teil videoreklaame reklaamiserverist tõmmata (tavaliselt vananenud mittetundlikud vormingud), paigutatud alguses, keskel ja video taasesituse hilises staadiumis ja seda ei saa vahele jätta.
kokku võtma:
Kohandamisvajaduste jaoks võite kasutada mängimiseks kõiki klassikalisi funktsioone sisaldavat JW Playerit (see võimaldab teil ka mõningaid funktsioone kohandada) või kohandada omaenda funktsioone, lähtudes avatud lähtekoodiga mängijast, näiteks Videojs. Isegi brauseri ja emapleieri vahelise kasutuskogemuse ühtlustamiseks võite kaaluda ka React Native'i kasutamist kasutajaliidese või naha arendamiseks ja Haxe äriloogika arendamiseks. Neid suurepäraseid teeke võib olla mitut tüüpi. Seadmete vahel jagatakse sama koodibaaside kogumit.
2, multimeediumimootor
Viimastel aastatel on multimeediumimootor mängija arhitektuuris ilmunud uue iseseisva komponendina. MP4 ajastul töötles platvorm kogu taasesitusega seotud loogikat ja arendajatele avati ainult mõned multimeedia töötlemisega seotud funktsioonid (ainult sellised funktsioonid nagu taasesitus, paus, lohistamine ja täisekraanrežiim).
Uus HTTP-põhine voogesitusmeedia formaat nõuab aga uue keerukuse käsitlemiseks ja juhtimiseks täiesti uut komponenti: deklaratsioonifailide sõelumine, videoklippide allalaadimine, adaptiivne bitikiiruse jälgimine, otsuste tegemise tähis ja palju muud. Alguses tegeles ABR-i keerukusega platvorm või seadmete pakkuja. Suureneva nõudega ankrukontrolli ja kohandatud mängijate järele on mõned uued mängijad siiski järk-järgult avanud mõned madalama taseme API-d (näiteks meediumiallika laiendused veebis, Netstream Flashil ja meediumikoodek Androidi platvormil) ning kiiresti meelitanud palju tugevaid ja jõulisi multimeediumimootoreid, mis põhinevad neil API-l.
Järgmisena selgitame üksikasjalikult kaasaegse multimeediumitöötlusmootori iga komponendi üksikasju:
1) Deklaratsioonifaili tõlgendamine ja parser
HTTP-põhises video voogesituses algab kõik kirjeldusfailist. Deklaratsioonifail sisaldab metainfot, millest meediumiserver peab aru saama: mitu erinevat tüüpi video kvaliteeti, keelt ja tähti jne ning mis need on. Parser hankib kirjeldusteabe XML-failist (spetsiaalne m3u8 fail HLS-i jaoks) ja seejärel saab teabest õige videoteabe. Muidugi on meediumiservereid mitut tüüpi ja mitte kõik neist ei rakenda spetsifikatsioone õigesti, mistõttu võib parseril tekkida vajadus tegeleda mõne täiendava rakendusveaga.
Kui videoteave on välja kaevatud, parseldab parser selle andmed voogesitatava visuaalse pildi koostamiseks ja teab, kuidas erinevaid videoklippe hankida. Mõnes multimeediumimootoris ilmuvad need visuaalsed pildid kõigepealt abstraktse multimeediumkujutise kujul ja joonistavad seejärel ekraanile erinevate HTTP-videovoogude vormingute erinevad omadused.
Otseülekande stseenis peab parser ka perioodiliselt deklaratsioonifaili uuesti omandama, et saada uusim videoklippide teave.
2) Allalaadija (laadige alla deklaratsioonifailid, multimeediumiklipid ja võtmed)
Allalaadija on moodul, mis ümbritseb natiivset API-d HTTP-päringute töötlemiseks. Seda ei kasutata mitte ainult multimeediumifailide allalaadimiseks, vaid seda saab vajadusel kasutada ka deklaratsioonifailide ja DRM-võtmete allalaadimiseks. Allalaadija mängib võrguvigade käsitlemisel väga olulist rolli ja proovib uuesti, samal ajal kui on võimalik andmeid koguda praegu saadaoleva ribalaiuse kohta.
Märkus. Multimeediumifailide allalaadimisel võib punkt-punkt reaalajas suhtlusstsenaariumis kasutada HTTP-protokolli või muid protokolle, näiteks WebRTC-protokolli.
3) voogesituse mootor
Voogesituse taasesitusmootor on keskne moodul, mis suhtleb dekooderi API-ga. See impordib koodrisse erinevaid multimeediumiklippe ja tegeleb mitmekordse vahetamise ning erinevustega taasesituse ajal (näiteks deklaratsioonifailide ja videolõikude erinevus ning automaatne külmutamine). Raami vahelejätmine).
4) Ressursikvaliteedi parameetri ennustaja (ribalaius, protsessor, kaadrisagedus jne)
Hindaja saab andmeid erinevatest mõõtmetest (ploki suurus, allalaadimisaeg fragmendi kohta ja vahele jäetud kaadrite arv) ning koondab need kasutajate käsutuses oleva ribalaiuse ja protsessori arvutusvõimsuse hindamiseks. Seda väljundit kasutatakse ABR-i (Adaptive Bitrate, adaptive bitrate) lülitamise kontrolleril otsuste tegemiseks.
5) ABR-lüliti kontroller
ABR-lüliti võib olla multimeediumimootori kõige kriitilisem osa - tavaliselt kõige tähelepanuta jäetud osa. Kontroller loeb hindaja väljundis olevaid andmeid (ribalaius ja vahelejäetud kaadrite arv), kasutab kohandatud algoritmi nende andmete põhjal hinnangute andmiseks ja ütleb voogedastusmootorile, kas peab vahetama video- või helikvaliteeti. Selles valdkonnas on palju uurimistööd ja suurimaks raskuseks on tasakaalu leidmine puhverdamise riski ja vahetamise sageduse vahel (liiga sagedane vahetamine võib põhjustada halba kasutajakogemust).
6) DRM-haldur (valikuline komponent)
Täna põhinevad kõik tasulised videoteenused DRM-i haldusel ja DRM sõltub suuresti platvormist või seadmetest, näeme, kui mängijat hiljem selgitame. Multimeediumimootori DRM-haldur on alumise taseme dekooderis oleva sisu dekrüpteerimise API ümbris. Võimaluse korral püüab see brauserite või operatsioonisüsteemide rakendamise üksikasjade erinevusi varjata abstraktselt. See komponent on tavaliselt tihedalt ühendatud voo töötlemise mootoriga, kuna see suhtleb sageli dekoodri kihiga.
7) Teisenda multiplekseri vorming (valikuline komponent)
Nagu hiljem näeme, on igal platvormil pakendamise ja kodeerimise osas oma piirangud (Flash loeb FLV konteineritesse kapseldatud H.264 / AAC-faile ja MSE loeb ISOBMFF-i konteineritesse kapseldatud H.264 / AAC-faile. Fail). See toob kaasa mõned videoklipid, mis tuleb enne dekodeerimist vormindada. Näiteks MPEG2-TS-st ISOBMFF-i vormindamise multiplekseriga saab hls.js kasutada MSS-vormingus sisu HLS-i videovoogude esitamiseks. Multimeediumimootori tasemel vormingu teisendamise multiplekser on kahtluse alla seatud; kaasaegse JavaScripti või Flashi tõlgendusvõime täiustamisel on selle kaasnev jõudluskaotus aga peaaegu tühine ja see ei avalda kasutuskogemusele suurt mõju.
kokku võtma
Multimeediumimootoris on ka palju erinevaid komponente ja funktsioone, alates subtiitritest kuni ekraanipiltideni kuni reklaami sisestamiseni ja nii edasi. Järgmisena kirjutame ka eraldi artikli, et võrrelda erinevate mootorite erinevusi, läbi mõningate testide ja turuandmete, et anda mootori valimiseks sisulisi juhiseid. Väärib märkimist, et erinevate platvormidega ühilduva mängija ehitamiseks on väga oluline pakkuda mitut vabalt vahetatavat multimeediumimootorit, sest selle aluseks olev dekooder on seotud kasutaja platvormiga. Järgmisena keskendume sellele aspektile.
3. Dekooder ja DRM-haldur
Dekodeerimise jõudluse (dekooder) ja turvalisuse kaalutlustel (DRM) on dekooder ja DRM-haldur tihedalt seotud opsüsteemi platvormiga.
1) Dekooder
Dekooder haldab alumise kihi taasesitusega seotud loogikat. See pakib videod lahti erinevates kapseldamisvormingutes, dekodeerib nende sisu ja toimetab dekodeeritud videokaadrid renderdamiseks operatsioonisüsteemi ning võimaldab lõpuks ka lõpptarbijatel näha.
Kuna videotihenduse algoritmid muutuvad üha keerukamaks, on dekodeerimisprotsess protsess, mis nõuab intensiivseid arvutusi ning dekodeerimise jõudluse ja sujuva taasesituse kogemuse tagamiseks peab dekodeerimisprotsess olema tugevalt sõltuv operatsioonisüsteemist ja riistvarast. Suurem osa praegusest dekodeerimisest toetub GPU kiirendatud dekodeerimisele (see on ka üks põhjus, miks tasuta ja võimsam VP9 dekooder pole võitnud H.264 turupositsiooni). Kui GPU kiirendust pole, võtab 1080P video dekodeerimine protsessori arvutusest umbes 70% ja kaadrikadu võib olla väga tõsine.
Videoraamide dekodeerimise ja renderdamise põhjal pakub haldur ka natiivset puhvrit. Multimeediumimootor saab puhvriga otse suhelda, et mõista selle suurust reaalajas ja vajadusel seda värskendada.
Nagu me varem mainisime, on igal platvormil oma renderdamismootor ja vastav API: Flash-platvormil on Netstream, Android-platvormil on Media Codec API ja veebis on tavalised meediumiallikate laiendused. MSE on üha enam pilkupüüdev ja võib tulevikus muutuda brauseri järel teistele platvormidele de facto standardiks.
2) DRM-i haldur
Täna on DRM vajalik stuudiote toodetud tasulise sisu edastamisel. Selle sisu varastamist tuleb takistada, seega on DRM-i kood ja tööprotsess lõppkasutajatele ja arendajatele blokeeritud. Dekrüpteeritud sisu ei lahku dekodeerimiskihist, mistõttu seda ei võeta pealt.
DRM-i standardiseerimiseks ja teatava koostalitlusvõime tagamiseks erinevate platvormide juurutamiseks lõid mitmed veebihiiglased ühise krüptimise (CENC) ja universaalse multimeediumkrüptimislaiendi Krüptitud meediumilaiendid, et pakkuda mitut DRM-i pakkujat (näiteks võib EME-d kasutada Playready Edge'i platvormil ja Widewine Chrome'i platvormil, et luua levinud API-de komplekt, mis saab dekrüpteerimiseks lugeda DRM-i autoriseerimismoodulist videosisu krüptovõtit.
CENC kuulutas välja standardsete krüptimis- ja võtmekaardistamismeetodite komplekti, mida saab kasutada sama sisu dešifreerimiseks mitmes DRM-süsteemis, pakkudes ainult sama võtit.
Brauseri sees saab videosisu metainfo põhjal EME tuvastada, millist DRM-süsteemi krüptimiseks kasutatakse, ja helistada vastavasse dekrüpteerimismoodulisse (Content Decryption Module, CDM) CENC-i poolt krüptitud sisu dekrüpteerimiseks. Dekrüptimismoodul CDM tegeleb sisu autoriseerimisega seotud töödega, hankib võtme ja dekrüpteerib videosisu.
CENC ei määra autoriseerimise väljaandmist, autoriseerimise vormingut, volituste salvestamise ja kasutamise reegleid ning lubade kaardistamise suhet ja muid üksikasju. Nende üksikasjade käitlemise eest vastutab DRM-i pakkuja.
4. kokkuvõte
Täna mõistame sügavalt videopleieri kolme taseme erinevat sisu. Parim osa sellest kaasaegsest mängijastruktuurist on see, et selle interaktiivne osa on täielikult eraldatud multimeediumimootori loogilisest osast, võimaldades ankrul kohandada lõpptarbija kogemusi sujuvalt, vabalt ja paindlikult. , Erinevate multimeediummootorite samaaegne kasutamine mitmel erineval lõppseadmel võib tagada mitmesuguste videosisu vormingute sujuva taasesituse.
Veebiplatvormil on tänu multimeediumimootorite nagu dash.js, Shaka Player ja hls.js abile, mis kipuvad olema küpsed teegid, muutumas MSE ja EME taasesituse uuteks standarditeks ning üha enam mõjukaid tootjaid kasutavad neid. Need taasesitusmootorid. Viimastel aastatel on tähelepanu hakanud laienema ka digiboksidele ja Interneti-teleritele ning oleme ka näinud, et üha rohkem selliseid uusi seadmeid kasutab multimeediumitöötlusmootorina MSE-d. Jätkame nende standardite toetamiseks rohkem jõupingutusi.
|
Üllatuse saamiseks sisestage e-posti aadress
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org -> afrikaans
sq.fmuser.org -> albaania keel
ar.fmuser.org -> araabia
hy.fmuser.org -> Armeenia
az.fmuser.org -> aserbaidžaanlane
eu.fmuser.org -> baski keel
be.fmuser.org -> valgevenelane
bg.fmuser.org -> Bulgaaria
ca.fmuser.org -> katalaani keel
zh-CN.fmuser.org -> hiina (lihtsustatud)
zh-TW.fmuser.org -> Hiina (traditsiooniline)
hr.fmuser.org -> horvaadi keel
cs.fmuser.org -> tšehhi
da.fmuser.org -> taani keel
nl.fmuser.org -> Hollandi
et.fmuser.org -> eesti keel
tl.fmuser.org -> filipiinlane
fi.fmuser.org -> soome keel
fr.fmuser.org -> Prantsusmaa
gl.fmuser.org -> galicia keel
ka.fmuser.org -> gruusia keel
de.fmuser.org -> saksa keel
el.fmuser.org -> Kreeka
ht.fmuser.org -> Haiti kreool
iw.fmuser.org -> heebrea
hi.fmuser.org -> hindi
hu.fmuser.org -> Ungari
is.fmuser.org -> islandi keel
id.fmuser.org -> indoneesia keel
ga.fmuser.org -> iiri keel
it.fmuser.org -> Itaalia
ja.fmuser.org -> jaapani keel
ko.fmuser.org -> korea
lv.fmuser.org -> läti keel
lt.fmuser.org -> Leedu
mk.fmuser.org -> makedoonia
ms.fmuser.org -> malai
mt.fmuser.org -> malta keel
no.fmuser.org -> Norra
fa.fmuser.org -> pärsia keel
pl.fmuser.org -> poola keel
pt.fmuser.org -> portugali keel
ro.fmuser.org -> Rumeenia
ru.fmuser.org -> vene keel
sr.fmuser.org -> serbia
sk.fmuser.org -> slovaki keel
sl.fmuser.org -> Sloveenia
es.fmuser.org -> hispaania keel
sw.fmuser.org -> suahiili keel
sv.fmuser.org -> rootsi keel
th.fmuser.org -> Tai
tr.fmuser.org -> türgi keel
uk.fmuser.org -> ukrainlane
ur.fmuser.org -> urdu
vi.fmuser.org -> Vietnam
cy.fmuser.org -> kõmri keel
yi.fmuser.org -> Jidiši
FMUSER Wirless edastab videot ja heli lihtsamalt!
Saada sõnum
Aadress:
Nr 305 tuba HuiLan Building No.273 Huanpu Road Guangzhou, Hiina 510620
Kategooriad
Uudiskiri