Playing Media with MediaElement
Silverlight's MediaElement control is the core building block for embedding audio and video in a XAML application. It supports progressive download of WMV/WMA and MP3 files as well as H.264/AAC content, and exposes Source, AutoPlay, and Volume properties that let you control playback declaratively from markup or imperatively from code-behind.
Cricket analogy: It's like a broadcaster setting up the pre-match feed on Star Sports, choosing the video source, whether the highlights reel autoplays the moment you tune in, and the commentary volume, all before a ball is bowled.
Configuring Playback and Buffering
Beyond simple Source binding, MediaElement exposes Play(), Pause(), and Stop() methods along with a Position property for seeking. BufferingProgress and DownloadProgress report how much of the media has arrived, which matters most when the source is a live or adaptive stream rather than a small progressively downloaded file.
Cricket analogy: Hawk-Eye operators scrub to the exact ball-tracking frame using the Position slider, while a separate progress bar shows how much of the DRS replay has buffered before the third umpire can review it.
Handling Media Events
Robust players wire up MediaOpened, MediaEnded, MediaFailed, and CurrentStateChanged events to build custom transport controls. MediaOpened fires once metadata (duration, dimensions) is available, MediaFailed surfaces codec or network errors, and CurrentStateChanged lets an app track transitions like Opening, Buffering, Playing, and Paused to drive its UI.
Cricket analogy: A scoreboard operator listens for the innings-ended signal to switch the LED display, the same way MediaEnded fires so a Silverlight app can swap in a watch-again button.
<Grid x:Name="LayoutRoot">
<MediaElement x:Name="Player"
Source="Videos/keynote.wmv"
AutoPlay="False"
Volume="0.8"
MediaOpened="Player_MediaOpened"
MediaEnded="Player_MediaEnded"
MediaFailed="Player_MediaFailed"
CurrentStateChanged="Player_CurrentStateChanged" />
<TimelineMarker Time="00:01:30" Type="CaptionCue" Text="Chapter 2" />
</Grid>private void Player_CurrentStateChanged(object sender, RoutedEventArgs e)
{
switch (Player.CurrentState)
{
case MediaElementState.Buffering:
Spinner.Visibility = Visibility.Visible;
break;
case MediaElementState.Playing:
Spinner.Visibility = Visibility.Collapsed;
break;
}
}
private void Player_MediaFailed(object sender, ExceptionRoutedEventArgs e)
{
ErrorText.Text = "Playback failed: " + e.ErrorException.Message;
}TimelineMarker objects embedded in a media file (or added in code) let a Silverlight app raise a MarkerReached event at precise timestamps, which is commonly used to sync closed captions, chapter markers, or mid-roll ad cues to the video timeline.
Adaptive Streaming with Smooth Streaming
For longer-form or live video, Silverlight clients can consume IIS Smooth Streaming, which encodes content into fragmented MP4 at multiple bitrates and describes them in a server manifest (.ism/.ismc). The client requests individual fragments and continuously measures bandwidth and CPU headroom, switching to a higher or lower bitrate rendition between fragments without a visible pause or re-buffer.
Cricket analogy: A streaming platform automatically drops from 1080p to 480p mid-over when your hostel wifi during an IPL match weakens, exactly how Smooth Streaming's client switches bitrates using the .ismc manifest without interrupting playback.
Cross-domain media playback requires a clientaccesspolicy.xml or crossdomain.xml file on the media server, and PlayReady-protected Smooth Streaming content needs a licensed DRM component; forgetting either will cause MediaFailed to fire with a security or license-acquisition exception rather than a codec error.
- MediaElement plays WMV/WMA, MP3, and H.264/AAC content via progressive download or streaming.
- Play(), Pause(), Stop(), and Position give programmatic transport control.
- MediaOpened, MediaEnded, MediaFailed, and CurrentStateChanged drive custom player UI.
- TimelineMarker enables cue points for captions, chapters, or ad breaks.
- Smooth Streaming delivers fragmented MP4 at multiple bitrates described by an .ism/.ismc manifest.
- The client adapts bitrate between fragments based on measured bandwidth and CPU, avoiding visible rebuffering.
- Cross-domain media access needs a policy file, and protected content needs a PlayReady license.
Practice what you learned
1. Which MediaElement event fires once duration and dimensions are known and safe to read?
2. What does IIS Smooth Streaming primarily deliver to enable adaptive bitrate playback?
3. Which property lets a developer programmatically seek to a specific point in a loaded media file?
4. What is a TimelineMarker used for?
5. What commonly causes MediaFailed to fire when loading media from a different domain?
Was this page helpful?
You May Also Like
Silverlight Deep Zoom
How Silverlight's Deep Zoom technology uses multi-resolution tile pyramids and the MultiScaleImage control to smoothly pan and zoom into gigapixel-scale imagery.
Silverlight Graphics and Animation
How Silverlight's vector shape system, brushes, and Storyboard-driven animations combine to build smooth, scalable interactive UI.
Related Reading
Related Study Notes in Microsoft Technologies
Browse all study notesWindows 10 / UWP Development Study Notes
.NET · 30 topics
Microsoft TechnologiesWindows Batch Scripting Study Notes
Batch · 30 topics
Microsoft TechnologiesMFC (Microsoft Foundation Classes) Study Notes
C++ · 30 topics
Microsoft TechnologiesXAML Study Notes
.NET · 30 topics
Microsoft TechnologiesWPF (Windows Presentation Foundation) Study Notes
.NET · 30 topics
Microsoft TechnologiesMVVM Design Pattern Study Notes
.NET · 30 topics