Staňte se programátorem: Napište si vlastní GOM Player

Přinášíme další díl seriálu o programování v Microsoft .NET Frameworku a jazyku C#. Dnes si napíšeme jednoduchý přehrávač s pomocí komponenty Windows Media Playeru.

V posledních měsících se v souvislosti s kauzou Opera vs. Microsoft při Evropské komisi hodně mluví o tom, co je to vlastně Internet Explorer, jestli je to kompletní program se vším všudy nebo pouze jádro, které je dnes plně integrované do systému a bez něhož by nemohl Windows pracovat tak, jak pracuje.

Podobných jader ale najdete v každém systému několik, v případě Windows se tak mluví třeba i o přehrávači Windows Media Player, jehož systém lze použít jako komponentu při tvorbě programů – včetně těch určených pro platformu Microsoft .NET Framework.

Dnes si tedy s námi budete moci napsat jednoduchý multimediální přehrávač, který bude postavený na jádře Windows Media Player. Výrazně nám to usnadní práci, veškerou multimediální logiku totiž přenecháme jádru a sami se postaráme pouze o GUI našeho přehrávače.

Klepněte pro větší obrázek  Klepněte pro větší obrázek
Přehrávání videa a hudby, komponenta si zachová kontextovou nabídku z Windows Media Playeru

Náš „Media Player“ nabídne otevření souboru na lokálním disku nebo na sítí včetně internetových streamů a obdaříme jej i jednoduchým „progressbarem“, který bude indikovat pozici ve videu. Na komponentě Windows Media Player můžete podobným způsobem postavit celkem robustní přehrávač i bez potřeby znalosti složitého programování – dalším krokem by tak mohlo být jednoduché vykreslování titulků podle časomíry nebo aktuálně zobrazeného rámce videa, podpora playlistů, skinů aj.

Klepněte pro větší obrázek  Klepněte pro větší obrázek
Přehrávač si poradí i s přehráváním internetových streamů

Komponentu Windows Media Player lze použít jako jakoukoliv jinou komponentu z panelu ToolBox. Tato komponenta zde však uložena není, pro její přidání je nutné kliknout pravým tlačítkem na ToolBox->Choose Items ->COM Components a zde je potřeba vybrat komponentu Windows Media Player.

Tato komponenta bude v ToolBoxu uložena pod názvem AxWindowsMediaPlayer.

Následně komponentu přetáhněte na formulář a nastavte libovolné umístění, rozměry, dokování, zakotvení apod. Pro odstranění tlačítek WMP na formuláři nastavíme vlastnost uiMode komponenty na hodnotu „none“:

this.axWindowsMediaPlayer3.uiMode = "none";

Jak přehrát video na pevném disku

Pro přehrání určitého souboru je nutné jeho adresu či cestu přiřadit jako parametr vlastnosti URL komponenty AxWindowsMediaPlayer. Jednotlivé funkce přehrávače (play,stop, pause, forward, reward apod.) nám zpřístupňuje vlastnost Ctlcontrols vracející objekt IWMPControls, jehož metody požadované úkony provádějí.

pozice = 0;
this.delkaUkazatele = 0;
// Zobrazí dialog pro výběr souboru:
OpenFileDialog opf = new OpenFileDialog();
if (opf.ShowDialog() == DialogResult.OK)
{
    // Nastaví soubor, jež má být přehráván
    axWindowsMediaPlayer3.URL = opf.FileName;
    // Přehraje soubor
    axWindowsMediaPlayer3.Ctlcontrols.play();
    // Jako text titulkové lišty nastaví název přehrávaného snímku
    this.Text = axWindowsMediaPlayer3.currentMedia.name;
    // Započne vykreslování ukazatele v časových intervalech
    timer1.Start();
}

Jak vykreslit aktuální pozici videa

Pro vykreslení aktuální pozice přehrávané nahrávky nám poslouží událost Paint daného panelu, na němž jsou umístěna tlačítka. Tato událost je vyvolána vždy v případě, že se změní rozměry panelu, jelikož se při změně rozměrů panelu musí změnit také úsečka představující aktuální pozici přehrávané nahrávky tak, aby jejich poměr byl zachován s předchozím stavem. Samotnou úsečku vykreslíme metodou DrawLine třídy System.Drawing.Graphics, která je argumentem události Paint.

Klepněte pro větší obrázek
Indikace průběhu videa nebo hudební nahrávky

private void panel1_Paint(object sender, PaintEventArgs e)
{
    try
    {
      // Metoda DrawLine třídy System.Drawing.Graphics slouží
      // k vykreslení obyčejné úsečky
      e.Graphics.DrawLine(new Pen(Color.White,4),125+(int)((double)(this.Width - 440)/3.6),
                                                     16, this.delkaUkazatele, 16);
    }
  catch { }
}

Událost Paint musí být taktéž zavolána v pravidelných časových intervalech (v našem případě to je jedna sekunda) tak, aby uživatel vždy viděl aktuální pozici přehrávané nahrávky.

private void timer1_Tick(object sender, EventArgs e)
{
    // Každou sekundu se prodlouží úsečka představující pozici nahrávky
    pozice++;
    // Vypočte delku úsečky představující aktuální pozici přehráváné nahrávky
    double delka = axWindowsMediaPlayer3.currentMedia.duration;
    double pomer = 1 / (delka / pozice);
    double delkaMerky =(int)(this.Width * 0.58);
    this.delkaUkazatele = 125 + (int)((double)(this.Width - 440) / 3.6) + 
                       (int)(delkaMerky * pomer);

    panel1.Refresh();
    // Vykreslí úsečku
    panel1_Paint(this,new PaintEventArgs(panel1.CreateGraphics(),new Rectangle(0,0,
    panel1.Width,panel1.Height)));
}

Jak přehrát streamované video z internetu

Chceme-li přehrát nahrávku umístěnou na webu, použijeme stejný postup jako u nahrávky uložené na disku, tj. vlastnosti URL komponenty AxWindowsMediaPlayer přiřadíme webovou adresu a následně metodou Ctlcontrols.play nahrávku přehrajeme. Pokud si přejeme nahrávku stáhnout do určitého adresáře, využijeme k tomu třídu System.Net.WebClient a její metodu DownloadFileAsync. Tato metoda stáhne soubor asynchronně, což znamená, že se bude soubor stahovat na pozadí aplikace zatímco se bude soubor přehrávat.

Klepněte pro větší obrázek
Dialog pro spuštění videa na internetu

// Přehraje nahrávku z webu
f.axWindowsMediaPlayer3.URL =textBox1.Text;
f.axWindowsMediaPlayer3.Ctlcontrols.play();
// Pokud je zaškrtávací políčko zaškrtnuto, bude
// nahrávka stažena do vybraného adresáře
if (checkBox1.Checked)
{
    SaveFileDialog svf = new SaveFileDialog();
    if (svf.ShowDialog() == DialogResult.OK)
 
{
        WebClient wc = new WebClient();
        wc.DownloadFileAsync(new Uri(textBox1.Text),svf.FileName);
     }
}

S komponentami to jde rychleji

Napsat vlastní jádro webového prohlížeče nebo multimediálního přehrávače je poměrně složitý a několikaletý proces. S podobnými komponentami si ale můžete postavit přehrávač na tělo během jednoho víkendového odpoledne. Napsat systém, který k videu připojí titulky nebo bude schopen pracovat s playlisty je pak už otázkou relativně jednoduchých úprav zdrojového kódu.

Na závěr samozřejmě nesmí chybět přeložený program pro Windows a kompletní zdrojové kódy včetně projektu pro bezplatné vývojové prostředí Microsoft Visual C# 2008 Express Edition.

Diskuze (31) Další článek: Logitech Cooling Pad N100 – záchrana plodnosti notebookářů?

Témata článku: Programování, Hudba, filmy, seriály, WC, Catch, Nápis, Media Player, Robustní tělo, Toolbox, Sekunda, Zaškrtávací políčko, Předchozí stav, Přehrávané video, Pozice, Windows Media Player, Podobný dialog, Forward, VLA, Jednoduchá pozice, Programátor, Úsečka, Double


Určitě si přečtěte

Nové názvy, upravený vývoj. Microsoft ukázal, jak teď bude vydávat Windows 10

Nové názvy, upravený vývoj. Microsoft ukázal, jak teď bude vydávat Windows 10

** Podzimní vydání Windows 10 přinese jen minimum novinek ** Aktualizace ponese formální označení 20H2 ** Microsoft mění názvy v programu Windows Insider

Lukáš Václavík | 17

12 netradičních map České republiky, které jste ještě nikdy neviděli

12 netradičních map České republiky, které jste ještě nikdy neviděli

** Tušíte, kolik je u nás hřbitovů a jak jsou velké? ** Dokážete si představit mapu českých řek a potoků? ** Udělali jsme to všechno za vás nad daty ČÚZK

Jakub Čížek | 10

Z rozmazané šmouhy krásná fotka. Takhle kouzlí nová umělá inteligence MyHeritage

Z rozmazané šmouhy krásná fotka. Takhle kouzlí nová umělá inteligence MyHeritage

** MyHeritage slibuje nejlepší neuronovou síť pro vylepšování fotek ** Funguje tím líp, čím horší fotku upravuje ** Otestovali jsme desítky různých snímků

Marek Lutonský, Lukáš Václavík | 39

Testy procesorů Intel Comet Lake pro desktopy jsou venku. Teď už je jasné, jakého dostaly Ryzeny soupeře

Testy procesorů Intel Comet Lake pro desktopy jsou venku. Teď už je jasné, jakého dostaly Ryzeny soupeře

** Embargo pro testy nových desktopových procesorů Comet Lake od Intelu skončilo ** Spousta recenzí a testů ukazuje výhody a nevýhody nových modelů ** Dokáží nové procesory konkurovat modelům od AMD?

Karel Javůrek | 47

Zahodil jsem Windows, přešel na Linux a nezbláznil se z toho

Zahodil jsem Windows, přešel na Linux a nezbláznil se z toho

** Měsíc jsem se nedotkl Windows a byl závislý jen na Linuxu ** Jaká byla pozitiva a negativa přechodu? ** Se kterými aplikacemi jsem (ne)zápasil a které bych doporučil?

Lukáš Václavík | 233


Aktuální číslo časopisu Computer

Megatest: nejlepší notebooky do 20 000 Kč

Test 8 levných IP kamer

Jak vybrat bezdrátová sluchátka

Testujeme Android 11