<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>playerframework Wiki Rss Feed</title><link>http://playerframework.codeplex.com/</link><description>playerframework Wiki Rss Description</description><item><title>New Comment on "Windows 8 Player Documentation"</title><link>https://playerframework.codeplex.com/wikipage?title=Windows 8 Player Documentation&amp;ANCHOR#C27504</link><description>When I try this url in source, it shows xaml error, how to overcome this&amp;#63; Thats a valid Youtube media url,&amp;#10;http&amp;#58;&amp;#47;&amp;#47;r3---sn-ci5gupcc-h55e.c.youtube.com&amp;#47;videoplayback&amp;#63;mv&amp;#61;m&amp;#38;upn&amp;#61;RaIkzguz7Ao&amp;#38;key&amp;#61;yt1&amp;#38;ip&amp;#61;182.65.172.9&amp;#38;itag&amp;#61;18&amp;#38;ratebypass&amp;#61;yes&amp;#38;fexp&amp;#61;927830&amp;#37;2C906436&amp;#37;2C900817&amp;#37;2C916625&amp;#37;2C924605&amp;#37;2C901208&amp;#37;2C929123&amp;#37;2C929915&amp;#37;2C929906&amp;#37;2C925714&amp;#37;2C929119&amp;#37;2C931202&amp;#37;2C928017&amp;#37;2C912518&amp;#37;2C911416&amp;#37;2C906906&amp;#37;2C904476&amp;#37;2C930807&amp;#37;2C919373&amp;#37;2C906836&amp;#37;2C933701&amp;#37;2C900345&amp;#37;2C912711&amp;#37;2C929606&amp;#37;2C910075&amp;#38;newshard&amp;#61;yes&amp;#38;sparams&amp;#61;cp&amp;#37;2Cid&amp;#37;2Cip&amp;#37;2Cipbits&amp;#37;2Citag&amp;#37;2Cratebypass&amp;#37;2Csource&amp;#37;2Cupn&amp;#37;2Cexpire&amp;#38;source&amp;#61;youtube&amp;#38;mt&amp;#61;1368731727&amp;#38;cp&amp;#61;U0hVTVdQVV9LT0NONV9PSllBOnl4Xzhnbi03MEh0&amp;#38;ipbits&amp;#61;8&amp;#38;sver&amp;#61;3&amp;#38;ms&amp;#61;au&amp;#38;expire&amp;#61;1368757065&amp;#38;id&amp;#61;0b61bacdd18f1992&amp;#38;signature&amp;#61;5CE55BBFF663DCBA779643C7AF341F487302EDA8.B2ED60E3E4242276E12DB84AFA60544839D5D596&amp;#38;title&amp;#61;Grown&amp;#37;20Ups&amp;#37;202&amp;#37;20-&amp;#37;20Official&amp;#37;20Trailer&amp;#37;202&amp;#37;20&amp;#37;5BHD&amp;#37;5D</description><author>Sivze</author><pubDate>Thu, 16 May 2013 19:56:02 GMT</pubDate><guid isPermaLink="false">New Comment on "Windows 8 Player Documentation" 20130516075602P</guid></item><item><title>New Comment on "Getting Started: WP8 Smooth Streaming Player"</title><link>https://playerframework.codeplex.com/wikipage?title=Getting Started: WP8 Smooth Streaming Player&amp;ANCHOR#C27503</link><description>When I try this url in source, it shows xaml error, how to overcome this&amp;#63; Thats a valid Youtube media url,&amp;#10;http&amp;#58;&amp;#47;&amp;#47;r3---sn-ci5gupcc-h55e.c.youtube.com&amp;#47;videoplayback&amp;#63;mv&amp;#61;m&amp;#38;upn&amp;#61;RaIkzguz7Ao&amp;#38;key&amp;#61;yt1&amp;#38;ip&amp;#61;182.65.172.9&amp;#38;itag&amp;#61;18&amp;#38;ratebypass&amp;#61;yes&amp;#38;fexp&amp;#61;927830&amp;#37;2C906436&amp;#37;2C900817&amp;#37;2C916625&amp;#37;2C924605&amp;#37;2C901208&amp;#37;2C929123&amp;#37;2C929915&amp;#37;2C929906&amp;#37;2C925714&amp;#37;2C929119&amp;#37;2C931202&amp;#37;2C928017&amp;#37;2C912518&amp;#37;2C911416&amp;#37;2C906906&amp;#37;2C904476&amp;#37;2C930807&amp;#37;2C919373&amp;#37;2C906836&amp;#37;2C933701&amp;#37;2C900345&amp;#37;2C912711&amp;#37;2C929606&amp;#37;2C910075&amp;#38;newshard&amp;#61;yes&amp;#38;sparams&amp;#61;cp&amp;#37;2Cid&amp;#37;2Cip&amp;#37;2Cipbits&amp;#37;2Citag&amp;#37;2Cratebypass&amp;#37;2Csource&amp;#37;2Cupn&amp;#37;2Cexpire&amp;#38;source&amp;#61;youtube&amp;#38;mt&amp;#61;1368731727&amp;#38;cp&amp;#61;U0hVTVdQVV9LT0NONV9PSllBOnl4Xzhnbi03MEh0&amp;#38;ipbits&amp;#61;8&amp;#38;sver&amp;#61;3&amp;#38;ms&amp;#61;au&amp;#38;expire&amp;#61;1368757065&amp;#38;id&amp;#61;0b61bacdd18f1992&amp;#38;signature&amp;#61;5CE55BBFF663DCBA779643C7AF341F487302EDA8.B2ED60E3E4242276E12DB84AFA60544839D5D596&amp;#38;title&amp;#61;Grown&amp;#37;20Ups&amp;#37;202&amp;#37;20-&amp;#37;20Official&amp;#37;20Trailer&amp;#37;202&amp;#37;20&amp;#37;5BHD&amp;#37;5D</description><author>Sivze</author><pubDate>Thu, 16 May 2013 19:55:35 GMT</pubDate><guid isPermaLink="false">New Comment on "Getting Started: WP8 Smooth Streaming Player" 20130516075535P</guid></item><item><title>Updated Wiki: Documentation</title><link>https://playerframework.codeplex.com/documentation?version=25</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Player Framework Documentation &lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=Windows%208%20Player%20Documentation&amp;referringTitle=Documentation"&gt;Windows 8 Player Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=Windows%20Phone%208%20Player%20Documentation&amp;referringTitle=Documentation"&gt;Windows Phone 8 Player Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=HTML5%20Player&amp;referringTitle=Documentation"&gt;HTML5 Player &amp;#40;browser&amp;#41; Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=Source%20Code%20and%20Build%20Scripts&amp;referringTitle=Documentation"&gt;Source Code and Build Scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://smf.codeplex.com/documentation"&gt;Silverlight &amp;amp; Windows Phone Player Documentation&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timgreenfield</author><pubDate>Fri, 03 May 2013 16:48:42 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20130503044842P</guid></item><item><title>Updated Wiki: Source Code and Build Scripts</title><link>https://playerframework.codeplex.com/wikipage?title=Source Code and Build Scripts&amp;version=6</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Getting the source code&lt;/h1&gt;1. Install the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/abafc7d6-dcaa-40f4-8a5e-d6724bdb980c"&gt;Visual Studio Tools for Git Extension&lt;/a&gt;&lt;br /&gt;2. Find the url for the Git repository via the &lt;a href="http://playerframework.codeplex.com/SourceControl/BrowseLatest"&gt;Source&lt;/a&gt; page:&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=playerframework&amp;DownloadId=674215" alt="git_repo.png" title="git_repo.png" /&gt;&lt;br /&gt;3. In Team Explorer in Visual Studio you can easily clone the Git repository to a local folder:&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=playerframework&amp;DownloadId=674216" alt="git_clone.png" title="git_clone.png" /&gt;&lt;br /&gt;4. Open the desired solution in Visual Studio 2012:
&lt;ul&gt;&lt;li&gt;For Windows 8 Xaml: Microsoft.Win8.PlayerFramework.Xaml.sln&lt;/li&gt;
&lt;li&gt;For Windows 8 JS: Microsoft.Win8.PlayerFramework.Js.sln&lt;/li&gt;
&lt;li&gt;For Windows Phone 8 Xaml: Microsoft.WP8.PlayerFramework.SL.sln&lt;/li&gt;
&lt;li&gt;For HTML5 web browsers: Microsoft.Web.PlayerFramework.Html5.sln&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Requirements to run the source code&lt;/h1&gt;&lt;b&gt;Windows 8 (Xaml and JS)&lt;/b&gt;&lt;br /&gt;Required additional SDKs (these must be installed):
&lt;ul&gt;&lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/04423d13-3b3e-4741-a01c-1ae29e84fea6"&gt;Smooth Streaming Client SDK for Windows 8 Applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/e02ccac7-f3eb-4b53-b11a-c657d5631483"&gt;Microsoft PlayReady Client SDK for Windows 8 Applications&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
Before building:&lt;br /&gt;Change your build configuration to x64 or x86. AnyCPU (the default in Visual Studio) will not work due to dependencies on native libraries.&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=playerframework&amp;DownloadId=674217" alt="build_config1.png" title="build_config1.png" /&gt;&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=playerframework&amp;DownloadId=674218" alt="build_config2.png" title="build_config2.png" /&gt;&lt;br /&gt;Set your startup project to one of the Samples by right clicking on the project and selecting &amp;quot;Set as StartUp Project&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Windows Phone 8 (Xaml and JS)&lt;/b&gt;&lt;br /&gt;Required additional SDKs (these must be installed):
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=29940"&gt;Smooth Streaming Client&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
Set your startup project to Microsoft.WP8.PlayerFramework.SL.Test by right clicking on the project and selecting &amp;quot;Set as StartUp Project&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HTML5 for browsers&lt;/b&gt;&lt;br /&gt;&lt;i&gt;There are no special requirements to run this source&lt;/i&gt;&lt;br /&gt;
&lt;h1&gt;Rebuilding the source code&lt;/h1&gt;&lt;b&gt;Windows 8 and Windows Phone 8&lt;/b&gt;&lt;br /&gt;1. Make sure you have the &lt;a href="http://www.7-zip.org/"&gt;64 bit of 7-Zip&lt;/a&gt; installed on your machine.&lt;br /&gt;2. In your local reprository folder, there is a subfolder called Build. Simply run the batch file &amp;quot;BuildSDKs.bat&amp;quot;. Note, you will have to hit any key to continue a few times before it finishes. When finished, an updated .vsix extension SDK will appear in the Build folder that you can then install to Visual Studio.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HTML5 for web browsers&lt;/b&gt;&lt;br /&gt;In your local repository folder, there is a folder called Web.Html5\Build. Simply run the batch file &amp;quot;build.bat&amp;quot; and it will automatically generate an updated files in Web.Html5\js and Web.Html5\css&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timgreenfield</author><pubDate>Fri, 03 May 2013 16:47:57 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Source Code and Build Scripts 20130503044757P</guid></item><item><title>Updated Wiki: Source Code and Build Scripts</title><link>https://playerframework.codeplex.com/wikipage?title=Source Code and Build Scripts&amp;version=5</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Getting the source code&lt;/h1&gt;1. Install the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/abafc7d6-dcaa-40f4-8a5e-d6724bdb980c"&gt;Visual Studio Tools for Git Extension&lt;/a&gt;&lt;br /&gt;2. Find the url for the Git repository via the &lt;a href="https://playerframework.codeplex.com/wikipage?title=Source&amp;referringTitle=Source%20Code%20and%20Build%20Scripts"&gt;Source&lt;/a&gt; page:&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=playerframework&amp;DownloadId=674215" alt="git_repo.png" title="git_repo.png" /&gt;&lt;br /&gt;3. In Team Explorer in Visual Studio you can easily clone the Git repository to a local folder:&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=playerframework&amp;DownloadId=674216" alt="git_clone.png" title="git_clone.png" /&gt;&lt;br /&gt;4. Open the desired solution in Visual Studio 2012:
&lt;ul&gt;&lt;li&gt;For Windows 8 Xaml: Microsoft.Win8.PlayerFramework.Xaml.sln&lt;/li&gt;
&lt;li&gt;For Windows 8 JS: Microsoft.Win8.PlayerFramework.Js.sln&lt;/li&gt;
&lt;li&gt;For Windows Phone 8 Xaml: Microsoft.WP8.PlayerFramework.SL.sln&lt;/li&gt;
&lt;li&gt;For HTML5 web browsers: Microsoft.Web.PlayerFramework.Html5.sln&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Requirements to run the source code&lt;/h1&gt;&lt;b&gt;Windows 8 (Xaml and JS)&lt;/b&gt;&lt;br /&gt;Required additional SDKs (these must be installed):
&lt;ul&gt;&lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/04423d13-3b3e-4741-a01c-1ae29e84fea6"&gt;Smooth Streaming Client SDK for Windows 8 Applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/e02ccac7-f3eb-4b53-b11a-c657d5631483"&gt;Microsoft PlayReady Client SDK for Windows 8 Applications&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
Before building:&lt;br /&gt;Change your build configuration to x64 or x86. AnyCPU (the default in Visual Studio) will not work due to dependencies on native libraries.&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=playerframework&amp;DownloadId=674217" alt="build_config1.png" title="build_config1.png" /&gt;&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=playerframework&amp;DownloadId=674218" alt="build_config2.png" title="build_config2.png" /&gt;&lt;br /&gt;Set your startup project to one of the Samples by right clicking on the project and selecting &amp;quot;Set as StartUp Project&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Windows Phone 8 (Xaml and JS)&lt;/b&gt;&lt;br /&gt;Required additional SDKs (these must be installed):
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=29940"&gt;Smooth Streaming Client&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
Set your startup project to Microsoft.WP8.PlayerFramework.SL.Test by right clicking on the project and selecting &amp;quot;Set as StartUp Project&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HTML5 for browsers&lt;/b&gt;&lt;br /&gt;&lt;i&gt;There are no special requirements to run this source&lt;/i&gt;&lt;br /&gt;
&lt;h1&gt;Rebuilding the source code&lt;/h1&gt;&lt;b&gt;Windows 8 and Windows Phone 8&lt;/b&gt;&lt;br /&gt;1. Make sure you have the &lt;a href="http://www.7-zip.org/"&gt;64 bit of 7-Zip&lt;/a&gt; installed on your machine.&lt;br /&gt;2. In your local reprository folder, there is a subfolder called Build. Simply run the batch file &amp;quot;BuildSDKs.bat&amp;quot;. Note, you will have to hit any key to continue a few times before it finishes. When finished, an updated .vsix extension SDK will appear in the Build folder that you can then install to Visual Studio.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HTML5 for web browsers&lt;/b&gt;&lt;br /&gt;In your local repository folder, there is a folder called Web.Html5\Build. Simply run the batch file &amp;quot;build.bat&amp;quot; and it will automatically generate an updated files in Web.Html5\js and Web.Html5\css&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timgreenfield</author><pubDate>Fri, 03 May 2013 16:47:04 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Source Code and Build Scripts 20130503044704P</guid></item><item><title>Updated Wiki: Source Code and Build Scripts</title><link>https://playerframework.codeplex.com/wikipage?title=Source Code and Build Scripts&amp;version=4</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Getting the source code&lt;/h1&gt;1. Install the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/abafc7d6-dcaa-40f4-8a5e-d6724bdb980c"&gt;Visual Studio Tools for Git Extension&lt;/a&gt;&lt;br /&gt;2. Find the url for the Git repository via the &lt;a href="https://playerframework.codeplex.com/wikipage?title=Source&amp;referringTitle=Source%20Code%20and%20Build%20Scripts"&gt;Source&lt;/a&gt; page:&lt;br /&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=imge%3agit_repo.png&amp;referringTitle=Source%20Code%20and%20Build%20Scripts"&gt;imge&amp;#58;git_repo.png&lt;/a&gt;&lt;br /&gt;3. In Team Explorer in Visual Studio you can easily clone the Git repository to a local folder:&lt;br /&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=imge%3agit_clone.png&amp;referringTitle=Source%20Code%20and%20Build%20Scripts"&gt;imge&amp;#58;git_clone.png&lt;/a&gt;&lt;br /&gt;4. Open the desired solution in Visual Studio 2012:
&lt;ul&gt;&lt;li&gt;For Windows 8 Xaml: Microsoft.Win8.PlayerFramework.Xaml.sln&lt;/li&gt;
&lt;li&gt;For Windows 8 JS: Microsoft.Win8.PlayerFramework.Js.sln&lt;/li&gt;
&lt;li&gt;For Windows Phone 8 Xaml: Microsoft.WP8.PlayerFramework.SL.sln&lt;/li&gt;
&lt;li&gt;For HTML5 web browsers: Microsoft.Web.PlayerFramework.Html5.sln&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Requirements to run the source code&lt;/h1&gt;&lt;b&gt;Windows 8 (Xaml and JS)&lt;/b&gt;&lt;br /&gt;Required additional SDKs (these must be installed):
&lt;ul&gt;&lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/04423d13-3b3e-4741-a01c-1ae29e84fea6"&gt;Smooth Streaming Client SDK for Windows 8 Applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/e02ccac7-f3eb-4b53-b11a-c657d5631483"&gt;Microsoft PlayReady Client SDK for Windows 8 Applications&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
Before building:&lt;br /&gt;Change your build configuration to x64 or x86. AnyCPU (the default in Visual Studio) will not work due to dependencies on native libraries.&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=playerframework&amp;DownloadId=674217" alt="build_config1.png" title="build_config1.png" /&gt;&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=playerframework&amp;DownloadId=674218" alt="build_config2.png" title="build_config2.png" /&gt;&lt;br /&gt;Set your startup project to one of the Samples by right clicking on the project and selecting &amp;quot;Set as StartUp Project&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Windows Phone 8 (Xaml and JS)&lt;/b&gt;&lt;br /&gt;Required additional SDKs (these must be installed):
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=29940"&gt;Smooth Streaming Client&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
Set your startup project to Microsoft.WP8.PlayerFramework.SL.Test by right clicking on the project and selecting &amp;quot;Set as StartUp Project&amp;quot;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HTML5 for browsers&lt;/b&gt;&lt;br /&gt;&lt;i&gt;There are no special requirements to run this source&lt;/i&gt;&lt;br /&gt;
&lt;h1&gt;Rebuilding the source code&lt;/h1&gt;&lt;b&gt;Windows 8 and Windows Phone 8&lt;/b&gt;&lt;br /&gt;1. Make sure you have the &lt;a href="http://www.7-zip.org/"&gt;64 bit of 7-Zip&lt;/a&gt; installed on your machine.&lt;br /&gt;2. In your local reprository folder, there is a subfolder called Build. Simply run the batch file &amp;quot;BuildSDKs.bat&amp;quot;. Note, you will have to hit any key to continue a few times before it finishes. When finished, an updated .vsix extension SDK will appear in the Build folder that you can then install to Visual Studio.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;HTML5 for web browsers&lt;/b&gt;&lt;br /&gt;In your local repository folder, there is a folder called Web.Html5\Build. Simply run the batch file &amp;quot;build.bat&amp;quot; and it will automatically generate an updated files in Web.Html5\js and Web.Html5\css&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timgreenfield</author><pubDate>Fri, 03 May 2013 16:46:49 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Source Code and Build Scripts 20130503044649P</guid></item><item><title>Updated Wiki: Source Code and Build Scripts</title><link>https://playerframework.codeplex.com/wikipage?title=Source Code and Build Scripts&amp;version=3</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Getting the source code&lt;/h1&gt;1. Install the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/abafc7d6-dcaa-40f4-8a5e-d6724bdb980c"&gt;Visual Studio Tools for Git Extension&lt;/a&gt;&lt;br /&gt;2. Find the url for the Git repository via the &lt;a href="https://playerframework.codeplex.com/wikipage?title=Source&amp;referringTitle=Source%20Code%20and%20Build%20Scripts"&gt;Source&lt;/a&gt; page:&lt;br /&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=imge%3agit_repo.png&amp;referringTitle=Source%20Code%20and%20Build%20Scripts"&gt;imge&amp;#58;git_repo.png&lt;/a&gt;&lt;br /&gt;3. In Team Explorer in Visual Studio you can easily clone the Git repository to a local folder:&lt;br /&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=imge%3agit_clone.png&amp;referringTitle=Source%20Code%20and%20Build%20Scripts"&gt;imge&amp;#58;git_clone.png&lt;/a&gt;&lt;br /&gt;4. Open the desired solution in Visual Studio 2012:
&lt;ul&gt;&lt;li&gt;For Windows 8 Xaml: Microsoft.Win8.PlayerFramework.Xaml.sln&lt;/li&gt;
&lt;li&gt;For Windows 8 JS: Microsoft.Win8.PlayerFramework.Js.sln&lt;/li&gt;
&lt;li&gt;For Windows Phone 8 Xaml: Microsoft.WP8.PlayerFramework.SL.sln&lt;/li&gt;
&lt;li&gt;For HTML5 web browsers: Microsoft.Web.PlayerFramework.Html5.sln&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Requirements to run the source code&lt;/h1&gt;&lt;h2&gt;Windows 8 (Xaml and JS)&lt;/h2&gt;Required additional SDKs (these must be installed):
&lt;ul&gt;&lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/04423d13-3b3e-4741-a01c-1ae29e84fea6"&gt;Smooth Streaming Client SDK for Windows 8 Applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/e02ccac7-f3eb-4b53-b11a-c657d5631483"&gt;Microsoft PlayReady Client SDK for Windows 8 Applications&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
Before building:&lt;br /&gt;Change your build configuration to x64 or x86. AnyCPU (the default in Visual Studio) will not work due to dependencies on native libraries.&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=playerframework&amp;DownloadId=674217" alt="build_config1.png" title="build_config1.png" /&gt;&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=playerframework&amp;DownloadId=674218" alt="build_config2.png" title="build_config2.png" /&gt;&lt;br /&gt;Set your startup project to one of the Samples by right clicking on the project and selecting &amp;quot;Set as StartUp Project&amp;quot;&lt;br /&gt;
&lt;h2&gt;Windows Phone 8 (Xaml and JS)&lt;/h2&gt;Required additional SDKs (these must be installed):
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=29940"&gt;Smooth Streaming Client&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
Set your startup project to Microsoft.WP8.PlayerFramework.SL.Test by right clicking on the project and selecting &amp;quot;Set as StartUp Project&amp;quot;&lt;br /&gt;
&lt;h2&gt;HTML5 for browsers&lt;/h2&gt;&lt;i&gt;There are no special requirements to run this source&lt;/i&gt;&lt;br /&gt;
&lt;h1&gt;Rebuilding the source code&lt;/h1&gt;&lt;h2&gt;Windows 8 and Windows Phone 8&lt;/h2&gt;1. Make sure you have the &lt;a href="http://www.7-zip.org/"&gt;64 bit of 7-Zip&lt;/a&gt; installed on your machine.&lt;br /&gt;2. In your local reprository folder, there is a subfolder called Build. Simply run the batch file &amp;quot;BuildSDKs.bat&amp;quot;. Note, you will have to hit any key to continue a few times before it finishes. When finished, an updated .vsix extension SDK will appear in the Build folder that you can then install to Visual Studio.&lt;br /&gt;
&lt;h2&gt;HTML5 for web browsers&lt;/h2&gt;In your local repository folder, there is a folder called Web.Html5\Build. Simply run the batch file &amp;quot;build.bat&amp;quot; and it will automatically generate an updated files in Web.Html5\js and Web.Html5\css&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timgreenfield</author><pubDate>Fri, 03 May 2013 16:46:08 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Source Code and Build Scripts 20130503044608P</guid></item><item><title>Updated Wiki: Source Code and Build Scripts</title><link>https://playerframework.codeplex.com/wikipage?title=Source Code and Build Scripts&amp;version=2</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Getting the source code&lt;/h1&gt;1. Install the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/abafc7d6-dcaa-40f4-8a5e-d6724bdb980c"&gt;Visual Studio Tools for Git Extension&lt;/a&gt;&lt;br /&gt;2. Find the url for the Git repository via the &lt;a href="https://playerframework.codeplex.com/wikipage?title=Source&amp;referringTitle=Source%20Code%20and%20Build%20Scripts"&gt;Source&lt;/a&gt; page:&lt;br /&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=imge%3agit_repo.png&amp;referringTitle=Source%20Code%20and%20Build%20Scripts"&gt;imge&amp;#58;git_repo.png&lt;/a&gt;&lt;br /&gt;3. In Team Explorer in Visual Studio you can easily clone the Git repository to a local folder:&lt;br /&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=imge%3agit_clone.png&amp;referringTitle=Source%20Code%20and%20Build%20Scripts"&gt;imge&amp;#58;git_clone.png&lt;/a&gt;&lt;br /&gt;4. Open the desired solution in Visual Studio 2012:
&lt;ul&gt;&lt;li&gt;For Windows 8 Xaml: Microsoft.Win8.PlayerFramework.Xaml.sln&lt;/li&gt;
&lt;li&gt;For Windows 8 JS: Microsoft.Win8.PlayerFramework.Js.sln&lt;/li&gt;
&lt;li&gt;For Windows Phone 8 Xaml: Microsoft.WP8.PlayerFramework.SL.sln&lt;/li&gt;
&lt;li&gt;For HTML5 web browsers: Microsoft.Web.PlayerFramework.Html5.sln&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Requirements to run the source code&lt;/h1&gt;&lt;h2&gt;Windows 8 (Xaml and JS)&lt;/h2&gt;Required additional SDKs (these must be installed):
&lt;ul&gt;&lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/04423d13-3b3e-4741-a01c-1ae29e84fea6"&gt;Smooth Streaming Client SDK for Windows 8 Applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/e02ccac7-f3eb-4b53-b11a-c657d5631483"&gt;Microsoft PlayReady Client SDK for Windows 8 Applications&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
Before building:&lt;br /&gt;Change your build configuration to x64 or x86. AnyCPU (the default in Visual Studio) will not work due to dependencies on native libraries.&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=playerframework&amp;DownloadId=674217" alt="build_config1.png" title="build_config1.png" /&gt;&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=playerframework&amp;DownloadId=674218" alt="build_config2.png" title="build_config2.png" /&gt;&lt;br /&gt;Set your startup project to one of the Samples by right clicking on the project and selecting &amp;quot;Set as StartUp Project&amp;quot;&lt;br /&gt;
&lt;h2&gt;Windows Phone 8 (Xaml and JS)&lt;/h2&gt;Required additional SDKs (these must be installed):
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=29940"&gt;Smooth Streaming Client&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
Set your startup project to Microsoft.WP8.PlayerFramework.SL.Test by right clicking on the project and selecting &amp;quot;Set as StartUp Project&amp;quot;&lt;br /&gt;
&lt;h2&gt;HTML5 for browsers&lt;/h2&gt;&lt;i&gt;There are no special requirements to run this source&lt;/i&gt;&lt;br /&gt;
&lt;h1&gt;Rebuilding the source code&lt;/h1&gt;&lt;h2&gt;Windows 8 and Windows Phone 8&lt;/h2&gt;1. Make sure you have the &lt;a href="http://www.7-zip.org/"&gt;64 bit of 7-Zip&lt;/a&gt; installed on your machine.&lt;br /&gt;2. In your local reprository folder, there is a subfolder called Build. Simply run the batch file &amp;quot;BuildSDKs.bat&amp;quot;. Note, you will have to hit any key to continue a few times before it finishes. When finished, an updated .vsix extension SDK will appear in the Build folder that you can then install to Visual Studio.&lt;br /&gt;
&lt;h2&gt;HTML5 for web browsers&lt;/h2&gt;In your local reprository folder, there is a folder called Web.Html5\Build. Simply run the batch file &amp;quot;build.bat&amp;quot; and it will automatically generate an updated files in Web.Html5\js and Web.Html5\css&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timgreenfield</author><pubDate>Fri, 03 May 2013 16:45:51 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Source Code and Build Scripts 20130503044551P</guid></item><item><title>Updated Wiki: Source Code and Build Scripts</title><link>https://playerframework.codeplex.com/wikipage?title=Source Code and Build Scripts&amp;version=1</link><description>&lt;div class="wikidoc"&gt;placeholder&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timgreenfield</author><pubDate>Fri, 03 May 2013 16:24:25 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Source Code and Build Scripts 20130503042425P</guid></item><item><title>Updated Wiki: JavaScript API Reference</title><link>https://playerframework.codeplex.com/wikipage?title=JavaScript API Reference&amp;version=13</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;MediaPlayer&lt;/h1&gt;
&lt;h2&gt;Properties&lt;/h2&gt;
&lt;b&gt;advertisingState&lt;/b&gt; &lt;i&gt;(type: PlayerFramework.AdvertisingState, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the current advertising state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;audioTracks&lt;/b&gt; &lt;i&gt;(type: Array, read/write)&lt;/i&gt;&lt;br /&gt;Gets the audio tracks for the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;autobuffer&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that indicates whether to automatically start buffering the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;autohide&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether interactive elements (e.g. the control panel) will be hidden automatically.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;autohideBehavior&lt;/b&gt; &lt;i&gt;(type: PlayerFramework.AutohideBehavior, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the behavior of the autohide feature.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;autohideTime&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the amount of time (in seconds) before interactive elements (e.g. the control panel) will be hidden automatically.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;autoload&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether to start loading the current media source automatically.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;autoplay&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether to automatically start playing the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;buffered&lt;/b&gt; &lt;i&gt;(type: TimeRanges, read-only)&lt;/i&gt;&lt;br /&gt;Gets the buffered time ranges for the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;captionTracks&lt;/b&gt; &lt;i&gt;(type: Array, read/write)&lt;/i&gt;&lt;br /&gt;Gets the caption and subtitle tracks for the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;controls&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether to display the native controls for the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;currentAudioTrack&lt;/b&gt; &lt;i&gt;(type: AudioTrack, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the current audio track.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;currentCaptionTrack&lt;/b&gt; &lt;i&gt;(type: TextTrack, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the current caption/subtitle track.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;currentSrc&lt;/b&gt; &lt;i&gt;(type: String, read-only)&lt;/i&gt;&lt;br /&gt;Gets the URL of the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;currentTime&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the current playback position (in seconds).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;defaultInteractiveViewModel&lt;/b&gt; &lt;i&gt;(type: PlayerFramework.InteractiveViewModel, read-only)&lt;/i&gt;&lt;br /&gt;Gets the view model that will be restored following a temporary change to the current interactive view model (e.g. during an ad).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;defaultPlaybackRate&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the playback rate to use when play is resumed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;duration&lt;/b&gt; &lt;i&gt;(type: Number, read-only)&lt;/i&gt;&lt;br /&gt;Gets the duration (in seconds) of the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;element&lt;/b&gt; &lt;i&gt;(type: HTMLElement, read-only)&lt;/i&gt;&lt;br /&gt;Gets the host element for the control.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ended&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether playback has ended.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;endTime&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the end time (in seconds) of the current media source. This is useful in live streaming scenarios.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;error&lt;/b&gt; &lt;i&gt;(type: MediaError, read-only)&lt;/i&gt;&lt;br /&gt;Gets the current error state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;height&lt;/b&gt; &lt;i&gt;(type: String, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the height of the host element.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;initialTime&lt;/b&gt; &lt;i&gt;(type: Number, read-only)&lt;/i&gt;&lt;br /&gt;Gets the earliest possible position (in seconds) that playback can begin.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;interactiveActivationMode&lt;/b&gt; &lt;i&gt;(type: PlayerFramework.InteractionType, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the type of interactions that will cause interactive elements (e.g. the control panel) to be shown.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;interactiveDeactivationMode&lt;/b&gt; &lt;i&gt;(type: PlayerFramework.InteractionType, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the type of interactions that will cause interactive elements (e.g. the control panel) to be hidden.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;interactiveViewModel&lt;/b&gt; &lt;i&gt;(type: PlayerFramework.InteractiveViewModel, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the view model that interactive elements are bound to (e.g. the control panel).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isAudioAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the audio control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isAudioEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the audio control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isAudioVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the audio control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isCaptionsAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the captions control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isCaptionsEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the captions control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isCaptionsVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the captions control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isCurrentTimeLive&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether the current playback position is &amp;quot;live&amp;quot;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isElapsedTimeAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the elapsed time control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isElapsedTimeEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the elapsed time control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isElapsedTimeVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the elapsed time control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isFastForwardAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the fast forward control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isFastForwardEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the fast forward control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isFastForwardVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the fast forward control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isFullScreen&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the player is in full screen mode.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isFullScreenAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the full screen control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isFullScreenEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the full screen control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isFullScreenVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the full screen control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isGoLiveAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the go live control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isGoLiveEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the go live control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isGoLiveVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the go live control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isInteractive&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the player is currently in interactive mode (e.g. showing the control panel).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isLive&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether the current media source is a live stream.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isMediaQualityAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the media quality control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isMediaQualityEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the media quality control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isMediaQualityVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the media quality control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isMuteAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the mute control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isMuteEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the mute control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isMuteVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the mute control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isPauseAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the pause control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isPauseEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the pause control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isPauseVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the pause control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isPlayPauseAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the play/pause control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isPlayPauseEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the play/pause control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isPlayPauseVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the play/pause control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isPlayResumeAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the play/resume control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isPlayResumeEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the play/resume control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isPlayResumeVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the play/resume control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isRemainingTimeAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the remaining time control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isRemainingTimeEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the remaining time control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isRemainingTimeVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the remaining time control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isReplayAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the replay control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isReplayEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the replay control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isReplayVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the replay control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isRewindAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the rewind control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isRewindEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the rewind control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isRewindVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the rewind control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSignalStrengthAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the signal strength control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSignalStrengthEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the signal strength control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSignalStrengthVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the signal strength control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSkipAheadAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the skip ahead control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSkipAheadEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the skip ahead control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSkipAheadVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the skip ahead control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSkipBackAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the skip back control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSkipBackEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the skip back control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSkipBackVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the skip back control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSkipNextAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the skip next control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSkipNextEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the skip next control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSkipNextVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the skip next control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSkipPreviousAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the skip previous control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSkipPreviousEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the skip previous control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSkipPreviousVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the skip previous control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSlowMotion&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the player is playing in slow motion.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSlowMotionAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the slow motion control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSlowMotionEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the slow motion control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isSlowMotionVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the slow motion control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isStartTimeOffset&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the start time is offset.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isTimelineAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the timeline control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isTimelineEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the timeline control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isTimelineVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the timeline control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isVolumeAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the volume control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isVolumeEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the volume control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isVolumeMuteAllowed&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether interaction with the volume/mute control is allowed based on the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isVolumeMuteEnabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the volume/mute control is enabled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isVolumeMuteVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the volume/mute control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;isVolumeVisible&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the volume control is visible.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;liveTime&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the live position (in seconds).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;liveTimeBuffer&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the live buffer time (in seconds) for the current playback position to be considered &amp;quot;live&amp;quot;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;loop&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether playback should be restarted after it ends.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;mediaElement&lt;/b&gt; &lt;i&gt;(type: HTMLMediaElement, read-only)&lt;/i&gt;&lt;br /&gt;Gets the media element associated with the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;mediaExtensionManager&lt;/b&gt; &lt;i&gt;(type: Windows.Media.MediaExtensionManager, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the media extension manager to be used by the player and its plugins. A new instance will be created on first use if one is not already set.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;mediaQuality&lt;/b&gt; &lt;i&gt;(type: PlayerFramework.MediaQuality, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the quality of the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msAudioCategory&lt;/b&gt; &lt;i&gt;(type: String, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies the purpose of the media, such as background audio or alerts.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msAudioDeviceType&lt;/b&gt; &lt;i&gt;(type: String, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies the output device ID that the audio will be sent to.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msHorizontalMirror&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the media is flipped horizontally.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msIsLayoutOptimalForPlayback&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether the media can be rendered more efficiently.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msIsStereo3D&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether the system considers the media to be stereo 3D.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msPlayToDisabled&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the DLNA PlayTo device is available.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msPlayToPrimary&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the primary DLNA PlayTo device.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msPlayToSource&lt;/b&gt; &lt;i&gt;(type: Object, read-only)&lt;/i&gt;&lt;br /&gt;Gets the media source for use by the PlayToManager.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msRealTime&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether or not to enable low-latency playback.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msStereo3DPackingMode&lt;/b&gt; &lt;i&gt;(type: String, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the frame-packing mode for stereo 3D video content.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msStereo3DRenderMode&lt;/b&gt; &lt;i&gt;(type: String, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the system display is set to stereo display.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msZoom&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the video frame is trimmed to fit the display.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;muted&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that indicates whether the audio is muted.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;networkState&lt;/b&gt; &lt;i&gt;(type: PlayerFramework.NetworkState, read-only)&lt;/i&gt;&lt;br /&gt;Gets the current network state for the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;paused&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether playback is paused.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;playbackRate&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the playback rate for the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;played&lt;/b&gt; &lt;i&gt;(type: TimeRanges, read-only)&lt;/i&gt;&lt;br /&gt;Gets the played time ranges for the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;playerState&lt;/b&gt; &lt;i&gt;(type: PlayerFramework.PlayerState, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the current state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;plugins&lt;/b&gt; &lt;i&gt;(type: Array, read-only)&lt;/i&gt;&lt;br /&gt;Gets the plugins associated with the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;poster&lt;/b&gt; &lt;i&gt;(type: String, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the URL of an image to display while the current media source is loading.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;preload&lt;/b&gt; &lt;i&gt;(type: String, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a hint to how much buffering is advisable for the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;readyState&lt;/b&gt; &lt;i&gt;(type: PlayerFramework.ReadyState, read-only)&lt;/i&gt;&lt;br /&gt;Gets the current readiness state of the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;replayOffset&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the amount of time (in seconds) to offset the current playback position during replay.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;scrubbing&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether the player is currently moving to a new playback position due to a scrub operation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;seekable&lt;/b&gt; &lt;i&gt;(type: TimeRanges, read-only)&lt;/i&gt;&lt;br /&gt;Gets the seekable time ranges of the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;seeking&lt;/b&gt; &lt;i&gt;(type: Boolean, read-only)&lt;/i&gt;&lt;br /&gt;Gets a value that specifies whether the player is currently moving to a new playback position due to a seek operation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;seekWhileScrubbing&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets a value that specifies whether the current video frame should be updated during a scrub operation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;signalStrength&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the signal strength of the current media source. This is useful in adaptive streaming scenarios.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;skipAheadInterval&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the amount of time (in seconds) that the skip ahead control will seek forward.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;skipBackInterval&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the amount of time (in seconds) that the skip back control will seek backward.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;slowMotionPlaybackRate&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the playback rate to use when in slow motion.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;sources&lt;/b&gt; &lt;i&gt;(type: Array, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the media sources to be considered.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;src&lt;/b&gt; &lt;i&gt;(type: String, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the URL of the current media source to be considered.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;startTime&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the start time (in seconds) of the current media source. This is useful in live streaming scenarios.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;startupTime&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the position (in seconds) where playback should start. This is useful for resuming a video where the user left off in a previous session.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;testForMediaPack&lt;/b&gt; &lt;i&gt;(type: Boolean, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets whether a test for the media feature pack should be performed prior to allowing content to be laoded. This is useful to enable if Windows 8 N/KN users will be using this app.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;textTracks&lt;/b&gt; &lt;i&gt;(type: TextTrackList, read-only)&lt;/i&gt;&lt;br /&gt;Gets the text tracks for the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;tracks&lt;/b&gt; &lt;i&gt;(type: Array, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the tracks for the player.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;videoHeight&lt;/b&gt; &lt;i&gt;(type: Number, read-only)&lt;/i&gt;&lt;br /&gt;Gets the intrinsic height of the current video (in pixels).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;videoWidth&lt;/b&gt; &lt;i&gt;(type: Number, read-only)&lt;/i&gt;&lt;br /&gt;Gets the intrinsic width of the current video (in pixels).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;volume&lt;/b&gt; &lt;i&gt;(type: Number, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the volume level (from 0 to 1) for the audio portions of media playback.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;width&lt;/b&gt; &lt;i&gt;(type: String, read/write)&lt;/i&gt;&lt;br /&gt;Gets or sets the width of the host element.&lt;br /&gt;
&lt;h2&gt;Methods&lt;/h2&gt;
&lt;b&gt;addClass(name)&lt;/b&gt;&lt;br /&gt;Adds the specified CSS class to the host element.
&lt;ul&gt;&lt;li&gt;&lt;b&gt;name:&lt;/b&gt; &lt;i&gt;(type: String)&lt;/i&gt; The name of the class to add. Multiple classes can be added using space-delimited names.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;canPlayType(type)&lt;/b&gt;&lt;br /&gt;Returns a value that specifies whether the player can play a given media type.
&lt;ul&gt;&lt;li&gt;&lt;b&gt;type:&lt;/b&gt; &lt;i&gt;(type: String)&lt;/i&gt; The type of media to be played.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Returns:&lt;/b&gt; &lt;i&gt;(type: String)&lt;/i&gt; One of the following values: &amp;quot;probably&amp;quot;, &amp;quot;maybe&amp;quot;, or an empty string if the media cannot be rendered.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;decreasePlaybackRate()&lt;/b&gt;&lt;br /&gt;Decreases the current playback rate by a factor of two. After the rate reaches 1 (normal speed), it will flip to -1, and then begins to rewind.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;dispose()&lt;/b&gt;&lt;br /&gt;Shuts down and releases all resources.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;focus()&lt;/b&gt;&lt;br /&gt;Gives focus to the host element.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;increasePlaybackRate()&lt;/b&gt;&lt;br /&gt;Increases the current playback rate by a factor of two. After the rate reaches -1, it flips to 1 (normal speed), and then begins to fast forward.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;load()&lt;/b&gt;&lt;br /&gt;Reloads the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msClearEffects()&lt;/b&gt;&lt;br /&gt;Clears all effects from the media pipeline.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msFrameStep(forward)&lt;/b&gt;&lt;br /&gt;Steps the video forward or backward by one frame.
&lt;ul&gt;&lt;li&gt;&lt;b&gt;forward:&lt;/b&gt; &lt;i&gt;(type: Boolean)&lt;/i&gt; If true, the video is stepped forward, otherwise the video is stepped backward.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;msInsertAudioEffect(activatableClassId,effectRequired,config)&lt;/b&gt;&lt;br /&gt;Inserts the specified audio effect into the media pipeline.
&lt;ul&gt;&lt;li&gt;&lt;b&gt;activatableClassId:&lt;/b&gt; &lt;i&gt;(type: String)&lt;/i&gt; The audio effects class.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;effectRequired:&lt;/b&gt; &lt;i&gt;(type: Boolean)&lt;/i&gt; &lt;/li&gt;
&lt;li&gt;&lt;b&gt;config:&lt;/b&gt; &lt;i&gt;(type: Object)&lt;/i&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;msInsertVideoEffect(activatableClassId,effectRequired,config)&lt;/b&gt;&lt;br /&gt;Inserts the specified video effect into the media pipeline.
&lt;ul&gt;&lt;li&gt;&lt;b&gt;activatableClassId:&lt;/b&gt; &lt;i&gt;(type: String)&lt;/i&gt; The video effects class.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;effectRequired:&lt;/b&gt; &lt;i&gt;(type: Boolean)&lt;/i&gt; &lt;/li&gt;
&lt;li&gt;&lt;b&gt;config:&lt;/b&gt; &lt;i&gt;(type: Object)&lt;/i&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;msSetMediaProtectionManager(mediaProtectionManager)&lt;/b&gt;&lt;br /&gt;Sets the media protection manager for a given media pipeline.
&lt;ul&gt;&lt;li&gt;&lt;b&gt;mediaProtectionManager:&lt;/b&gt; &lt;i&gt;(type: Windows.Media.Protection.MediaProtectionManager)&lt;/i&gt; &lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;msSetVideoRectangle(left,top,right,bottom)&lt;/b&gt;&lt;br /&gt;Sets the dimensions of a sub-rectangle within a video.
&lt;ul&gt;&lt;li&gt;&lt;b&gt;left:&lt;/b&gt; &lt;i&gt;(type: Number)&lt;/i&gt; The left position of the rectangle.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;top:&lt;/b&gt; &lt;i&gt;(type: Number)&lt;/i&gt; The top position of the rectangle.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;right:&lt;/b&gt; &lt;i&gt;(type: Number)&lt;/i&gt; The right position of the rectangle.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;bottom:&lt;/b&gt; &lt;i&gt;(type: Number)&lt;/i&gt; The bottom position of the rectangle.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;pause()&lt;/b&gt;&lt;br /&gt;Pauses playback of the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;play()&lt;/b&gt;&lt;br /&gt;Loads and starts playback of the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;playResume()&lt;/b&gt;&lt;br /&gt;Resets the playback rate and resumes playing the current media source.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;removeClass(name)&lt;/b&gt;&lt;br /&gt;Removes the specified CSS class from the host element.
&lt;ul&gt;&lt;li&gt;&lt;b&gt;name:&lt;/b&gt; &lt;i&gt;(type: String)&lt;/i&gt; The name of the class to remove. Multiple classes can be removed using space-delimited names.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;replay()&lt;/b&gt;&lt;br /&gt;Supports instant replay by applying an offset to the current playback position.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;retry()&lt;/b&gt;&lt;br /&gt;Reloads the current media source and resumes where playback was left off.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;update(mediaSource)&lt;/b&gt;&lt;br /&gt;Updates the player and its plugins with the specified media source (e.g. the current playlist item).
&lt;ul&gt;&lt;li&gt;&lt;b&gt;mediaSource:&lt;/b&gt; &lt;i&gt;(type: Object)&lt;/i&gt; A JSON object containing the set of options that represent a media source.&lt;/li&gt;&lt;/ul&gt;

&lt;h2&gt;Events&lt;/h2&gt;
&lt;b&gt;advertisingstatechange&lt;/b&gt;&lt;br /&gt;Occurs when the advertising state of the player is changed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;canplay&lt;/b&gt;&lt;br /&gt;Occurs when playback is possible, but would require further buffering.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;canplaythrough&lt;/b&gt;&lt;br /&gt;Occurs when playback to the end is possible without requiring further buffering.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;currentaudiotrackchange&lt;/b&gt;&lt;br /&gt;Occurs when the current audio track has changed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;currentaudiotrackchanging&lt;/b&gt;&lt;br /&gt;Occurs when the current audio track is changing and presents an opportunity for custom behavior. Used by the adaptive plugin.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;currentcaptiontrackchange&lt;/b&gt;&lt;br /&gt;Occurs when the current caption track has changed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;currentcaptiontrackchanging&lt;/b&gt;&lt;br /&gt;Occurs when the current caption track is changing and presents an opportunity for custom behavior. Used by the captions plugin.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;durationchange&lt;/b&gt;&lt;br /&gt;Occurs when the media duration is updated.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;emptied&lt;/b&gt;&lt;br /&gt;Occurs when the media element is reset to its initial state.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ended&lt;/b&gt;&lt;br /&gt;Occurs when the end of playback is reached.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ending&lt;/b&gt;&lt;br /&gt;Occurs before the ended event and presents an opportunity for deferral. Useful for postroll ads.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;error&lt;/b&gt;&lt;br /&gt;Occurs when the media element encounters an error.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;fullscreenchange&lt;/b&gt;&lt;br /&gt;Occurs when the full screen state of the player is changed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;initialized&lt;/b&gt;&lt;br /&gt;Occurs when the player has finished initializing itself and its plugins.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;interactivestatechange&lt;/b&gt;&lt;br /&gt;Occurs when the interactive state of the player is changed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;interactiveviewmodelchange&lt;/b&gt;&lt;br /&gt;Occurs when the view model used to drive interactive components such as the control panel is changed (e.g. when an ad start or ends).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;islivechange&lt;/b&gt;&lt;br /&gt;Occurs when the live state of the media source changes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;loadeddata&lt;/b&gt;&lt;br /&gt;Occurs when media data is loaded at the current playback position.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;loadedmetadata&lt;/b&gt;&lt;br /&gt;Occurs when the duration and dimensions of the media have been determined.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;loading&lt;/b&gt;&lt;br /&gt;Occurs before the media source is set and offers the ability to perform blocking operations.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;loadstart&lt;/b&gt;&lt;br /&gt;Occurs after the media source is set and the player begins looking for media data.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msvideoformatchanged&lt;/b&gt;&lt;br /&gt;Occurs when the video format changes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msvideoframestepcompleted&lt;/b&gt;&lt;br /&gt;Occurs when the video frame has been stepped forward or backward one frame.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;msvideooptimallayoutchanged&lt;/b&gt;&lt;br /&gt;Occurs when the msIsLayoutOptimalForPlayback state changes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;mutedchange&lt;/b&gt;&lt;br /&gt;Occurs when the muted state of the player changes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;pause&lt;/b&gt;&lt;br /&gt;Occurs when playback is paused.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;play&lt;/b&gt;&lt;br /&gt;Occurs when the play method is requested.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;playerstatechange&lt;/b&gt;&lt;br /&gt;Occurs when the state of the player has changed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;playing&lt;/b&gt;&lt;br /&gt;Occurs when the media has started playing.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;progress&lt;/b&gt;&lt;br /&gt;Occurs when progress is made while downloading media data.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;ratechange&lt;/b&gt;&lt;br /&gt;Occurs when the playback rate is increased or decreased.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;readystatechange&lt;/b&gt;&lt;br /&gt;Occurs when the ready state has changed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;scrub&lt;/b&gt;&lt;br /&gt;Occurs when a scrub operation is requested.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;scrubbed&lt;/b&gt;&lt;br /&gt;Occurs when a scrub operation ends.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;scrubbing&lt;/b&gt;&lt;br /&gt;Occurs when the current playback position is moved due to a scrub operation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;seek&lt;/b&gt;&lt;br /&gt;Occurs when a seek operation is requested.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;seeked&lt;/b&gt;&lt;br /&gt;Occurs when a seek operation ends.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;seeking&lt;/b&gt;&lt;br /&gt;Occurs when the current playback position is moved due to a seek operation.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;stalled&lt;/b&gt;&lt;br /&gt;Occurs when the media download has stopped.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;started&lt;/b&gt;&lt;br /&gt;Occurs after playback has started.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;starting&lt;/b&gt;&lt;br /&gt;Occurs before playback has started and presents an opportunity for deferral or cancellation. Useful for preroll ads.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;suspend&lt;/b&gt;&lt;br /&gt;Occurs when the load operation has been intentionally halted.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;timeupdate&lt;/b&gt;&lt;br /&gt;Occurs when the current playback position is updated.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;updated&lt;/b&gt;&lt;br /&gt;Occurs when the player is updated with a new media source (e.g. when the current playlist item is changed).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;volumechange&lt;/b&gt;&lt;br /&gt;Occurs when the volume is changed.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;waiting&lt;/b&gt;&lt;br /&gt;Occurs when playback stops because the next video frame is unavailable.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timgreenfield</author><pubDate>Wed, 24 Apr 2013 20:35:09 GMT</pubDate><guid isPermaLink="false">Updated Wiki: JavaScript API Reference 20130424083509P</guid></item><item><title>Updated Wiki: Home</title><link>https://playerframework.codeplex.com/wikipage?version=41</link><description>&lt;div class="wikidoc"&gt;&lt;h2&gt;Player Framework: an open source component of the Microsoft Media Platform&lt;/h2&gt;
&lt;h4&gt;&lt;a href="https://playerframework.codeplex.com/releases/view/105214"&gt;Player Framework for Windows 8 and Windows Phone 8 - v1.2 now available (4/22/13)&lt;/a&gt;&lt;/h4&gt;
&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;An open source, robust video player framework for Windows 8, HTML5, Silverlight, Windows Phone and other application platforms. &lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=playerframework&amp;DownloadId=527525" alt="entertainment_theme.jpg" title="entertainment_theme.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Video players can be incredibly difficult to build. When developers require support for adaptive streaming, closed captioning, advertising standards integration, DVR-style playback control, and other advanced features, the complexity of their video player grows exponentially. Over the last few years at Microsoft we have helped build some of the most advanced video applications on the Web including the browser-based experience for the Beijing and Vancouver Olympics with NBC Sports, the last three seasons of NBC&amp;#39;s Sunday Night Football (including the 2012 Super Bowl), the CBS March Madness college basketball tournament, Wimbledon, and a number of other major, live events with millions of simultaneous users. As a part of those projects we have developed one of the most powerful video players on the planet. And we&amp;#39;ve decided to share it with everyone, for free. &lt;br /&gt;&lt;br /&gt;The Microsoft Media Platform&amp;#39;s Player Framework is an open source video player that we continue to develop and evolve. It is available for Silverlight, HTML5, Windows Phone, Xbox, and now, in our latest release, Windows 8 applications. And it&amp;#39;s fully open source!&lt;br /&gt;&lt;br /&gt;The Player Framework supports a long list of advanced features including:
&lt;ul&gt;&lt;li&gt;Adaptive streaming and advanced playback heuristics via the &lt;a href="http://visualstudiogallery.msdn.microsoft.com/04423d13-3b3e-4741-a01c-1ae29e84fea6?SRC=Home"&gt;IIS Smooth Streaming Client SDK for Windows 8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Closed captioning support via SMPTE-TT and TTML&lt;/li&gt;
&lt;li&gt;Advertising standards support including VAST, MAST, and VPAID&lt;/li&gt;
&lt;li&gt;Advanced DVR-style playback&lt;/li&gt;
&lt;li&gt;Robust skinning and styling&lt;/li&gt;
&lt;li&gt;A number of other powerful features&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;Follow the links below to start building for each of these platforms:
&lt;ul&gt;&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=Player%20Framework%20for%20Windows%208%20Applications&amp;referringTitle=Home"&gt;Windows 8 Applications&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=Player%20Framework%20for%20HTML5&amp;referringTitle=Home"&gt;HTML5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://smf.codeplex.com/documentation"&gt;Silverlight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://smf.codeplex.com/documentation"&gt;Windows Phone&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;In the future we plan to expand our platform support to include other popular mobile platforms, even the ones that aren&amp;#39;t a part of the Microsoft family. ;)&lt;br /&gt;
&lt;h3&gt;Additional information&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Learn about the &lt;a href="http://www.microsoft.com/en-us/mediaplatform"&gt;Microsoft Media Platform&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Check out Microsoft&amp;#39;s Nigel Parker&amp;#39;s post on &lt;a href="http://blogs.msdn.com/b/nigel/archive/2011/09/02/how-to-navigate-the-html5-video-maze.aspx"&gt;navigating the HTML5 video maze&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>mdowney</author><pubDate>Mon, 22 Apr 2013 23:10:35 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130422111035P</guid></item><item><title>Updated Wiki: Analytics</title><link>https://playerframework.codeplex.com/wikipage?title=Analytics&amp;version=16</link><description>&lt;div class="wikidoc"&gt;The player framework now offers a number of ways to support video analytics and telemetry in your app. There are two overall approaches you can take depending on your needs.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;b&gt;DIY:&lt;/b&gt; The player framework includes numerous events and properties that you can easily wire up to in order to track and collect information about how your user is behaving when watching and interacting with the media. Please review the API documentation for details on all the possible APIs available to you.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Tracking plugin:&lt;/b&gt; The player framework includes a simple yet valuable plugin to track playback positions and playtime milestones. This can be used, for example, to easily gather information about when the user has spent more than 30 minutes watching your video or when they reached the 75% point. Used in combination with #1 above, it can usually provide access to most of the analytic data you may wish to track. &lt;a href="https://playerframework.codeplex.com/wikipage?title=Tracking%20and%20Markers&amp;amp;referringTitle=Windows%208%20Player%20Documentation"&gt;Click here to learn more about this plugin, tracking and markers&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Analytics plugin:&lt;/b&gt; For more advanced scenarios, the player framework now includes a new analytics plugin to help collect and send quality and user behavior data to the web for analysis to help you troubleshoot your streams, understand the quality your users perceive and learn about usage patterns. This plugin builds on top of #1 and #2 above and offers an extensible architecture that 3rd party analytics services can easily expand on.&lt;/li&gt;&lt;/ol&gt;
&lt;i&gt;The rest of this document will focus on #3: The Analytics plugin&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;This analytics plugin is an optional plugin that can be hooked up to any backend such as Microsoft Audience Insight, Adobe SiteCatalyst (part of the Adobe Omniture suite), or any other service designed to help analyze your app&amp;#39;s video usage.&lt;br /&gt;
&lt;h2&gt;Architecture&lt;/h2&gt;Before we get started and take a look at how to add this to your project, it is important to understand the general architecture of the analytics plugin in the player framework so you understand the basics of how it works. The analytics engine of the player framework uses simple log objects to pass around information about what is occurring during playback. Here are some of the primary pieces of the analytics engine:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=playerframework&amp;DownloadId=659643" alt="Analytics_Architecture.png" title="Analytics_Architecture.png" /&gt;&lt;br /&gt;
&lt;h3&gt;AnalyticsCollector&lt;/h3&gt;This is the primary class (built as a WinRT component) responsible for glueing together the data clients (the objects responsible for providing the information) and the logging service (the object responsible for broadcasting logs).&lt;br /&gt;
&lt;h3&gt;DataClients&lt;/h3&gt;The analytics plugin collects data from four different types of data clients (each implementing a unique interface). 
&lt;ul&gt;&lt;li&gt;IEdgeServerMonitor: This dataclient is responsible for retrieving extra information about the server streaming your video such as the IP or domain name for your CDN. This will help you identify if a certain CDN is having problems.&lt;/li&gt;
&lt;li&gt;IEnvironmentMonitor: This dataclient is responsible for providing system &amp;amp; environment information such as frames per second and CPU load. Note: this information is only available for Windows Phone.&lt;/li&gt;
&lt;li&gt;IPlayerMonitor: This dataclient is responsible for relaying information about the state of the player. The Xaml and JS versions of the player framework each provide their own implementation.&lt;/li&gt;
&lt;li&gt;IAdaptiveMonitor: This optional dataclient provides information specific to adaptive streaming and is not relevant when serving progressive download content. The player framework ships with an implementation specifically for smooth streaming but you could build your own if you are using a custom media foundation extension (or MediaStreamSource in WP8) such as HLS.&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;LoggingService&lt;/h3&gt;The logging service is a central (static) object responsible for broadcasting data to ILoggingTarget objects. These logging targets then consume the logs and process them.&lt;br /&gt;
&lt;h3&gt;Microsoft Audience Insight&lt;/h3&gt;The Audience Insight logging target is included out of the box with the player framework analytics plugin and is responsible for filtering, serializing, batching and uploading logs to an Audience Insight server. &lt;a href="https://playerframework.codeplex.com/wikipage?title=Audience%20Insight&amp;referringTitle=Analytics"&gt;Find out more info about adding Audience Insight to your application&lt;/a&gt;.&lt;br /&gt;
&lt;h3&gt;Adobe SiteCatalyst&lt;/h3&gt;We have created a proof of concept logging target capable of logging to Adobe SiteCatalyst using the Site Catalyst SDK. We do not ship this with the player framework because it has a dependency on the Adobe SiteCatalyst SDK (which you need to &lt;a href="http://developer.omniture.com/en_US/gallery/beta-digital-marketing-for-windows-8-apps-sitecatalyst"&gt;download separately from Adobe&lt;/a&gt;). &lt;a href="https://playerframework.codeplex.com/wikipage?title=Adobe%20Site%20Catalyst&amp;referringTitle=Analytics"&gt;Find out more info about adding Site Catalyst to your application&lt;/a&gt;.&lt;br /&gt;
&lt;h3&gt;Custom logging target&lt;/h3&gt;Using the same technique as the Audience Insight and SiteCatalyst components, you can easily create one of your own to log data to a web service or monitor activity from within your app for diagnostic purposes. This could be a different analytics collection service in the cloud or it could be a part of your app used to diagnose problems. &lt;a href="https://playerframework.codeplex.com/wikipage?title=Custom%20Logging%20Target&amp;referringTitle=Analytics"&gt;Find out more info about building and adding a custom logging target to your application&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>mdowney</author><pubDate>Mon, 22 Apr 2013 23:08:48 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Analytics 20130422110848P</guid></item><item><title>Updated Wiki: Analytics</title><link>https://playerframework.codeplex.com/wikipage?title=Analytics&amp;version=15</link><description>&lt;div class="wikidoc"&gt;The player framework now offers a number of ways to support video analytics and telemetry in your app. There are two overall approaches you can take depending on your needs.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;b&gt;DIY:&lt;/b&gt; The player framework includes numerous events and properties that you can easily wire up to in order to track and collect information about how your user is behaving when watching and interacting with the media. Please review the API documentation for details on all the possible APIs available to you.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Tracking plugin:&lt;/b&gt; The player framework includes a simple yet valuable plugin to optional track playback positions and playtime milestones. This can be used for example to easily gather information about when the user has spent more than 30 minutes watching your video or when they reached the 75% point. Used in combination with #1 above, it can usually provide access to most of the analytic data you may wish to track. &lt;a href="https://playerframework.codeplex.com/wikipage?title=Tracking%20and%20Markers&amp;amp;referringTitle=Windows%208%20Player%20Documentation"&gt;Click here to learn more about this plugin, tracking and markers&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Analytics plugin:&lt;/b&gt; For more advanced scenarios, the player framework now includes a new analytics plugin to help collect and send quality and user behavior data to the web for analysis to help you troubleshoot your streams, understand the quality your users perceive and learn about usage patterns. This plugin builds on top of #1 and #2 above and offers an extensible architecture that 3rd party analytics services can easily expand on.&lt;/li&gt;&lt;/ol&gt;
&lt;i&gt;The rest of this document will focus on #3: The Analytics plugin&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;This analytics plugin is an optional plugin that can be hooked up to any backend such as Microsoft Audience Insight, Adobe SiteCatalyst (part of the Adobe Omniture suite), or any other service designed to help analyze your app&amp;#39;s video usage.&lt;br /&gt;
&lt;h2&gt;Architecture&lt;/h2&gt;Before we get started and take a look at how to add this to your project, it is important to understand the general architecture of the analytics plugin in the player framework so you understand the basics of how it works. The analytics engine of the player framework uses simple log objects to pass around information about what is occurring during playback. Here are some of the primary pieces of the analytics engine:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=playerframework&amp;DownloadId=659643" alt="Analytics_Architecture.png" title="Analytics_Architecture.png" /&gt;&lt;br /&gt;
&lt;h3&gt;AnalyticsCollector&lt;/h3&gt;This is the primary class (built as a WinRT component) responsible for glueing together the data clients (the objects responsible for providing the information) and the logging service (the object responsible for broadcasting logs).&lt;br /&gt;
&lt;h3&gt;DataClients&lt;/h3&gt;The analytics plugin collects data from four different types of data clients (each implementing a unique interface). 
&lt;ul&gt;&lt;li&gt;IEdgeServerMonitor: This dataclient is responsible for retrieving extra information about the server streaming your video such as the IP or domain name for your CDN. This will help you identify if a certain CDN is having problems.&lt;/li&gt;
&lt;li&gt;IEnvironmentMonitor: This dataclient is responsible for providing system &amp;amp; environment information such as frames per second and CPU load. Note: this information is only available for Windows Phone.&lt;/li&gt;
&lt;li&gt;IPlayerMonitor: This dataclient is responsible for relaying information about the state of the player. The Xaml and JS versions of the player framework each provide their own implementation.&lt;/li&gt;
&lt;li&gt;IAdaptiveMonitor: This optional dataclient provides information specific to adaptive streaming and is not relevant when serving progressive download content. The player framework ships with an implementation specifically for smooth streaming but you could build your own if you are using a custom media foundation extension (or MediaStreamSource in WP8) such as HLS.&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;LoggingService&lt;/h3&gt;The logging service is a central (static) object responsible for broadcasting data to ILoggingTarget objects. These logging targets then consume the logs and process them.&lt;br /&gt;
&lt;h3&gt;Microsoft Audience Insight&lt;/h3&gt;The Audience Insight logging target is included out of the box with the player framework analytics plugin and is responsible for filtering, serializing, batching and uploading logs to an Audience Insight server. &lt;a href="https://playerframework.codeplex.com/wikipage?title=Audience%20Insight&amp;referringTitle=Analytics"&gt;Find out more info about adding Audience Insight to your application&lt;/a&gt;.&lt;br /&gt;
&lt;h3&gt;Adobe SiteCatalyst&lt;/h3&gt;We have created a proof of concept logging target capable of logging to Adobe SiteCatalyst using the Site Catalyst SDK. We do not ship this with the player framework because it has a dependency on the Adobe SiteCatalyst SDK (which you need to &lt;a href="http://developer.omniture.com/en_US/gallery/beta-digital-marketing-for-windows-8-apps-sitecatalyst"&gt;download separately from Adobe&lt;/a&gt;). &lt;a href="https://playerframework.codeplex.com/wikipage?title=Adobe%20Site%20Catalyst&amp;referringTitle=Analytics"&gt;Find out more info about adding Site Catalyst to your application&lt;/a&gt;.&lt;br /&gt;
&lt;h3&gt;Custom logging target&lt;/h3&gt;Using the same technique as the Audience Insight and SiteCatalyst components, you can easily create one of your own to log data to a web service or monitor activity from within your app for diagnostic purposes. This could be a different analytics collection service in the cloud or it could be a part of your app used to diagnose problems. &lt;a href="https://playerframework.codeplex.com/wikipage?title=Custom%20Logging%20Target&amp;referringTitle=Analytics"&gt;Find out more info about building and adding a custom logging target to your application&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>mdowney</author><pubDate>Mon, 22 Apr 2013 23:06:46 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Analytics 20130422110646P</guid></item><item><title>Updated Wiki: Windows 8 Player Documentation</title><link>https://playerframework.codeplex.com/wikipage?title=Windows 8 Player Documentation&amp;version=7</link><description>&lt;div class="wikidoc"&gt;Documentation for the Windows 8 Player Framework is a work-in-progress. Please continue to monitor this page as we will be regularly adding more documentation, samples, and demos.&lt;br /&gt;
&lt;h1&gt;Getting Started&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=Windows%208%20Player%3a%20Install%20and%20configure%20-%20HTML%2fJavaScript&amp;referringTitle=Windows%208%20Player%20Documentation"&gt;Create an HTML&amp;#47;JavaScript-based player&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=Windows%208%20Metro%20Player%3a%20Install%20and%20configure%20-%20XAML%2fC&amp;referringTitle=Windows%208%20Player%20Documentation"&gt;Create a XAML&amp;#47;C&amp;#35;-based player&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=JavaScript%20usage%20guide&amp;referringTitle=Windows%208%20Player%20Documentation"&gt;JavaScript player usage guide&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;API References&lt;/h1&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=JavaScript%20API%20reference&amp;referringTitle=Windows%208%20Player%20Documentation"&gt;JavaScript player API reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://smf.blob.core.windows.net/docs/win8/xaml/api/Index.html"&gt;XAML player API reference&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Feature Overviews&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=Advertising&amp;referringTitle=Windows%208%20Player%20Documentation"&gt;Advertising&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=Accessing%20the%20Smooth%20Streaming%20SDK%20directly%20from%20your%20app&amp;referringTitle=Windows%208%20Player%20Documentation"&gt;Accessing the Smooth Streaming SDK directly from your app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=Applying%20Themes&amp;referringTitle=Windows%208%20Player%20Documentation"&gt;Applying Themes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=Tracking%20and%20Markers&amp;referringTitle=Windows%208%20Player%20Documentation"&gt;Tracking and Markers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=Analytics&amp;referringTitle=Windows%208%20Player%20Documentation"&gt;Analytics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=Error%20handling%20and%20recovery&amp;referringTitle=Windows%208%20Player%20Documentation"&gt;Error handling and recovery&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h1&gt;Sample Tutorials&lt;/h1&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="https://playerframework.codeplex.com/wikipage?title=Channel%209%20Sample%20Application&amp;referringTitle=Windows%208%20Player%20Documentation"&gt;Channel 9 sample application for JavaScript&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timgreenfield</author><pubDate>Mon, 22 Apr 2013 22:25:03 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Windows 8 Player Documentation 20130422102503P</guid></item><item><title>New Comment on "Windows 8 Player Documentation"</title><link>https://playerframework.codeplex.com/wikipage?title=Windows 8 Player Documentation&amp;ANCHOR#C27259</link><description>&amp;#64;phil77 - you need to use the smooth streaming client &amp;#40;SSME&amp;#41; instead of the smooth streaming SDK when building for Windows Phone. I&amp;#39;ll make sure we make this clear in our docs. &amp;#10;http&amp;#58;&amp;#47;&amp;#47;www.microsoft.com&amp;#47;en-us&amp;#47;download&amp;#47;details.aspx&amp;#63;id&amp;#61;29940</description><author>mdowney</author><pubDate>Mon, 22 Apr 2013 01:19:41 GMT</pubDate><guid isPermaLink="false">New Comment on "Windows 8 Player Documentation" 20130422011941A</guid></item><item><title>Updated Wiki: Custom Logging Target</title><link>https://playerframework.codeplex.com/wikipage?title=Custom Logging Target&amp;version=5</link><description>&lt;div class="wikidoc"&gt;Building your own logging target to capture logs generated by the analytics plugin is straight forward. You simply need to create a class that implements Microsoft.VideoAnalytics.ILoggingTarget. Note: if your app is a Windows 8 JavaScript app you just need to add a WinRT class library to your solution and built the logging target implementation in C#, VB, or C++.&lt;br /&gt;
&lt;h2&gt;Building an ILoggingTarget&lt;/h2&gt;ILoggingTarget is a very simple interface with only one method:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;namespace&lt;/span&gt; Microsoft.VideoAnalytics
{
    &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color:Gray;"&gt;///&lt;/span&gt;&lt;span style="color:Green;"&gt; An interface to allow an object to become a target of logging events.&lt;/span&gt;
    &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; ILoggingTarget
    {
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt;&lt;span style="color:Green;"&gt; Called to pass a new log to the target.&lt;/span&gt;
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;param name=&amp;quot;log&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:Green;"&gt;The log object that was generated.&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;void&lt;/span&gt; LogEntry(ILog log);
    }
}
&lt;/pre&gt;&lt;/div&gt;Once you register your implementation as a logging target, it will automatically receive all logs generated. &lt;br /&gt;
&lt;h2&gt;Using and understanding the logs&lt;/h2&gt;Each log implements ILog and can be cast to a specific log type to find out more details. There are dozens of different types of logs generated and even more if you wire up the AdaptiveMonitor (see next section below for more details).&lt;br /&gt;&lt;br /&gt;A typical way to read and utilize the logs received typically involves checking the object type and depending on the type, casting it to it&amp;#39;s true form and reading it&amp;#39;s high level properties.&lt;br /&gt;&lt;br /&gt;Here&amp;#39;s an example of what the code may look like:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; LogEntry(ILog log)
{
    &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; PerceivedBandwidthLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (PerceivedBandwidthLog)log;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.PerceivedBandwidth);
        chart.AddDataPoint(typedLog.PerceivedBandwidth / (1024 * 8));
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; BufferSizeLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (BufferSizeLog)log;
        ChartViewModel chart = &lt;span style="color:Blue;"&gt;null&lt;/span&gt;;
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;audio&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.AudioBufferSize);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;video&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.VideoBufferSize);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (chart != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        {
            chart.AddDataPoint(typedLog.BufferSize);
        }
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; ChunkDownloadLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (ChunkDownloadLog)log;
        ChartViewModel chart = &lt;span style="color:Blue;"&gt;null&lt;/span&gt;;
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;audio&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.AudioDownloadLatencyMilliseconds);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;video&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.VideoDownloadLatencyMilliseconds);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (chart != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        {
            chart.AddDataPoint(typedLog.DownloadTimeMs);
        }
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; BitrateChangedLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (BitrateChangedLog)log;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.BitRate);
        chart.AddDataPoint(typedLog.Bitrate);
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; BufferingChangedLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (BufferingChangedLog)log;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.IsBuffering);
        chart.AddDataPoint(typedLog.IsBuffering ? 1 : 0);
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; StreamLoadedLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; loadLog = log &lt;span style="color:Blue;"&gt;as&lt;/span&gt; StreamLoadedLog;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; bitrateChartData = Charts.First(vm =&amp;gt; vm.QualityAttribute == QualityCharts.BitRate);
        bitrateChartData.MaxValue = loadLog.MaxBitrate;
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Registering your custom logging target&lt;/h2&gt;To connect your logging target to the player framework, you only need one line of code:&lt;br /&gt;In JavaScript:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
Microsoft.VideoAnalytics.LoggingService.current.loggingTargets.append(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyNamespace.MyLoggingTarget());
&lt;/pre&gt;&lt;/div&gt;In C#:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
LoggingService.Current.LoggingTargets.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyLoggingTarget());
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;More data: add your own logs&lt;/h2&gt;It is equally easy to add your own data. Simply create a new ILog implementation for each log type you want to create and pass them into the logging service via:&lt;br /&gt;In JavaScript:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
Microsoft.VideoAnalytics.LoggingService.current.log(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyNamespace.MyLog());
&lt;/pre&gt;&lt;/div&gt;In C#:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
LoggingService.Current.Log(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyLog());
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Logs can also have data attached to them automatically by logging through the AnalyticsPlugin. Logs sent to this class will automatically be stamped with additional session and media specific data before they are sent to the LoggingService. To do this:&lt;br /&gt;In JavaScript:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
mediaPlayer.AnalyticsPlugin.log(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyNamespace.MyLog());
&lt;/pre&gt;&lt;/div&gt;In C#:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
analyticsPlugin.Log(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyLog());
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Note: add to the AnalyticsPlugin.MediaData and AnalyticsPlugin.SessionData dictionaries to include additional data that you want attached to each log. This is particularly useful for VideoID, ...etc.&lt;br /&gt;
&lt;h2&gt;More data: Connecting the AdaptiveMonitor for Smooth Streaming information&lt;/h2&gt;See the &lt;a href="http://playerframework.codeplex.com/wikipage?title=Audience%20Insight&amp;amp;referringTitle=Analytics"&gt;Audience Insight getting started guide&lt;/a&gt; to learn about how to capture smooth streaming heuristics and diagnostics data.&lt;br /&gt;
&lt;h2&gt;More data: Capturing unhandled exceptions&lt;/h2&gt;See the &lt;a href="http://playerframework.codeplex.com/wikipage?title=Audience%20Insight&amp;amp;referringTitle=Analytics"&gt;Audience Insight getting started guide&lt;/a&gt; to learn about how to capture unhandled exceptions.&lt;br /&gt;
&lt;h2&gt;More data: Using the TrackingPlugin&lt;/h2&gt;The tracking plugin is a great way to know when specific milestones or playback positions have been reached by your user. These plugins can also generate logs that are automatically captured by the analytics plugin. All you have to do is make sure the events you are tracking have the Area property set to &amp;quot;Analytics&amp;quot;.&lt;br /&gt;See the &lt;a href="http://playerframework.codeplex.com/wikipage?title=Tracking%20and%20Markers&amp;amp;referringTitle=Windows%208%20Player%20Documentation"&gt;Tracking plugin documentation&lt;/a&gt; to learn about how to create playback and position events to track.&lt;br /&gt;
&lt;h2&gt;Your app can be a logging target too.&lt;/h2&gt;Instead of filtering, serializing and sending logs to a server, it is also possible to consume these logs locally. This can be useful for displaying diagnostic information in your app to help debug playback issues. As a proof of concept, we ported the &lt;a href="http://smf.cloudapp.net/healthmonitor"&gt;Silverlight Health Monitor&lt;/a&gt; to Windows 8 to demonstrate a novel use for this approach. Here you can see a subset of the data being logged and displayed into a real time monitor within your application.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=playerframework&amp;DownloadId=663276" alt="healthmonitor.png" title="healthmonitor.png" /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timgreenfield</author><pubDate>Fri, 12 Apr 2013 23:09:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Custom Logging Target 20130412110901P</guid></item><item><title>Updated Wiki: Custom Logging Target</title><link>https://playerframework.codeplex.com/wikipage?title=Custom Logging Target&amp;version=4</link><description>&lt;div class="wikidoc"&gt;Building your own logging target to capture logs generated by the analytics plugin is straight forward. You simply need to create a class that implements Microsoft.VideoAnalytics.ILoggingTarget. Note: if your app is a Windows 8 JavaScript app you just need to add a WinRT class library to your solution and built the logging target implementation in C#, VB, or C++.&lt;br /&gt;
&lt;h2&gt;Building an ILoggingTarget&lt;/h2&gt;ILoggingTarget is a very simple interface with only one method:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;namespace&lt;/span&gt; Microsoft.VideoAnalytics
{
    &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color:Gray;"&gt;///&lt;/span&gt;&lt;span style="color:Green;"&gt; An interface to allow an object to become a target of logging events.&lt;/span&gt;
    &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; ILoggingTarget
    {
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt;&lt;span style="color:Green;"&gt; Called to pass a new log to the target.&lt;/span&gt;
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;param name=&amp;quot;log&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:Green;"&gt;The log object that was generated.&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;void&lt;/span&gt; LogEntry(ILog log);
    }
}
&lt;/pre&gt;&lt;/div&gt;Once you register your implementation as a logging target, it will automatically receive all logs generated. &lt;br /&gt;
&lt;h2&gt;Using and understanding the logs&lt;/h2&gt;Each log implements ILog and can be cast to a specific log type to find out more details. There are dozens of different types of logs generated and even more if you wire up the AdaptiveMonitor (see next section below for more details).&lt;br /&gt;&lt;br /&gt;A typical way to read and utilize the logs received typically involves checking the object type and depending on the type, casting it to it&amp;#39;s true form and reading it&amp;#39;s high level properties.&lt;br /&gt;&lt;br /&gt;Here&amp;#39;s an example of what the code may look like:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; LogEntry(ILog log)
{
    &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; PerceivedBandwidthLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (PerceivedBandwidthLog)log;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.PerceivedBandwidth);
        chart.AddDataPoint(typedLog.PerceivedBandwidth / (1024 * 8));
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; BufferSizeLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (BufferSizeLog)log;
        ChartViewModel chart = &lt;span style="color:Blue;"&gt;null&lt;/span&gt;;
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;audio&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.AudioBufferSize);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;video&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.VideoBufferSize);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (chart != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        {
            chart.AddDataPoint(typedLog.BufferSize);
        }
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; ChunkDownloadLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (ChunkDownloadLog)log;
        ChartViewModel chart = &lt;span style="color:Blue;"&gt;null&lt;/span&gt;;
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;audio&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.AudioDownloadLatencyMilliseconds);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;video&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.VideoDownloadLatencyMilliseconds);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (chart != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        {
            chart.AddDataPoint(typedLog.DownloadTimeMs);
        }
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; BitrateChangedLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (BitrateChangedLog)log;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.BitRate);
        chart.AddDataPoint(typedLog.Bitrate);
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; BufferingChangedLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (BufferingChangedLog)log;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.IsBuffering);
        chart.AddDataPoint(typedLog.IsBuffering ? 1 : 0);
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; StreamLoadedLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; loadLog = log &lt;span style="color:Blue;"&gt;as&lt;/span&gt; StreamLoadedLog;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; bitrateChartData = Charts.First(vm =&amp;gt; vm.QualityAttribute == QualityCharts.BitRate);
        bitrateChartData.MaxValue = loadLog.MaxBitrate;
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Registering your custom logging target&lt;/h2&gt;To connect your logging target to the player framework, you only need one line of code:&lt;br /&gt;In JavaScript:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
Microsoft.VideoAnalytics.LoggingService.current.loggingTargets.append(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyNamespace.MyLoggingTarget());
&lt;/pre&gt;&lt;/div&gt;In C#:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
LoggingService.Current.LoggingTargets.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyLoggingTarget());
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;More data: add your own logs&lt;/h2&gt;It is equally easy to add your own data. Simply create a new ILog implementation for each log type you want to create and pass them into the logging service via:&lt;br /&gt;In JavaScript:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
Microsoft.VideoAnalytics.LoggingService.current.log(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyNamespace.MyLog());
&lt;/pre&gt;&lt;/div&gt;In C#:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
LoggingService.Current.Log(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyLog());
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Logs can also have data attached to them automatically by logging through the AnalyticsPlugin. Logs sent to this class will automatically be stamped with additional session and media specific data before they are sent to the LoggingService. To do this:&lt;br /&gt;In JavaScript:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
mediaPlayer.AnalyticsPlugin.log(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyNamespace.MyLog());
&lt;/pre&gt;&lt;/div&gt;In C#:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
analyticsPlugin.Log(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyLog());
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Note: add to the AnalyticsPlugin.MediaData and AnalyticsPlugin.SessionData dictionaries to include additional data that you want attached to each log. This is particularly useful for VideoID, ...etc.&lt;br /&gt;
&lt;h2&gt;More data: Connecting the AdaptiveMonitor for Smooth Streaming information&lt;/h2&gt;See the &lt;a href="http://playerframework.codeplex.com/wikipage?title=Audience%20Insight&amp;amp;referringTitle=Analytics"&gt;Audience Insight getting started guide&lt;/a&gt; to learn about how to capture smooth streaming heuristics and diagnostics data.&lt;br /&gt;
&lt;h2&gt;More data: Capturing unhandled exceptions&lt;/h2&gt;See the &lt;a href="http://playerframework.codeplex.com/wikipage?title=Audience%20Insight&amp;amp;referringTitle=Analytics"&gt;Audience Insight getting started guide&lt;/a&gt; to learn about how to capture unhandled exceptions.&lt;br /&gt;
&lt;h2&gt;More data: Using the TrackingPlugin&lt;/h2&gt;The tracking plugin is a great way to know when specific milestones or playback positions have been reached by your user. These plugins can also generate logs that are automatically captured by the analytics plugin. All you have to do is make sure the events you are tracking have the Area property set to &amp;quot;Analytics&amp;quot;.&lt;br /&gt;See the &lt;a href="http://playerframework.codeplex.com/wikipage?title=Tracking%20and%20Markers&amp;amp;referringTitle=Windows%208%20Player%20Documentation"&gt;Tracking plugin documentation&lt;/a&gt; to learn about how to create playback and position events to track.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timgreenfield</author><pubDate>Fri, 12 Apr 2013 23:01:32 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Custom Logging Target 20130412110132P</guid></item><item><title>Updated Wiki: Custom Logging Target</title><link>https://playerframework.codeplex.com/wikipage?title=Custom Logging Target&amp;version=3</link><description>&lt;div class="wikidoc"&gt;Building your own logging target to capture logs generated by the analytics plugin is straight forward. You simply need to create a class that implements Microsoft.VideoAnalytics.ILoggingTarget. Note: if your app is a Windows 8 JavaScript app you just need to add a WinRT class library to your solution and built the logging target implementation in C#, VB, or C++.&lt;br /&gt;
&lt;h2&gt;Building an ILoggingTarget&lt;/h2&gt;ILoggingTarget is a very simple interface with only one method:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;namespace&lt;/span&gt; Microsoft.VideoAnalytics
{
    &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color:Gray;"&gt;///&lt;/span&gt;&lt;span style="color:Green;"&gt; An interface to allow an object to become a target of logging events.&lt;/span&gt;
    &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; ILoggingTarget
    {
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt;&lt;span style="color:Green;"&gt; Called to pass a new log to the target.&lt;/span&gt;
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;param name=&amp;quot;log&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:Green;"&gt;The log object that was generated.&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;void&lt;/span&gt; LogEntry(ILog log);
    }
}
&lt;/pre&gt;&lt;/div&gt;Once you register your implementation as a logging target, it will automatically receive all logs generated. &lt;br /&gt;
&lt;h2&gt;Using and understanding the logs&lt;/h2&gt;Each log implements ILog and can be cast to a specific log type to find out more details. There are dozens of different types of logs generated and even more if you wire up the AdaptiveMonitor (see next section below for more details).&lt;br /&gt;&lt;br /&gt;A typical way to read and utilize the logs received typically involves checking the object type and depending on the type, casting it to it&amp;#39;s true form and reading it&amp;#39;s high level properties.&lt;br /&gt;&lt;br /&gt;Here&amp;#39;s an example of what the code may look like:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; LogEntry(ILog log)
{
    &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; PerceivedBandwidthLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (PerceivedBandwidthLog)log;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.PerceivedBandwidth);
        chart.AddDataPoint(typedLog.PerceivedBandwidth / (1024 * 8));
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; BufferSizeLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (BufferSizeLog)log;
        ChartViewModel chart = &lt;span style="color:Blue;"&gt;null&lt;/span&gt;;
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;audio&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.AudioBufferSize);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;video&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.VideoBufferSize);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (chart != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        {
            chart.AddDataPoint(typedLog.BufferSize);
        }
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; ChunkDownloadLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (ChunkDownloadLog)log;
        ChartViewModel chart = &lt;span style="color:Blue;"&gt;null&lt;/span&gt;;
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;audio&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.AudioDownloadLatencyMilliseconds);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;video&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.VideoDownloadLatencyMilliseconds);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (chart != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        {
            chart.AddDataPoint(typedLog.DownloadTimeMs);
        }
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; BitrateChangedLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (BitrateChangedLog)log;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.BitRate);
        chart.AddDataPoint(typedLog.Bitrate);
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; BufferingChangedLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (BufferingChangedLog)log;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.IsBuffering);
        chart.AddDataPoint(typedLog.IsBuffering ? 1 : 0);
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; StreamLoadedLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; loadLog = log &lt;span style="color:Blue;"&gt;as&lt;/span&gt; StreamLoadedLog;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; bitrateChartData = Charts.First(vm =&amp;gt; vm.QualityAttribute == QualityCharts.BitRate);
        bitrateChartData.MaxValue = loadLog.MaxBitrate;
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Registering your custom logging target&lt;/h2&gt;To connect your logging target to the player framework, you only need one line of code:&lt;br /&gt;In JavaScript:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
Microsoft.VideoAnalytics.LoggingService.current.loggingTargets.append(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyNamespace.MyLoggingTarget());
&lt;/pre&gt;&lt;/div&gt;In C#:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
LoggingService.Current.LoggingTargets.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyLoggingTarget());
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;More data: add your own logs&lt;/h2&gt;It is equally easy to add your own data. Simply create a new ILog implementation for each log type you want to create and pass them into the logging service via:&lt;br /&gt;In JavaScript:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
Microsoft.VideoAnalytics.LoggingService.current.log(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyNamespace.MyLog());
&lt;/pre&gt;&lt;/div&gt;In C#:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
LoggingService.Current.Log(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyLog());
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Logs can also have data attached to them automatically by logging through the AnalyticsPlugin. Logs sent to this class will automatically be stamped with additional session and media specific data before they are sent to the LoggingService. To do this:&lt;br /&gt;In JavaScript:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
mediaPlayer.AnalyticsPlugin.log(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyNamespace.MyLog());
&lt;/pre&gt;&lt;/div&gt;In C#:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
analyticsPlugin.Log(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyLog());
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Note: add to AnalyticsPlugin.MediaData and AnalyticsData.SessionData to populate it with values you want attached to each log.&lt;br /&gt;
&lt;h2&gt;More data: Connecting the AdaptiveMonitor for Smooth Streaming information&lt;/h2&gt;
&lt;h2&gt;More data: Using the TrackingPlugin&lt;/h2&gt;
&lt;h2&gt;Health monitor example&lt;/h2&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timgreenfield</author><pubDate>Fri, 12 Apr 2013 22:44:14 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Custom Logging Target 20130412104414P</guid></item><item><title>Updated Wiki: Custom Logging Target</title><link>https://playerframework.codeplex.com/wikipage?title=Custom Logging Target&amp;version=2</link><description>&lt;div class="wikidoc"&gt;Building your own logging target to capture logs generated by the analytics plugin is straight forward. You simply need to create a class that implements Microsoft.VideoAnalytics.ILoggingTarget. Note: if your app is a Windows 8 JavaScript app you just need to add a WinRT class library to your solution and built the logging target implementation in C#, VB, or C++.&lt;br /&gt;
&lt;h2&gt;Building an ILoggingTarget&lt;/h2&gt;ILoggingTarget is a very simple interface with only one method:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;namespace&lt;/span&gt; Microsoft.VideoAnalytics
{
    &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span style="color:Gray;"&gt;///&lt;/span&gt;&lt;span style="color:Green;"&gt; An interface to allow an object to become a target of logging events.&lt;/span&gt;
    &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;interface&lt;/span&gt; ILoggingTarget
    {
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt;&lt;span style="color:Green;"&gt; Called to pass a new log to the target.&lt;/span&gt;
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
        &lt;span style="color:Gray;"&gt;///&lt;/span&gt; &lt;span style="color:Gray;"&gt;&amp;lt;param name=&amp;quot;log&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="color:Green;"&gt;The log object that was generated.&amp;lt;/param&amp;gt;&lt;/span&gt;
        &lt;span style="color:Blue;"&gt;void&lt;/span&gt; LogEntry(ILog log);
    }
}
&lt;/pre&gt;&lt;/div&gt;Once you register your implementation as a logging target, it will automatically receive all logs generated. &lt;br /&gt;
&lt;h2&gt;Using and understanding the logs&lt;/h2&gt;Each log implements ILog and can be cast to a specific log type to find out more details. There are dozens of different types of logs generated and even more if you wire up the AdaptiveMonitor (see next section below for more details).&lt;br /&gt;&lt;br /&gt;A typical way to read and utilize the logs coming in may look something like this:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
&lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;void&lt;/span&gt; LogEntry(ILog log)
{
    &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; QualityReport)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; t = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =&amp;gt;
        {
            QualityReport.DataContext = log;
        });
    }
    &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; CpuLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (CpuLog)log;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.ProcessCPULoad);
        chart.AddDataPoint(typedLog.ProcessCpu);
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; PerceivedBandwidthLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (PerceivedBandwidthLog)log;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.PerceivedBandwidth);
        chart.AddDataPoint(typedLog.PerceivedBandwidth / (1024 * 8));
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; BufferSizeLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (BufferSizeLog)log;
        ChartViewModel chart = &lt;span style="color:Blue;"&gt;null&lt;/span&gt;;
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;audio&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.AudioBufferSize);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;video&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.VideoBufferSize);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (chart != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        {
            chart.AddDataPoint(typedLog.BufferSize);
        }
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; ChunkDownloadLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (ChunkDownloadLog)log;
        ChartViewModel chart = &lt;span style="color:Blue;"&gt;null&lt;/span&gt;;
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;audio&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.AudioDownloadLatencyMilliseconds);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (typedLog.StreamType == &lt;span style="color:#A31515;"&gt;&amp;quot;video&amp;quot;&lt;/span&gt;)
        {
            chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.VideoDownloadLatencyMilliseconds);
        }
        &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (chart != &lt;span style="color:Blue;"&gt;null&lt;/span&gt;)
        {
            chart.AddDataPoint(typedLog.DownloadTimeMs);
        }
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; BitrateChangedLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (BitrateChangedLog)log;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.BitRate);
        chart.AddDataPoint(typedLog.Bitrate);
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; BufferingChangedLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (BufferingChangedLog)log;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.IsBuffering);
        chart.AddDataPoint(typedLog.IsBuffering ? 1 : 0);
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; FpsLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; typedLog = (FpsLog)log;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; chart = Charts.First(c =&amp;gt; c.QualityAttribute == QualityCharts.RenderedFrames);
        chart.AddDataPoint(typedLog.RenderedFramesPerSecond);
        chart.MaxValue = typedLog.RenderedFramesPerSecond + typedLog.DroppedFramesPerSecond;
    }
    &lt;span style="color:Blue;"&gt;else&lt;/span&gt; &lt;span style="color:Blue;"&gt;if&lt;/span&gt; (log &lt;span style="color:Blue;"&gt;is&lt;/span&gt; StreamLoadedLog)
    {
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; loadLog = log &lt;span style="color:Blue;"&gt;as&lt;/span&gt; StreamLoadedLog;
        &lt;span style="color:Blue;"&gt;var&lt;/span&gt; bitrateChartData = Charts.First(vm =&amp;gt; vm.QualityAttribute == QualityCharts.BitRate);
        bitrateChartData.MaxValue = loadLog.MaxBitrate;
    }
}
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;Registering your custom logging target&lt;/h2&gt;To connect your logging target to the player framework, you only need one line of code:&lt;br /&gt;In JavaScript:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
Microsoft.VideoAnalytics.LoggingService.current.loggingTargets.append(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyNamespace.MyLoggingTarget());
&lt;/pre&gt;&lt;/div&gt;In C#:&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
LoggingService.Current.LoggingTargets.Add(&lt;span style="color:Blue;"&gt;new&lt;/span&gt; MyLoggingTarget());
&lt;/pre&gt;&lt;/div&gt;
&lt;h2&gt;More data: Connecting the AdaptiveMonitor for Smooth Streaming information&lt;/h2&gt;
&lt;h2&gt;More data: Using the TrackingPlugin&lt;/h2&gt;
&lt;h2&gt;Health monitor example&lt;/h2&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timgreenfield</author><pubDate>Fri, 12 Apr 2013 22:25:57 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Custom Logging Target 20130412102557P</guid></item><item><title>Updated Wiki: Custom Logging Target</title><link>https://playerframework.codeplex.com/wikipage?title=Custom Logging Target&amp;version=1</link><description>&lt;div class="wikidoc"&gt;placeholder&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timgreenfield</author><pubDate>Fri, 12 Apr 2013 22:08:22 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Custom Logging Target 20130412100822P</guid></item></channel></rss>