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

UPC překopli páteřní kabel. V Brně i druhý den nejede internet ani kabelovka

UPC překopli páteřní kabel. V Brně i druhý den nejede internet ani kabelovka

** V Brně byl velký výpadek služeb UPC ** Důvodem je překopnutý páteřní kabel ** V některých lokalitách služby stále nefungují

5.  12.  2016 | Jakub Čížek | 102

17 expertek Microsoftu předpovědělo rok 2027. Splní se alespoň něco?

17 expertek Microsoftu předpovědělo rok 2027. Splní se alespoň něco?

** Zmizí klasické vyhledávače ** Budeme programovat buňky ** Kvantové počítače překonají šifry

6.  12.  2016 | Jakub Čížek | 36

11 tipů na dobrý stolní počítač: od základu po herní mašiny

11 tipů na dobrý stolní počítač: od základu po herní mašiny

** Postavte si stolní počítač! Máme pro vás 11 vzorových sestav s rozpisem komponent ** Většina tipů cílí na hráče, věnujeme se ale i základnímu PC a počítačům na střih videa ** Nadělte si nový počítač třeba pod stromeček

5.  12.  2016 | Adam Kahánek | 74

Nejlepší notebooky nad 20 tisíc: poradíme, které teď chcete

Nejlepší notebooky nad 20 tisíc: poradíme, které teď chcete

** V notebooku s cenou nad 20 tisíc nesmí chybět kvalitní displej a rychlé úložiště ** Za dalších deset tisíc můžete dostat navíc styl nebo výkonnější komponenty ** Vybírat můžete z různých velikostí i konstrukcí

8.  12.  2016 | Stanislav Janů | 82


reklama