Dynamic Loading Expression Media Player Template and passing parameters by code

Following my previous post on How to pass parameters to the Expression MediaPlayer component by code, here is a solution that builds upon this post to Dynamicaly load the Media Player inside your app and pass parameters to it.

You can test loading of the player here. The source code can also be downloaded here.

The loading and costumization of the parameters is done like this:

// Download the Media Player using WebClient
private void downloadVideoPlayer()
{
    WebClient downloader = new WebClient();
    downloader.OpenReadCompleted += new OpenReadCompletedEventHandler(onDownloadVideoPlayerCompleted);
    downloader.OpenReadAsync(new Uri("MediaPlayerTemplate.xap", UriKind.Relative));
    lblLoadPlayer.Text = "Downloading Media Player";
}

// Once the Media Player is downloaded
private void onDownloadVideoPlayerCompleted(object sender, OpenReadCompletedEventArgs args)
{
    //http://www.silverlighthack.com/post/2008/09/29/Silverlight-2-(RC0-RTM)-Dynamic-Assembly-Loading.aspx
    //http://silverlight.net/learn/learnvideo.aspx?video=65687
    try
    {

        string appManifest = new StreamReader(Application.GetResourceStream(new StreamResourceInfo(args.Result, null), new Uri("AppManifest.xaml",UriKind.Relative)).Stream).ReadToEnd();

        XElement deploymentRoot = XDocument.Parse(appManifest).Root;
        List<XElement> deploymentParts = (from assemblyParts in deploymentRoot.Elements().Elements()
                                select assemblyParts).ToList();

        Assembly asm = null;
        foreach (XElement xElement in deploymentParts)
        {
            string source = xElement.Attribute("Source").Value;
            AssemblyPart asmPart = new AssemblyPart();
            StreamResourceInfo streamInfo = Application.GetResourceStream(new StreamResourceInfo(args.Result, "application/binary"), new Uri(source, UriKind.Relative));
            if (source == "MediaPlayerTemplate.dll")
            {
                asm = asmPart.Load(streamInfo.Stream);
            }
            else asmPart.Load(streamInfo.Stream);
        }



        MediaPlayerTemplate.Page myPlayer = asm.CreateInstance("MediaPlayerTemplate.Page") as MediaPlayerTemplate.Page;
        Dictionary<string,string> dic = new Dictionary<string, string>();
        dic.Add("autoplay", "true");
        dic.Add("enablecaptions", "true");
        dic.Add("muted", "false");
        dic.Add("stretchmode", "0");
        dic.Add("displaytimecode", "false");
        dic.Add("playlist", "<playList><playListItems><playListItem title=\"\" description=\"\" mediaSource=\"silverlight.wmv\" adaptiveStreaming=\"False\" thumbSource=\"\" frameRate=\"23.9760431376968\" width=\"512\" height=\"284\" ><chapters><chapter  position=\"11.256\" title=\"MYMARKER01\" /><chapter  position=\"20.033\" thumbnailSource=\"silverlight_20.033.jpg\" title=\"Capitulo%201\" /><chapter  position=\"45.585\" thumbnailSource=\"silverlight_45.585.jpg\" title=\"Chapter%202\" /><chapter  position=\"58.646\" thumbnailSource=\"silverlight_58.646.jpg\" title=\"Chapter%203\" /><chapter  position=\"72.199\" thumbnailSource=\"silverlight_72.199.jpg\" title=\"Chapter%204\" /></chapters></playListItem></playListItems></playList>");
        myPlayer.StartUp(dic);

        cnvMediaPlayer.Children.Add(myPlayer);
        lblLoadPlayer.Text = "";
        LayoutRoot.UpdateLayout();

    }
    catch (Exception e)
    {
        lblLoadPlayer.Text = "Download Error: " + e.Message;
    }
}

If you download the source code you will need to create your own playlist that points to a a movie of your own and set the thumbnails and chapters as you wish. Check the following line of code inside VideoPlayerHoster, Page.xaml.cs

dic.Add(“playlist”, “<playList>…

The Dynamic loading was implemented by looking at these 2 posts:

http://www.silverlighthack.com/post/2008/09/29/Silverlight-2-(RC0-RTM)-Dynamic-Assembly-Loading.aspx

http://silverlight.net/learn/learnvideo.aspx?video=65687

autor: Tiago Andrade e Silva

Tags: ,

Leave a Reply

ERROR: si-captcha.php plugin says GD image support not detected in PHP!

Contact your web host and ask them why GD image support is not enabled for PHP.

ERROR: si-captcha.php plugin says imagepng function not detected in PHP!

Contact your web host and ask them why imagepng function is not enabled for PHP.


Better Tag Cloud