XAML.cz Magazín moderních technologií založených na XAML

MS Silverlight Media Framework

Napsáno pro Silverlight od Jirka Pénzeš [10.01.2011]

Open source knihovna Microsoft Silverlight Media Framework je určená pro vývojáře, kteří chtějí snadno nasadit multimediální obsah do svých aplikací. Hlavní částí frameworku je mediální přehrávač, který si poradí se spousty video formáty, je vysoce škálovatelný, přizpůsobitelný a v neposlední řadě funkčně velmi robustní. Je určený především pro IIS Smooth Streaming, tedy streamované video. Jádro frameworku volně navazuje na Smooth Streaming klienta (dříve známe jako Smooth Streaming Player Development Kit), na kterém staví a přidává spousty dalších funkcí.

V současnosti je framework ve verzi 2.3, která je zajímavá především svou podporou pro novou mobilní platformu Windows Phone 7.

Co to umí?

Když pomineme samotné přehrávání streamovaného videa, je zde celá řada dalších zajímavých věcí, kterými framework disponuje. Má otevřené API pro další rozšíření a také nově podpora pro pluginy. Poradí si s více zvukovými stopy, kapitoly videa, se skrytými titulky, playlisty a se spousty dalším. Nechybí zde API pro Javascript, pro případ implementace do webových aplikací a také je zde šikovné monitorování bitrate – tuto vlastnost velmi oceníte zejména při ladění aplikace. Od verze 2.0 je framework rozdělen do několika samotných DLL knihoven, aby každý vývojář ke svému projektu mohl připojit jen ty části, které skutečně používá.

Mimo jiné Media Framework ještě umí

  • Logování
  • Podpora pro Microsoft Silverlight Analytics Framework
  • Podpora snadného rozšíření díky implementaci Managed Extensibility Framework (MEF) – Silverlight 4
  • MSI instalátor
  • Medial pluginy - IIS Smooth Streaming, Progressive Download, Windows Media Streaming, …)
  • Možnost předání celého playlistu pomocí jednoho manifestu (XML)
  • Díky novým knihovnám je snadné skinování v MS Blend

Implementace v Silverlight aplikaci

Pro vyzkoušení základních funkcí nemusíme psát téměř žádný kód. Začneme stažením Silverlight Media Framework ze stránek projektu.

Jestliže máte staženo, tak ve Visual Studiu založte nový projekt typu Silverlight aplikace a připojte k ní potřebné reference na knihovny. V našem případě si vystačíme s těmito:

Microsoft.SilverlightMediaFramework.Core.dll
Microsoft.SilverlightMediaFramework.Plugins.dll
Microsoft.SilverlightMediaFramework.Plugins.Progressive.dll
Microsoft.SilverlightMediaFramework.Utilities.dll

Tyto knihovny musíme zaregistrovat v xaml kódu.

xmlns:Core="clr-namespace:Microsoft.SilverlightMediaFramework.Core;assembly=Microsoft.SilverlightMediaFramework.Core" 
xmlns:Media="clr-namespace:Microsoft.SilverlightMediaFramework.Core.Media;assembly=Microsoft.SilverlightMediaFramework.Core"

Nyní již stačí zavolat komponentu a přiřadit k ní nějaké video. Zde může nastat problém. Je očekáván stream ze „světa“. Pokud chcete přehrávat videa, které máte na lokálním počítači – máte dva způsoby jak tyto videa adresovat.

Prvním je zápis adresy ve stylu: “file:///C:/Videa/MujFilm.wmv”. Tento způsob je efektivní a rychlý.

Druhým způsobem je vytvořit ASP.NET aplikaci, kterou spustíte na lokálním IIS serveru a v této aplikaci si zobrazujete svou Silverlight aplikaci. Adresu videa pak zadáváte ve stylem:

String url = "http://localhost:1234/";
url = url + "MujFilm.wmv";

Máte-li připravenou adresu pro video, můžeme se dát do přehrávání. Adresa videa se nastavuje ve vlastnosti Playlist, která je kolekcí, kam vkládáte objekty typu PlaylistItem. Property, která nás u těchto objektů nejvíce zajímá je MediaSource – zde přiřadíme adresu našeho videa.

<Grid x:Name="LayoutRoot" Background="White">
    <Core:SMFPlayer>
        <Core:SMFPlayer.Playlist>
            <Media:PlaylistItem MediaSource="file:///C:/xaml/video.mp4"/>
        </Core:SMFPlayer.Playlist>
    </Core:SMFPlayer>
</Grid>

SMF01

Implementace pro Windows Phone 7

Na mobilní platformě je implementace prakticky identická, jako u klasických Silverlight aplikací. Jen s tím rozdílem, že si musíte stáhnout knihovny přímo určené pro Windows Phone. Najde je na stejné adrese v sekci downloads mezi ostatními odkazy.

Můžete si povšimnout změn názvu jednotlivých knihoven, které ve své struktuře obsahují “Phone”. Přiřaďte k projektu následující reference na tyto knihovny:

Microsoft.SilverlightMediaFramework.Compatibility.Phone.dll
Microsoft.SilverlightMediaFramework.Core.Phone.dll
Microsoft.SilverlightMediaFramework.Plugins.Phone.dll
Microsoft.SilverlightMediaFramework.Plugins.Progressive.Phone.dll
Microsoft.SilverlightMediaFramework.Plugins.SmoothStreaming.Phone.dll
Microsoft.SilverlightMediaFramework.Utilities.Phone.dll 

V případě Windows Phone je ještě zapotřebí stáhnout knihovnu Microsoft.Web.Media.SmoothStreaming.dll , která je součástí Smooth Streaming Development Kit.

Pokud již máte knihovny přidané, musíme v xaml souboru přidat potřebné reference.

xmlns:Core="clr-namespace:Microsoft.SilverlightMediaFramework.Core;assembly=Microsoft.SilverlightMediaFramework.Core.Phone" 
xmlns:Media="clr-namespace:Microsoft.SilverlightMediaFramework.Core.Media;assembly=Microsoft.SilverlightMediaFramework.Core.Phone"  

Přidejte komponentu do své aplikace a nastavte MediaSource na video. Nyní jako zdroj dat pro video používám odkaz na manifest. Než aplikaci spustíte, povolte ještě Landscape režim telefonu.

<Core:SMFPlayer>
    <Core:SMFPlayer.Playlist>
        <Media:PlaylistItem DeliveryMethod="AdaptiveStreaming" MediaSource="http://ecn.channel9.msdn.com/o9/content/smf/smoothcontent/bbbwp7/big buck bunny.ism/manifest"/>
    </Core:SMFPlayer.Playlist>
</Core:SMFPlayer> 

SMF03

 

TimelineMediaMarker

Pěknou maličkostí, kterou přehrávač umí je přidávání značek do časové linie videa. Můžete tak například označovat zajímavé místa ve videu nebo upozorňovat na nové kapitoly.
Implementace spočívá pouze v přidání TimelineMarkers, který je součástí položky playlistu – PlaylistItem. Opět se ale jedná o kolekci, neboť značek můžete přidávat dle vaší uváženosti. Do kolekce stačí přidat TimelineMediaMarker, kterému nastavíte začátek (begin) a konec (end) – tak označíte úsek videa. Můžete nastavit i Content, který se zobrazí, pokud na značku nejedete myší.

<Grid x:Name="LayoutRoot" Background="White">
    <Core:SMFPlayer Margin="0">
        <Core:SMFPlayer.Playlist>
                <Media:PlaylistItem MediaSource="file:///C:/xaml/video.mp4">
                    <Media:PlaylistItem.TimelineMarkers>
                        <Media:TimelineMediaMarker Begin="00:01:30" End="00:02:00" Content="Nejlepší část videa" />          
                    </Media:PlaylistItem.TimelineMarkers>
                </Media:PlaylistItem>
            </Core:SMFPlayer.Playlist>
    </Core:SMFPlayer>
</Grid>

SMF04

Závěrem

Microsoft Silverlight Media Framework se velmi povedl a díky stálému vývoji se tento balík posouvá více a více dopředu a nabaluje na sebe spousty funkcí a vychytávek. Díky otevření API a možnosti pluginování vznikají nyní i frameworky třetích stran, které přidávají další možnosti – například sledování (analytics) či logování. Nová dostupnost pro mobilní platformu Windows Phone otevírá další možnosti použití tohoto frameworku.

Komentáře

ukládám komentář, vyčkejte prosím..
  1. Měl bych dotaz k téhle větě:

    "Prvním je zápis adresy ve stylu: “file:///C:/Videa/MujFilm.wmv”. Tento způsob je efektivní a rychlý".

    To se mi zdá trošku divné, protože ze SL aplikace se normálně na disk nedostaneš, jedině pokud je OOB (Out Of Browser) nebo to má ten SMF nějak "vychytané" ?

    Dík za odpověd

    10.01.2011 @ 23:07
  2. Při zápisu “file:///C:/Videa/MujFilm.wmv” nepřistupuješ k disku klasickým způsobem, ale pomocí protokolu file. Proto se na video dostaneš.

    http://msdn.microsoft.com/en-us/library/aa767731(VS.85).aspx

    10.01.2011 @ 23:31
  3. aleksandrj

    Ugh! Where do we find:

    Microsoft.SilverlightMediaFramework.Compatibility.Phone.dll

    Microsoft.SilverlightMediaFramework.Core.Phone.dll

    Microsoft.SilverlightMediaFramework.Plugins.Phone.dll

    Microsoft.SilverlightMediaFramework.Plugins.Progressive.Phone.dll

    Microsoft.SilverlightMediaFramework.Utilities.Phone.dll

    ??????

    02.03.2011 @ 22:07
  4. You need to download this file - smf.codeplex.com/.../57991

    03.03.2011 @ 19:38
  5. AL3s

    Snažím se přijít na problém už několik dní, ale nedaří se...

    Vytvořím SMF smooth streaming app s defaultním kódem:

    <UserControl x:Class="SMF_SmoothStreaming1.MainPage"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

    mc:Ignorable="d"

    d:DesignHeight="300" d:DesignWidth="400"

    xmlns:smf="http://schemas.microsoft.com/smf/2010/xaml/player"

    xmlns:media="clr-namespace:Microsoft.SilverlightMediaFramework.Core.Media;assembly=Microsoft.SilverlightMediaFramework.Core">

    <Grid x:Name="LayoutRoot" Background="White">

    <smf:SMFPlayer>

    <smf:SMFPlayer.Playlist>

    <media:PlaylistItem DeliveryMethod="AdaptiveStreaming" MediaSource="http://video3.smoothhd.com.edgesuite.net/ondemand/Big%20Buck%20Bunny%20Adaptive.ism/Manifest"/>

    </smf:SMFPlayer.Playlist>

    </smf:SMFPlayer>

    </Grid>

    </UserControl>

    Ale nespustí se ani Big bunny, potažmo můj stream na domacím serveru

    Díky za náměty případně řešní problému.

    Alen Gavranovič

    06.04.2011 @ 08:54

@xamlcz

  • RT @jvanrhyn: XAML, It's a bit like olives. Takes a while to get used to. But once you're used to it. It is actually pretty good. <3 XAML
  • RT @moser_christian: WPF Inspector 0.9.7 is released. It supports .NET 3.5 and 4.0 The project is now open source and available on CodeP ...
  • Jeff Handley oznámil vydání WCF RIA Services v.1.0 SP1 RTM http://bit.ly/gOgckn ke stažení na http://bit.ly/gVAXdK
  • jedna výzva pro Brno. Byl někdo z vás na přednášce o RIA v MS Akvárku? Dejte o sobě vědět. Děkuji
  • také jste uvažovali o tom, že zkusíte na projekt použít Caliburn Micro nebo naopak Prism 4? A co tak obojí, šlo by to nebo ne? Již brzy