博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Silverlight媒体学习笔记(一):音频和视频
阅读量:5985 次
发布时间:2019-06-20

本文共 4568 字,大约阅读时间需要 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
="300"
d:DesignWidth
="400"
>
<
Grid
x:Name
="LayoutRoot"
Background
="White"
>
<
StackPanel
Margin
="40"
Width
="300"
>
<
StackPanel
Orientation
="Horizontal"
>
<
TextBlock
FontSize
="12"
Foreground
="DarkGray"
>
Time:
</
TextBlock
>
<
TextBlock
x:Name
="timeTextBlock"
FontSize
="12"
/>
</
StackPanel
>
<
StackPanel
Orientation
="Horizontal"
>
<
TextBlock
FontSize
="12"
Foreground
="DarkGray"
>
Type:
</
TextBlock
>
<
TextBlock
x:Name
="typeTextBlock"
FontSize
="12"
/>
</
StackPanel
>
<
StackPanel
Orientation
="Horizontal"
>
<
TextBlock
FontSize
="12"
Foreground
="DarkGray"
>
Value:
</
TextBlock
>
<
TextBlock
x:Name
="valueTextBlock"
FontSize
="12"
/>
</
StackPanel
>
<
StackPanel
>
<
Button
Click
="StopMedia"
Grid.Column
="0"
Grid.Row
="1"
Content
="Stop"
/>
<
Button
Click
="PauseMedia"
Grid.Column
="1"
Grid.Row
="1"
Content
="Pause"
/>
<
Button
Click
="PlayMedia"
Grid.Column
="2"
Grid.Row
="1"
Content
="Play"
/>
</
StackPanel
>
<!--
The MediaElement has the MarkerReached event attached.
-->
<
MediaElement
x:Name
="myMediaElemnet"
MarkerReached
="OnMarkerReached"
HorizontalAlignment
="Left"
Source
="thebutterflyandthebear.wmv"
Width
="300"
Height
="200"
/>
</
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 事件后此集合才被视为有效
public
partial
class
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(
0
,
0
,
1
);
temp.Type
=
"
123
"
;
TimelineMarker temp1
=
new
TimelineMarker();
temp1.Text
=
"
爱你
"
;
temp1.Time
=
new
TimeSpan(
0
,
0
,
2
);
temp1.Type
=
"
321
"
;
//
将时间线通过Markers赋给MediaElement
myMediaElemnet.Markers.Add(temp);
myMediaElemnet.Markers.Add(temp1);
}
//
达某一时间线标记时,将引发 MarkerReached 事件
private
void
OnMarkerReached(
object
sender, TimelineMarkerRoutedEventArgs e)
{
timeTextBlock.Text
=
e.Marker.Time.Seconds.ToString();
typeTextBlock.Text
=
e.Marker.Type.ToString();
valueTextBlock.Text
=
e.Marker.Text.ToString();
}
private
void
StopMedia(
object
sender, RoutedEventArgs e)
{
myMediaElemnet.Stop();
}
private
void
PauseMedia(
object
sender, RoutedEventArgs e)
{
myMediaElemnet.Pause();
}
private
void
PlayMedia(
object
sender, RoutedEventArgs e)
{
myMediaElemnet.Play();
}
}
}      

转载地址:http://hjulx.baihongyu.com/

你可能感兴趣的文章
CocoaPods详解之----进阶篇
查看>>
linux python升级和ipython的安装
查看>>
nginx 负载均衡
查看>>
Entity Framework Core 修改映射主键名称
查看>>
SQL 经典面试题
查看>>
为知笔记发布博客地址
查看>>
java - Math、system、BigDecimal、Date、SimpleDateFormat、Calendar类概述和方法使用
查看>>
[leetcode-107-Binary Tree Level Order Traversal II]
查看>>
iptables
查看>>
DEV CheckComboboxEdit、CheckedListBoxControl(转)
查看>>
MySQL跳过密码登录
查看>>
PLI 到 COBOL 的转换-数据类型 【不搞Mainframe的可能看不懂,冷门的语言】
查看>>
Tomcat学习总结(4)——基于Tomcat7、Java、WebSocket的服务器推送聊天室
查看>>
js_正则
查看>>
一些有用的技术文章
查看>>
Linux:shell登录过程
查看>>
linux 交叉编译出现的问题
查看>>
LruCache的缓存策略
查看>>
Android解析WindowManager(一)WindowManager体系
查看>>
MapReduce中的map个数
查看>>