zoukankan      html  css  js  c++  java
  • silverlight视频、音频

    几天发现MediaElement播放不了wav格式的音频文件,在网上找到一篇解决的文章:
    本节学习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 MediaStudy
    14 {
    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赋给MediaElement
    70             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

  • 相关阅读:
    谈自由 , ASP.NET Core才是未来?
    asp.net core 实现 api网关 进行 api版本控制
    Oracle查询语句参考
    Go语言
    软件测试
    软件设计的重构、重写、重载
    Office 365-sharepoint online
    Pandas入门
    调用Baidu云、人脸识别接口
    Oracle 11g 安装小记
  • 原文地址:https://www.cnblogs.com/zxbzl/p/3816421.html
Copyright © 2011-2022 走看看