<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>allbacktomine - VideoBrush</title>
    <link>http://www.allbacktomine.com/blog/</link>
    <description>newtelligence powered</description>
    <language>en-us</language>
    <copyright>Sherwin Rice</copyright>
    <lastBuildDate>Tue, 10 Jun 2008 12:37:12 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>sherwin@allbacktomine.com</managingEditor>
    <webMaster>sherwin@allbacktomine.com</webMaster>
    <item>
      <trackback:ping>http://www.allbacktomine.com/blog/Trackback.aspx?guid=fecd99bd-69fa-448b-ad85-acd6094451f7</trackback:ping>
      <pingback:server>http://www.allbacktomine.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.allbacktomine.com/blog/PermaLink,guid,fecd99bd-69fa-448b-ad85-acd6094451f7.aspx</pingback:target>
      <dc:creator>Sherwin</dc:creator>
      <wfw:comment>http://www.allbacktomine.com/blog/CommentView,guid,fecd99bd-69fa-448b-ad85-acd6094451f7.aspx</wfw:comment>
      <wfw:commentRss>http://www.allbacktomine.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fecd99bd-69fa-448b-ad85-acd6094451f7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I've been working on a video player app
over the last few weeks using Silverlight 2.0 Beta 1, so <a href="http://weblogs.asp.net/scottgu/archive/2008/06/06/silverlight-2-beta2-released.aspx">when
beta 2 was released</a> last week I was intrigued to see whether my app would still
work; and the short answer is that it did not :-(<br /><br />
The easy bits to fix were the compile time errors, and i'd been expecting a few of
them having read the<a href="http://msdn.microsoft.com/en-us/library/cc645049%28VS.95%29.aspx"> beta
2 breaking changes doc</a> in advance whilst waiting for beta 2 to download. The problem
that stumped me was the video playback at runtime: I was hearing the audio but <i>no</i> video
was displaying.<br /><br />
The method i'm using for video playback is to use a hidden MediaElement to play the
video, and then use a <a href="http://msdn.microsoft.com/en-us/library/bb404773.aspx">VideoBrush </a>to
'paint' the video onto a Rectangle; You 'attach' the VideoBrush to a MediaElement
by setting the VideoBrush.SourceName=MediaElement.Name. 
<br /><br />
Both my MediaElement and VideoBrush are created dynamically in the codebehind, and
because because we need the MediaElement to have a Name we have to use <a href="http://msdn.microsoft.com/en-us/library/cc190359%28VS.95%29.aspx">XamlReader.Load()</a> to
create the MediaElement, because the Name property is read only and can not be set
from within your code: <br /><br /><pre class="c-sharp" name="code">MediaElement me1= XamlReader.Load(@"&lt;MediaElement 
<br />
                                xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' 
<br />
                                Name='me1'
Opacity='0' /&gt;") as MediaElement;<br />
LayoutRoot.Children.Add(mediaElement);<br />
VideoBrush vb = new VideoBrush();<br />
vb.SourceName = me1.Name;<br />
MyRectangle.Fill=vb; </pre><p>
That code works fine in beta 1, but in beta 2 MyRectangle remains blank!
</p><p>
The clue to fixing this is included in the <a href="http://msdn.microsoft.com/en-us/library/cc645049%28VS.95%29.aspx">breaking
changes doc</a>:
</p><blockquote><p><span value="XamlReader.Load(string)" sdata="langKeyword"><span class="keyword"><a>"XamlReader.Load(string)</a></span></span><a> has
been changed to always create an implicit namescope."</a></p></blockquote>So what appears to be happening under beta 2 is that the VideoBrush is
searching for a MediaElement named 'me1' in the default Xaml namescope, but it can
not find it as me1 was created in its own implicit namescope.<br /><br /><br />
So how do we fix this? The method I have used is to create the VisualBrush within
the same namescope as the MediaElement, and i've done this by including the VisualBrush
in the MediaElement's Resources:<br /><br /><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><p><span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><pre class="c-sharp" name="code">MediaElement me1 = XamlReader.Load(@"&lt;MediaElement<br />
                                 xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'<br />
                                 Name='me1'
AutoPlay='False' Opacity='0.0' IsHitTestVisible='False' &gt;<br />
                                    &lt;MediaElement.Resources&gt;<br />
                                       &lt;VideoBrush
Name='vb1' SourceName='me1'/&gt;<br />
                                    &lt;/MediaElement.Resources&gt;<br />
                                    &lt;/MediaElement&gt;")
as MediaElement;<br />
VideoBrush vb = me1.FindName("vb1") as VideoBrush;<br />
MyRectangle.Fill=vb; </pre><br /><font face="Verdana" size="2">After doing this, MyRectangle once again displays the
video :-)</font><br /><p><br /></p><p><br /></p><p></p></span></p><p></p></span><img width="0" height="0" src="http://www.allbacktomine.com/blog/aggbug.ashx?id=fecd99bd-69fa-448b-ad85-acd6094451f7" /></body>
      <title>Silverlight Beta 2 broke my VideoBrush</title>
      <guid isPermaLink="false">http://www.allbacktomine.com/blog/PermaLink,guid,fecd99bd-69fa-448b-ad85-acd6094451f7.aspx</guid>
      <link>http://www.allbacktomine.com/blog/2008/06/10/SilverlightBeta2BrokeMyVideoBrush.aspx</link>
      <pubDate>Tue, 10 Jun 2008 12:37:12 GMT</pubDate>
      <description>I've been working on a video player app over the last few weeks using Silverlight 2.0 Beta 1, so &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/06/06/silverlight-2-beta2-released.aspx"&gt;when
beta 2 was released&lt;/a&gt; last week I was intrigued to see whether my app would still
work; and the short answer is that it did not :-(&lt;br&gt;
&lt;br&gt;
The easy bits to fix were the compile time errors, and i'd been expecting a few of
them having read the&lt;a href="http://msdn.microsoft.com/en-us/library/cc645049%28VS.95%29.aspx"&gt; beta
2 breaking changes doc&lt;/a&gt; in advance whilst waiting for beta 2 to download. The problem
that stumped me was the video playback at runtime: I was hearing the audio but &lt;i&gt;no&lt;/i&gt; video
was displaying.&lt;br&gt;
&lt;br&gt;
The method i'm using for video playback is to use a hidden MediaElement to play the
video, and then use a &lt;a href="http://msdn.microsoft.com/en-us/library/bb404773.aspx"&gt;VideoBrush &lt;/a&gt;to
'paint' the video onto a Rectangle; You 'attach' the VideoBrush to a MediaElement
by setting the VideoBrush.SourceName=MediaElement.Name. 
&lt;br&gt;
&lt;br&gt;
Both my MediaElement and VideoBrush are created dynamically in the codebehind, and
because because we need the MediaElement to have a Name we have to use &lt;a href="http://msdn.microsoft.com/en-us/library/cc190359%28VS.95%29.aspx"&gt;XamlReader.Load()&lt;/a&gt; to
create the MediaElement, because the Name property is read only and can not be set
from within your code:&amp;nbsp;&lt;br&gt;
&lt;br&gt;
&lt;pre class=c-sharp name="code"&gt;MediaElement me1= XamlReader.Load(@"&amp;lt;MediaElement 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' 
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Name='me1'
Opacity='0' /&amp;gt;") as MediaElement;&lt;br&gt;
LayoutRoot.Children.Add(mediaElement);&lt;br&gt;
VideoBrush vb = new VideoBrush();&lt;br&gt;
vb.SourceName = me1.Name;&lt;br&gt;
MyRectangle.Fill=vb; &lt;/pre&gt;
&lt;p&gt;
That code works fine in beta 1, but in beta 2 MyRectangle remains blank!
&lt;/p&gt;
&lt;p&gt;
The clue to fixing this is included in the &lt;a href="http://msdn.microsoft.com/en-us/library/cc645049%28VS.95%29.aspx"&gt;breaking
changes doc&lt;/a&gt;:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;span value="XamlReader.Load(string)" sdata="langKeyword"&gt;&lt;span class=keyword&gt;&lt;a&gt;"XamlReader.Load(string)&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;a&gt; has
been changed to always create an implicit namescope."&lt;/a&gt;
&lt;/p&gt;
&lt;/blockquote&gt;So what appears to be happening under beta 2 is that the VideoBrush is
searching for a MediaElement named 'me1' in the default Xaml namescope, but it can
not find it as me1 was created in its own implicit namescope.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
So how do we fix this? The method I have used is to create the VisualBrush within
the same namescope as the MediaElement, and i've done this by including the VisualBrush
in the MediaElement's Resources:&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt; 
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;pre class=c-sharp name="code"&gt;MediaElement me1 = XamlReader.Load(@"&amp;lt;MediaElement&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Name='me1'
AutoPlay='False' Opacity='0.0' IsHitTestVisible='False' &amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;MediaElement.Resources&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;VideoBrush
Name='vb1' SourceName='me1'/&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/MediaElement.Resources&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/MediaElement&amp;gt;")
as MediaElement;&lt;br&gt;
VideoBrush vb = me1.FindName("vb1") as VideoBrush;&lt;br&gt;
MyRectangle.Fill=vb; &lt;/pre&gt;
&lt;br&gt;
&lt;font face=Verdana size=2&gt;After doing this, MyRectangle once again displays the video
:-)&lt;/font&gt;
&lt;br&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;/span&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;/span&gt;&lt;img width="0" height="0" src="http://www.allbacktomine.com/blog/aggbug.ashx?id=fecd99bd-69fa-448b-ad85-acd6094451f7" /&gt;</description>
      <comments>http://www.allbacktomine.com/blog/CommentView,guid,fecd99bd-69fa-448b-ad85-acd6094451f7.aspx</comments>
      <category>Silverlight </category>
      <category>VideoBrush</category>
    </item>
  </channel>
</rss>