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, Přehrávané video, VLA, WC, Media Player, Robustní tělo, Podobný dialog, Programátor, Forward, Pozice, Sekunda, Double, Zaškrtávací políčko, Toolbox, Catch, Jednoduchá pozice, Windows Media Player, Úsečka


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

Jak a proč používat alternativní DNS: Zrychlí internet a odblokuje weby

Jak a proč používat alternativní DNS: Zrychlí internet a odblokuje weby

** Alternativní DNS servery mohou zpříjemnit surfování na internetu ** Existuje několik ověřených alternativ, nejen známé DNS od Googlu ** Alternativní DNS však mají i své nevýhody, pozor na ně

Petr Březina | 33

Intel vs. AMD: souboj vícejádrových procesorů začal. AMD zesměšňuje Intel neuvěřitelně nízkou cenou

Intel vs. AMD: souboj vícejádrových procesorů začal. AMD zesměšňuje Intel neuvěřitelně nízkou cenou

** AMD představilo nové levné procesory až s 32jádry ** AMD útočí na serverový i domácí trh Intelu ** Intel nemá konkurenceschopnou nabídku

Karel Javůrek | 85

Nvidia představila nové grafické karty GeForce RTX. Nastavila šílené ceny a chce přesvědčit ray tracingem

Nvidia představila nové grafické karty GeForce RTX. Nastavila šílené ceny a chce přesvědčit ray tracingem

** Nvidia představila nové desktopové herní grafické karty GeForce RTX ** Tři modely se pyšní masivním výkonem pouze ve spojení s ray tracingem ** Ceny jsou mnohem vyšší než u předchozích generací

Karel Javůrek | 106

Šmírování kamerami Googlu: Koukněte se, co zachytily na Street View

Šmírování kamerami Googlu: Koukněte se, co zachytily na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 44


Aktuální číslo časopisu Computer

Megatest: 13 grafických karet

Srovnání 7 dokovacích stanic s USB-C

Jak na perfektní noční fotografie

Kvalitní zdroje informací pro sebevzdělávání