mediaElement是Silverlight提供多媒体元素 它可以播放视频 音乐等
MediaElement 支持的格式
视频
原始视频
YV12 - YCrCb(4:2:0)
RGBA - 32 位 Alpha、红色、绿色、蓝色
WMV1:Windows Media Video 7
WMV2:Windows Media Video 8
WMV3:Windows Media Video 9
支持简单配置文件和主配置文件。
仅支持渐进式(逐行扫描)内容。
WMVA:Windows Media 视频高级配置文件,非 VC-1
WVC1:Windows Media 视频高级配置文件,VC-1
支持高级配置文件。
仅支持渐进式(逐行扫描)内容。
H264 (ITU-T H.264 / ISO MPEG-4 AVC)
支持 H.264 和 MP43 编解码器。
支持基本配置文件、主配置文件和高配置文件。
仅支持渐进式(逐行扫描)内容。
仅支持 4:2:0 色度二次采样配置文件。
支持具有 Mp4 的 PlayReady DRM(H264 和 AAC-LC)
音频
“1”.这是线性 8 位或 16 位脉冲编码调制。大致来说,这是 WAV 格式。
"353"- Microsoft Windows Media Audio v7、v8 和 v9.x Standard (WMA Standard)
"354"- Microsoft Windows Media Audio v9.x 和 v10 Professional (WMA Professional)
支持 32-96 kbps 范围内的 WMA 10 Professional 低比特率 (LBR) 模式的全保真解码。
多声道(5.1 和 7.1 环绕)音频内容自动混缩为立体声。
24 位音频将返回静音。
采样率超过 48000 将在同域时返回无效格式错误代码,在跨域时返回 4001。
"85"- ISO MPEG-1 第三层 (MP3)
"255"- ISO 高级音频编码 (AAC)
支持达到全保真的低复杂度 (AAC-LC) 解码(最高 48 kHz)。
高效 (HE-AAC) 编码内容将仅解码为半保真(最高 24 kHz)。
不支持多声道(5.1 环绕)音频内容。
xaml代码
<Grid x:Name="LayoutRoot" Background="White">
<MediaElement Height="247" HorizontalAlignment="Left" Margin="12,12,0,0" Name="mediaElement1" VerticalAlignment="Top" Width="576" CurrentStateChanged="mediaElement1_CurrentStateChanged" BufferingProgressChanged="mediaElement1_BufferingProgressChanged" AutoPlay="False" />
<Button Content="播放" Height="23" HorizontalAlignment="Left" Margin="12,288,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
<Button Content="暂停" Height="23" HorizontalAlignment="Left" Margin="113,288,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="button2_Click" />
<Button Content="停止" Height="23" HorizontalAlignment="Left" Margin="213,288,0,0" Name="button3" VerticalAlignment="Top" Width="75" Click="button3_Click" />
<Button Content="静音" Height="23" HorizontalAlignment="Left" Margin="321,288,0,0" Name="button4" VerticalAlignment="Top" Width="75" Click="button4_Click" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="12,331,0,0" Name="textBlock1" Text="当前状态;" VerticalAlignment="Top" />
<sdk:Label Height="23" HorizontalAlignment="Left" Margin="68,331,0,0" Name="label1" VerticalAlignment="Top" Width="120" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="12,360,0,0" Name="textBlock2" Text="当前进度;" VerticalAlignment="Top" />
<Slider Height="23" HorizontalAlignment="Left" Margin="68,360,0,0" Name="slider1" VerticalAlignment="Top" Width="455" ValueChanged="slider1_ValueChanged" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="12,392,0,0" Name="textBlock3" Text="当前时间;" VerticalAlignment="Top" />
<sdk:Label Height="23" HorizontalAlignment="Left" Margin="68,392,0,0" Name="label2" VerticalAlignment="Top" Width="157" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="7,259,0,0" Name="textBlock4" Text="当前缓冲;" VerticalAlignment="Top" />
<sdk:Label Height="23" HorizontalAlignment="Left" Margin="62,259,0,0" Name="label3" VerticalAlignment="Top" Width="120" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="388,259,0,0" Name="textBlock5" Text="音量;" VerticalAlignment="Top" />
<Slider Height="23" HorizontalAlignment="Left" Margin="423,259,0,0" Name="slider2" VerticalAlignment="Top" Width="100" ValueChanged="slider2_ValueChanged" />
<sdk:Label Height="28" HorizontalAlignment="Left" Margin="529,259,0,0" Name="label4" VerticalAlignment="Top" Width="59" />
</Grid>
cs代码
public partial class Media : UserControl
{
System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();
public Media()
{
InitializeComponent();
timer.Interval = new TimeSpan(600);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
mediaElement1.Source = new Uri("[OPFansMaplesnow][One_Piece][497][848x480].wmv", UriKind.Relative);
}
void timer_Tick(object sender, EventArgs e)
{
//更新播放时间
if (mediaElement1.CurrentState == MediaElementState.Playing)
{
slider1.ValueChanged -= slider1_ValueChanged;
slider1.Value = (mediaElement1.Position.TotalSeconds / mediaElement1.NaturalDuration.TimeSpan.TotalSeconds) * 10;
slider1.ValueChanged += slider1_ValueChanged;
label2.Content = string.Format("{0:D2}:{1:D2}:{2:D2}", mediaElement1.Position.Hours, mediaElement1.Position.Minutes, mediaElement1.Position.Seconds);
}
}
private void mediaElement1_CurrentStateChanged(object sender, RoutedEventArgs e)
{
//当前状态
label1.Content = mediaElement1.CurrentState;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
//播放
mediaElement1.Play();
}
private void button2_Click(object sender, RoutedEventArgs e)
{
//暂停
mediaElement1.Pause();
}
private void button3_Click(object sender, RoutedEventArgs e)
{
//停止
mediaElement1.Stop();
}
private void button4_Click(object sender, RoutedEventArgs e)
{
//静音
mediaElement1.IsMuted = !mediaElement1.IsMuted;
}
private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
//进度
if (mediaElement1.CanSeek)
{
mediaElement1.Position = TimeSpan.FromSeconds((mediaElement1.NaturalDuration.TimeSpan.TotalSeconds * slider1.Value)/10);
}
}
private void mediaElement1_BufferingProgressChanged(object sender, RoutedEventArgs e)
{
//缓冲
label3.Content = mediaElement1.BufferingProgress * 100;
}
private void slider2_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
//音量控制
double d = (double)(((double)slider2.Value)/10);
mediaElement1.Volume = d;
label4.Content =(double.Parse( d.ToString("F2"))*100)+"%";
}
}
显示效果