reklama

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.

Témata článku: Programování, Hudba, filmy, seriály, Media Player, Windows Media Player, Double, Toolbox, WC, Catch, Forward

31 komentářů

Nejnovější komentáře

  • AmadeoMares 20. 3. 2009 8:03:18
    Ano jsem v tom nevinně, názvy si nevymýšlím sám. Sám bych takový název...
  • Jan Tomášek 20. 3. 2009 0:24:20
    nazvy si upravuje redakce, mozna je v tom autor tentokrat nevine :-)
  • Jan Tomášek 20. 3. 2009 0:22:54
    a co OpenCL?
reklama
Určitě si přečtěte

Pojďme programovat elektroniku: Sestavíme si mobil a pošleme SMS

Pojďme programovat elektroniku: Sestavíme si mobil a pošleme SMS

** Kolik stál váš mobilní telefon? ** Základní GSM modem koupíte za stovku ** Umí telefonovat, posílat SMS a zvládne i GPRS

13.  1.  2017 | Jakub Čížek | 27

Do nitra zákeřného ransomwaru. Takto vypadá útok na počítače personalistek

Do nitra zákeřného ransomwaru. Takto vypadá útok na počítače personalistek

** Jmenuje se Rolf a chce práci ** Jeho životopis je ale trošku jiný ** Rolf je totiž ransomware

11.  1.  2017 | Jakub Čížek | 44

Auta budoucnosti: V tomto se budete za pár let vozit

Auta budoucnosti: V tomto se budete za pár let vozit

** Velký prostor patřil na letošním veletrhu CES automobilům ** Automobilová budoucnost je elektrická a inteligentní ** Podívejte se, jak je vývoj futuristických autonomních aut daleko

12.  1.  2017 | David Polesný | 34

Český státní blacklist už funguje. Ministerstvo financí se pochlubilo s detaily

Český státní blacklist už funguje. Ministerstvo financí se pochlubilo s detaily

** Dva týdny po Novém roce zajím zeje prázdnotou ** Ministerstvo vydalo metodický pokyn ** Takhle to bude fungovat v praxi

Včera | Jakub Čížek | 41


Aktuální číslo časopisu Computer

99 nejlepších programů pro váš počítač

Zvykejte si na umělou inteligenci

Velké testy PC zdrojů a gamepadů

Alternativní zdroje energie

reklama
reklama