silverlight视频、音频

时间:2023-03-08 16:48:15
几天发现MediaElement播放不了wav格式的音频文件,在网上找到一篇解决的文章:
本节学习Silverlight音频和视频,其中视频的时间线标记个人觉得很有用,我们可以在播放视频前,想在视频某个地方加入自己的东西(文本或动画、视频。。。)。可以用到TimelineMarker,加入时间线,当播放放到时间线时利用OnMarkerReached时间获取时间线来触发我们需要的操作(文本或动画、视频。。)
(1)前台代码
 <UserControl x:Class="MediaStudy.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="" d:DesignWidth=""> <Grid x:Name="LayoutRoot" Background="White">
<StackPanel Margin="" Width="">
<StackPanel Orientation="Horizontal">
<TextBlock FontSize="" Foreground="DarkGray">Time:</TextBlock>
<TextBlock x:Name="timeTextBlock" FontSize=""/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock FontSize="" Foreground="DarkGray">Type:</TextBlock>
<TextBlock x:Name="typeTextBlock" FontSize=""/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock FontSize="" Foreground="DarkGray">Value:</TextBlock>
<TextBlock x:Name="valueTextBlock" FontSize=""/>
</StackPanel>
<StackPanel>
<Button Click="StopMedia"
Grid.Column="" Grid.Row="" Content="Stop"/>
<Button Click="PauseMedia"
Grid.Column="" Grid.Row="" Content="Pause"/>
<Button Click="PlayMedia"
Grid.Column="" Grid.Row="" Content="Play"/>
</StackPanel>
<!-- The MediaElement has the MarkerReached event attached. -->
<MediaElement x:Name="myMediaElemnet" MarkerReached="OnMarkerReached" HorizontalAlignment="Left" Source="thebutterflyandthebear.wmv"
Width="" Height=""/>
</StackPanel>
</Grid>
</UserControl>

(2)后台代码如下

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes; namespace MediaStudy
{ //音频视频
//(一)MediaElement 对象:向页面添加媒体的操作十分简单,只需将 MediaElement 添加到标记并为要播放的媒体提供统一资源标识符 (URI)
//(1)AutoPlay:指定 MediaElement 是否应自动开始播放。默认值为 true。
//(2)IsMuted:指定 MediaElement 是否静音。true 值将使 MediaElement 静音。默认值为 false。
//(3)Stretch:指定如何拉伸视频以填充 MediaElement 对象。可能值为 None、Uniform、UniformToFill 和 Fill。默认值为 Fill。有关更多信息,请参见 Stretch 枚举。
//(4)Volume:指定介于 0 到 1 的 MediaElement 对象的音频音量值,1 表示最大音量。默认值为 0.5。
//(二)视频播放机:包括播放控制,进度/查找滑块以及全屏切换
//1)TimelineMarker类时间线标记(同步点):与媒体文件中的特定点关联的元数据
// (1)通常是事先创建的,存储在媒体文件本身中
// (2)通常用于命名视频中的不同场景,允许用户查找所选位置或提供脚本提示
// (3)在播放期间当 MediaElement 到达某一时间线标记时,将引发 MarkerReached 事件。
// (4)TimelineMarker对象提供以下属性,用于描述时间、名称和值:
//Time:指定到达标记的时间的 TimeSpan 结构。
//Type:指定标记类型的字符串。此值可以是用户定义的任意字符串。
//Text:指定标记值的字符串。此值可以是用户定义的任意字符串。
// (5)MediaElement 对象的 Markers 属性允许您访问存储在当前播放的媒体文件中的嵌入了标头的标记。还可以使用此属性添加新的时间线标记
// 定义媒体标记有二种方法方法:
// a.使用某个编辑器(如 Windows Media 文件编辑器,作为 Windows Media Encoder 9 系统的一部分安装)
// b.TimelineMarker 对象并通过 Markers 属性将这些对象添加到 MediaElement(这些时间线标记是临时的,如果加入新的媒体会丢失)
//2)MediaElement.Markers属性:获取与当前加载的媒体文件相关联的时间线标记的集合。
// (1)每次当此 MediaElement 打开一个新的源文件时,都会清除和重新填充此集合
// (2)并且仅当发生 MediaOpened 事件后此集合才被视为有效 publicpartialclass MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
this.Loaded +=new RoutedEventHandler(MainPage_Loaded); } void MainPage_Loaded(object sender, RoutedEventArgs e)
{
myMediaElemnet.AutoPlay =false;
myMediaElemnet.MediaOpened +=new RoutedEventHandler(myMediaElemnet_MediaOpened); } //添加新的时间线标记(并且仅当发生 MediaOpened 事件后此集合才被视为有效)
void myMediaElemnet_MediaOpened(object sender, RoutedEventArgs e)
{
//创建时间线
TimelineMarker temp =new TimelineMarker();
temp.Text ="喜欢你";
temp.Time =new TimeSpan(, , );
temp.Type ="";
TimelineMarker temp1 =new TimelineMarker();
temp1.Text ="爱你";
temp1.Time =new TimeSpan(, , );
temp1.Type ="";
//将时间线通过Markers赋给MediaElement
myMediaElemnet.Markers.Add(temp);
myMediaElemnet.Markers.Add(temp1);
} //达某一时间线标记时,将引发 MarkerReached 事件
privatevoid OnMarkerReached(object sender, TimelineMarkerRoutedEventArgs e)
{
timeTextBlock.Text = e.Marker.Time.Seconds.ToString();
typeTextBlock.Text = e.Marker.Type.ToString();
valueTextBlock.Text = e.Marker.Text.ToString();
}
privatevoid StopMedia(object sender, RoutedEventArgs e)
{
myMediaElemnet.Stop();
}
privatevoid PauseMedia(object sender, RoutedEventArgs e)
{
myMediaElemnet.Pause();
}
privatevoid PlayMedia(object sender, RoutedEventArgs e)
{
myMediaElemnet.Play();
} }
}

原文转自:http://www.cnblogs.com/Joetao/category/265735.html