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


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

Bitcoin: analýza jeho ceny a prognóza, kam se může ubírat

Bitcoin: analýza jeho ceny a prognóza, kam se může ubírat

** Podívejte se na několik různých pohledů na cenu Bitcoinu ** Různé predikce se často silně rozcházely, teď se ale celkem shodují ** Pravděpodobný je krátkodobý pokles, ale dlouhodobý růst

Martin Miksa | 56

Kdyby dnes USA vypnuly GPS, možná byste si toho na mobilu ani nevšimli

Kdyby dnes USA vypnuly GPS, možná byste si toho na mobilu ani nevšimli

** Satelitní navigaci jsme si zvykli říkat podle americké předlohy GPS ** Dnešní telefony ale používají také evropský, ruský a čínský systém ** Kdyby USA nyní vypnuly GPS, možná byste to ani nepoznali

Jakub Čížek | 48

Jak zpomalit Windows: Tipy na osvědčené brzdy, které vás zastaví v práci

Jak zpomalit Windows: Tipy na osvědčené brzdy, které vás zastaví v práci

** Hledali jsme činnosti, které zpomalují počítač s Windows ** Chcete mít počítač co nejrychlejší? Dělejte všechno přesně naopak!

Jakub Čížek, Vladislav Kluska | 42



Aktuální číslo časopisu Computer

Velký test Wi-Fi mesh

Nejlepší hodinky pro všechny aktivity

Důležité aplikace na cesty

Jak streamovat video na Twitch