100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
.NET

Silverlight Media Playback

How to play audio and video in Silverlight with the MediaElement control, handle playback and buffering events, and deliver adaptive bitrate video with Smooth Streaming.

Media and GraphicsIntermediate9 min readJul 10, 2026
Analogies

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.

xml
<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>
csharp
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

Was this page helpful?

Topics covered

#NET#SilverlightStudyNotes#MicrosoftTechnologies#SilverlightMediaPlayback#Silverlight#Media#Playback#Playing#StudyNotes#SkillVeris