首页 > 代码库 > silverlight视频、音频
silverlight视频、音频
几天发现MediaElement播放不了wav格式的音频文件,在网上找到一篇解决的文章:
http://www.cnblogs.com/rupeng/archive/2011/02/20/1959360.html
本节学习Silverlight音频和视频,其中视频的时间线标记个人觉得很有用,我们可以在播放视频前,想在视频某个地方加入自己的东西(文本或动画、视频。。。)。可以用到TimelineMarker,加入时间线,当播放放到时间线时利用OnMarkerReached时间获取时间线来触发我们需要的操作(文本或动画、视频。。)
(1)前台代码
1 <UserControl x:Class="MediaStudy.MainPage" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 mc:Ignorable="d" 7 d:DesignHeight="300" d:DesignWidth="400"> 8 9 <Grid x:Name="LayoutRoot" Background="White">10 <StackPanel Margin="40" Width="300">11 <StackPanel Orientation="Horizontal">12 <TextBlock FontSize="12" Foreground="DarkGray">Time:</TextBlock>13 <TextBlock x:Name="timeTextBlock" FontSize="12"/>14 </StackPanel>15 <StackPanel Orientation="Horizontal">16 <TextBlock FontSize="12" Foreground="DarkGray">Type:</TextBlock>17 <TextBlock x:Name="typeTextBlock" FontSize="12"/>18 </StackPanel>19 <StackPanel Orientation="Horizontal">20 <TextBlock FontSize="12" Foreground="DarkGray">Value:</TextBlock>21 <TextBlock x:Name="valueTextBlock" FontSize="12"/>22 </StackPanel>23 <StackPanel> 24 <Button Click="StopMedia" 25 Grid.Column="0" Grid.Row="1" Content="Stop"/> 26 <Button Click="PauseMedia" 27 Grid.Column="1" Grid.Row="1" Content="Pause"/>28 <Button Click="PlayMedia" 29 Grid.Column="2" Grid.Row="1" Content="Play"/>30 </StackPanel>31 <!-- The MediaElement has the MarkerReached event attached. -->32 <MediaElement x:Name="myMediaElemnet" MarkerReached="OnMarkerReached" HorizontalAlignment="Left" Source="thebutterflyandthebear.wmv"33 Width="300" Height="200"/>34 </StackPanel>35 </Grid>36 </UserControl>
(2)后台代码如下
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Net; 5 using System.Windows; 6 using System.Windows.Controls; 7 using System.Windows.Documents; 8 using System.Windows.Input; 9 using System.Windows.Media;10 using System.Windows.Media.Animation;11 using System.Windows.Shapes;12 13 namespace MediaStudy14 {15 16 //音频视频17 //(一)MediaElement 对象:向页面添加媒体的操作十分简单,只需将 MediaElement 添加到标记并为要播放的媒体提供统一资源标识符 (URI) 18 //(1)AutoPlay:指定 MediaElement 是否应自动开始播放。默认值为 true。19 //(2)IsMuted:指定 MediaElement 是否静音。true 值将使 MediaElement 静音。默认值为 false。20 //(3)Stretch:指定如何拉伸视频以填充 MediaElement 对象。可能值为 None、Uniform、UniformToFill 和 Fill。默认值为 Fill。有关更多信息,请参见 Stretch 枚举。21 //(4)Volume:指定介于 0 到 1 的 MediaElement 对象的音频音量值,1 表示最大音量。默认值为 0.5。 22 //(二)视频播放机:包括播放控制,进度/查找滑块以及全屏切换23 //1)TimelineMarker类时间线标记(同步点):与媒体文件中的特定点关联的元数据24 // (1)通常是事先创建的,存储在媒体文件本身中25 // (2)通常用于命名视频中的不同场景,允许用户查找所选位置或提供脚本提示26 // (3)在播放期间当 MediaElement 到达某一时间线标记时,将引发 MarkerReached 事件。27 // (4)TimelineMarker对象提供以下属性,用于描述时间、名称和值: 28 //Time:指定到达标记的时间的 TimeSpan 结构。29 //Type:指定标记类型的字符串。此值可以是用户定义的任意字符串。30 //Text:指定标记值的字符串。此值可以是用户定义的任意字符串。31 // (5)MediaElement 对象的 Markers 属性允许您访问存储在当前播放的媒体文件中的嵌入了标头的标记。还可以使用此属性添加新的时间线标记 32 // 定义媒体标记有二种方法方法:33 // a.使用某个编辑器(如 Windows Media 文件编辑器,作为 Windows Media Encoder 9 系统的一部分安装)34 // b.TimelineMarker 对象并通过 Markers 属性将这些对象添加到 MediaElement(这些时间线标记是临时的,如果加入新的媒体会丢失) 35 //2)MediaElement.Markers属性:获取与当前加载的媒体文件相关联的时间线标记的集合。36 // (1)每次当此 MediaElement 打开一个新的源文件时,都会清除和重新填充此集合37 // (2)并且仅当发生 MediaOpened 事件后此集合才被视为有效38 39 40 41 publicpartialclass MainPage : UserControl 42 {43 public MainPage()44 {45 InitializeComponent();46 this.Loaded +=new RoutedEventHandler(MainPage_Loaded);47 48 }49 50 void MainPage_Loaded(object sender, RoutedEventArgs e)51 {52 myMediaElemnet.AutoPlay =false; 53 myMediaElemnet.MediaOpened +=new RoutedEventHandler(myMediaElemnet_MediaOpened); 54 55 }56 57 //添加新的时间线标记(并且仅当发生 MediaOpened 事件后此集合才被视为有效)58 void myMediaElemnet_MediaOpened(object sender, RoutedEventArgs e)59 {60 //创建时间线61 TimelineMarker temp =new TimelineMarker();62 temp.Text ="喜欢你";63 temp.Time =new TimeSpan(0, 0, 1);64 temp.Type ="123";65 TimelineMarker temp1 =new TimelineMarker();66 temp1.Text ="爱你";67 temp1.Time =new TimeSpan(0, 0, 2);68 temp1.Type ="321";69 //将时间线通过Markers赋给MediaElement70 myMediaElemnet.Markers.Add(temp);71 myMediaElemnet.Markers.Add(temp1);72 }73 74 //达某一时间线标记时,将引发 MarkerReached 事件75 privatevoid OnMarkerReached(object sender, TimelineMarkerRoutedEventArgs e)76 {77 timeTextBlock.Text = e.Marker.Time.Seconds.ToString();78 typeTextBlock.Text = e.Marker.Type.ToString();79 valueTextBlock.Text = e.Marker.Text.ToString();80 }81 privatevoid StopMedia(object sender, RoutedEventArgs e)82 {83 myMediaElemnet.Stop();84 }85 privatevoid PauseMedia(object sender, RoutedEventArgs e)86 {87 myMediaElemnet.Pause();88 }89 privatevoid PlayMedia(object sender, RoutedEventArgs e)90 {91 myMediaElemnet.Play();92 }93 94 95 }96 }
原文转自:http://www.cnblogs.com/Joetao/category/265735.html
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。