与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成

原文:与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成

[索引页]
[源码下载]

与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成

作者:webabcd

介绍
与众不同 windows phone 7.5 (sdk 7.1) 之媒体

  • 音频播放器
  • 视频播放器
  • 与 Windows Phone 的音乐和视频中心集成

示例
1、演示音频播放器
Audio.xaml

<phone:PhoneApplicationPage
    x:Class="Demo.Media.Audio"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
    shell:SystemTray.IsVisible="True">

    <Grid x:Name="LayoutRoot" Background="Transparent">
        <StackPanel Orientation="Vertical">
            <MediaElement x:Name="mediaElement" Source="Assets/SuperMario.mp3" AutoPlay="False" />

            <Button x:Name="btnPlay" Content="播放" Click="btnPlay_Click" />
            <Button x:Name="btnPause" Content="暂停" Click="btnPause_Click" />

            <TextBlock x:Name="lblStatus" />
        </StackPanel>
    </Grid>

</phone:PhoneApplicationPage>

Audio.xaml.cs

/*
 * MediaElement - 用于播放视频或音频,本地地址或远程地址均可
 *     支持的编码格式参见:http://msdn.microsoft.com/en-us/library/ff462087(v=vs.92)
 *
 * MediaElement 的详细说明参见:http://www.cnblogs.com/webabcd/archive/2008/12/01/1344632.html
 * Launcher 方式参见:http://www.cnblogs.com/webabcd/archive/2012/06/14/2548776.html 中的 MediaPlayerLauncher
 *
 * XNA 播放音频参见:http://www.cnblogs.com/webabcd/archive/2011/07/11/2102713.html
 */

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;
using Microsoft.Phone.Controls;

namespace Demo.Media
{
    public partial class Audio : PhoneApplicationPage
    {
        public Audio()
        {
            InitializeComponent();

            mediaElement.CurrentStateChanged += new RoutedEventHandler(mediaElement_CurrentStateChanged);
        }

        void mediaElement_CurrentStateChanged(object sender, RoutedEventArgs e)
        {
            // 显示 MediaElement 的当前状态
            lblStatus.Text = mediaElement.CurrentState.ToString();
        }

        private void btnPlay_Click(object sender, RoutedEventArgs e)
        {
            // 播放
            mediaElement.Play();
        }

        private void btnPause_Click(object sender, RoutedEventArgs e)
        {
            // 暂停
            mediaElement.Pause();
        }
    }
}

2、演示视频播放器
Video.xaml

<phone:PhoneApplicationPage
    x:Class="Demo.Media.Video"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
    shell:SystemTray.IsVisible="True">

    <Grid x:Name="LayoutRoot" Background="Transparent">
        <StackPanel Orientation="Vertical">
            <MediaElement x:Name="mediaElement" Source="Assets/Demo.mp4" AutoPlay="False" />

            <Button x:Name="btnPlay" Content="播放" Click="btnPlay_Click" />
            <Button x:Name="btnPause" Content="暂停" Click="btnPause_Click" />

            <TextBlock x:Name="lblStatus" />
        </StackPanel>
    </Grid>

</phone:PhoneApplicationPage>

Video.xaml.cs

/*
 * MediaElement - 用于播放视频或音频,本地地址或远程地址均可
 *     支持的编码格式参见:http://msdn.microsoft.com/en-us/library/ff462087(v=vs.92)
 *
 * MediaElement 的详细说明参见:http://www.cnblogs.com/webabcd/archive/2008/12/01/1344632.html
 * Launcher 方式参见:http://www.cnblogs.com/webabcd/archive/2012/06/14/2548776.html 中的 MediaPlayerLauncher
 */

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;
using Microsoft.Phone.Controls;

namespace Demo.Media
{
    public partial class Video : PhoneApplicationPage
    {
        public Video()
        {
            InitializeComponent(); 

            mediaElement.CurrentStateChanged += new RoutedEventHandler(mediaElement_CurrentStateChanged);
        }

        void mediaElement_CurrentStateChanged(object sender, RoutedEventArgs e)
        {
            // 显示 MediaElement 的当前状态
            lblStatus.Text = mediaElement.CurrentState.ToString();
        }

        private void btnPlay_Click(object sender, RoutedEventArgs e)
        {
            // 播放
            mediaElement.Play();
        }

        private void btnPause_Click(object sender, RoutedEventArgs e)
        {
            // 暂停
            mediaElement.Pause();
        }
    }
}

3、演示如何与 Windows Phone 的音乐和视频中心集成
IntegrateWithTheMusicAndVideoHub.xaml

<phone:PhoneApplicationPage
    x:Class="Demo.Media.IntegrateWithTheMusicAndVideoHub"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
    shell:SystemTray.IsVisible="True">

    <Grid x:Name="LayoutRoot" Background="Transparent">
        <StackPanel Orientation="Vertical">

            <TextBlock TextWrapping="Wrap">
                <Run>本 app 会出现在“音乐视频中心”中的“应用程序”下</Run>
                <LineBreak />
                <Run>操作完成后,请去“音乐视频中心”看效果</Run>
            </TextBlock>

            <Button x:Name="btnNow" Content="设置“音乐视频中心”中的“正在播放磁贴”" Click="btnNow_Click" />
            <Button x:Name="btnRecent" Content="向“音乐视频中心”中的“历史记录”添加新的磁贴" Click="btnRecent_Click" />
            <Button x:Name="btnAcquired" Content="向“音乐视频中心”中的“最新上市”添加新的磁贴" Click="btnAcquired_Click" />

        </StackPanel>
    </Grid>

</phone:PhoneApplicationPage>

IntegrateWithTheMusicAndVideoHub.xaml.cs

/*
 * 本例演示如何将 app 集成进“音乐视频中心”
 *
 * MediaHistoryItem - 出现在“音乐视频中心”中的磁贴对象(包括“正在播放”,“历史记录”和“最新上市”)
 *     ImageStream - 磁贴上需要显示的背景图片流
 *     Title - 磁贴的标题
 *     PlayerContext - key/value 对集合,用户点击“历史记录”或“最新上市”中的某个磁贴会进入到 app 的主页面,同时也会将对应的 key/value 数据一同带过去,参见 MainPage.xaml.cs
 *
 * MediaHistory - 管理 MediaHistoryItem 的类
 *     Instance - 获得 MediaHistory 实例
 *     NowPlaying - 指定“正在播放”对象,MediaHistoryItem 类型
 *     WriteRecentPlay(MediaHistoryItem item) - 在“历史记录”中增加一个指定的 MediaHistoryItem 对象
 *     WriteAcquiredItem(MediaHistoryItem item) - 在“最新上市”中增加一个指定的 MediaHistoryItem 对象
 *
 *
 * 注意:
 * 1、“正在播放”磁贴大小为 358 * 358,背景图不能大于 75 KB
 * 2、“历史记录”和“最新上市”磁贴大小为 173 * 173
 * 3、app 提交到商店审核时,如果认证程序检测到 app 调用了 MediaHistory 和 MediaHistoryItem,则此 app 就会出现在“音乐视频中心”的应用程序中
 * 4、出于测试目的,如果想在 app 提交商店前使其出现在“音乐视频中心”的应用程序中的话,需要修改 manifest,在 <App /> 中增加 HubType="1"
 * 5、MediaHistoryItem 的 PlayerContext 指定的 key/value 对集合是 MediaHistoryItem 的上下文数据,用户在“历史记录”或“最新上市”单击某个磁贴对象时,会跳转到 app 的主页面,同时将对应的 key/value 数据一同带过去,其可以在主页面通过 NavigationContext.QueryString[key] 获取到,参见 MainPage.xaml.cs
 */

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;
using Microsoft.Phone.Controls;

using Microsoft.Devices;
using System.IO;
using System.Windows.Resources;
using System.IO.IsolatedStorage;
using Microsoft.Phone.BackgroundAudio;

namespace Demo.Media
{
    public partial class IntegrateWithTheMusicAndVideoHub : PhoneApplicationPage
    {
        public IntegrateWithTheMusicAndVideoHub()
        {
            InitializeComponent();

            PlayAudio();
        }

        // 播放一个音频
        private void PlayAudio()
        {
            // 由于播放本地音频时只能从独立存储中播放,所以此处把示例用音频文件从程序包中复制到独立存储
            using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
            {
                if (!storage.FileExists("SuperMario.mp3"))
                {
                    StreamResourceInfo resource = Application.GetResourceStream(new Uri("Assets/SuperMario.mp3", UriKind.Relative));

                    using (IsolatedStorageFileStream file = storage.CreateFile("SuperMario.mp3"))
                    {
                        int chunkSize = 4096;
                        byte[] bytes = new byte[chunkSize];
                        int byteCount;

                        while ((byteCount = resource.Stream.Read(bytes, 0, chunkSize)) > 0)
                        {
                            file.Write(bytes, 0, byteCount);
                        }
                    }
                }
            }

            BackgroundAudioPlayer.Instance.Play();
        }

        private void btnNow_Click(object sender, RoutedEventArgs e)
        {
            StreamResourceInfo sri = Application.GetResourceStream(new Uri("Assets/TileBackgroundRed.png", UriKind.Relative));

            MediaHistoryItem mediaHistoryItem = new MediaHistoryItem();
            mediaHistoryItem.ImageStream = sri.Stream;
            mediaHistoryItem.Title = "正在播放";
            mediaHistoryItem.PlayerContext.Add("keyNow", "正在播放的音乐");
            MediaHistory.Instance.NowPlaying = mediaHistoryItem;
        }

        private void btnRecent_Click(object sender, RoutedEventArgs e)
        {
            StreamResourceInfo sri = Application.GetResourceStream(new Uri("Assets/TileBackgroundGreen.png", UriKind.Relative));

            MediaHistoryItem mediaHistoryItem = new MediaHistoryItem();
            mediaHistoryItem.ImageStream = sri.Stream;
            mediaHistoryItem.Title = "最近播放";
            mediaHistoryItem.PlayerContext.Add("keyRecent", "最近播放的音乐");
            MediaHistory.Instance.WriteRecentPlay(mediaHistoryItem);
        }

        private void btnAcquired_Click(object sender, RoutedEventArgs e)
        {
            StreamResourceInfo sri = Application.GetResourceStream(new Uri("Assets/TileBackgroundBlue.png", UriKind.Relative));

            MediaHistoryItem mediaHistoryItem = new MediaHistoryItem();
            mediaHistoryItem.ImageStream = sri.Stream;
            mediaHistoryItem.Title = "最新上市";
            mediaHistoryItem.PlayerContext.Add("keyAcquired", "最新上市的音乐");
            MediaHistory.Instance.WriteAcquiredItem(mediaHistoryItem);
        }
    }
}

OK
[源码下载]

时间: 2024-10-28 18:08:49

与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成的相关文章

与众不同windows phone (14)

Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成 介绍 与众不同 windows phone 7.5 (sdk 7.1) 之媒体 音频播放器 视频播放器 与 Windows Phone 的音乐和视频中心集成 示例 1.演示音频播放器 Audio.xaml <phone:PhoneApplicationPage x:Class="Demo.Media.Audio" xmlns="http://schemas.micros

背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画

原文:背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画 [源码下载] 背水一战 Windows 10 (14) - 动画: 线性动画, 关键帧动画 作者:webabcd 介绍背水一战 Windows 10 之 动画 线性动画 - ColorAnimation, DoubleAnimation, PointAnimation 关键帧动画 - ColorAnimationUsingKeyFrames, DoubleAnimationUsingKeyFrames, Poin

最简单的视音频播放示例1:总述

前言 最近研究了一下Windows平台下的视音频播放的技术.在Windows平台下的视频播放技术主要有以下三种:GDI,Direct3D和OpenGL:音频播放技术主要是DirectSound.这些技术属于比较底层的技术,因此使用起来相对来说还是比较复杂的.我在学习的过程中也发现这一领域一直缺少比较简单直观的示例程序,因此打算做些示例程序,同时写一些相关的文章,方便这一领域的人学习相关的知识. 打算重点记录一下视频播放的技术.之前的研究一直集中于视频的编解码方面的技术,而很少接触到视频播放显示方

Android-Frame布局,UI布局切换,录音,照相机,影音播放器,音频播放器

<FrameLayout anroid:layout_weight="1">          <ImageView android:scaleType="fitCenter"/>          //没有标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE);   //全屏显示(隐藏掉状态栏) //在setContentView之前调用getWindow().addFlages(WindowMa

与众不同 windows phone (15) - Media(媒体)之后台播放音频

原文:与众不同 windows phone (15) - Media(媒体)之后台播放音频 [索引页][源码下载] 与众不同 windows phone (15) - Media(媒体)之后台播放音频 作者:webabcd 介绍与众不同 windows phone 7.5 (sdk 7.1) 之媒体 通过 AudioPlayerAgent 实现在后台播放音频 示例演示如何通过后台代理的方式来实现音频在后台的播放1.后台代理MyAudioPlayerAgent/AudioPlayer.cs /*

与众不同 windows phone (16) - Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单“应用程序...”和“共享...”关联, 与 Windows Phone 的图片中心集成

原文:与众不同 windows phone (16) - Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单"应用程序..."和"共享..."关联, 与 Windows Phone 的图片中心集成 [索引页][源码下载] 与众不同 windows phone (16) - Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单"应用程序..."和"共享..."关联, 与 Windows Phon

网页播放器的参数含义 Windows Media Player 网页播放器 参数含义_网页播放器

(默认0为否,-1或1为是)<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" id="MediaPlayer1" width="286" height="225">   <param name="AudioStream" value="-1">   <param name="A

《Android游戏编程入门经典》——14.2节使用SoundPool播放音频

14.2 使用SoundPool播放音频Android游戏编程入门经典类android.media.SoundPool用于一次播放多个音频示例,因此使用它在游戏中播放音效. 注意: 忽略了资产文件扩展名.因此,不考虑扩展名,资产文件名必须是唯一的.无法在同一文件夹中保存sound1.mp3和sound1.ogg,因为两个文件都使用关键字sound1将文件添加到资源管理器中. 14.2.1 初始化SoundPool首先,我们将创建SoundPool变量: 通常,在程序的onCreate()事件方法

《Android游戏编程入门经典》——14.1节使用MediaPlayer播放音频

14.1 使用MediaPlayer播放音频Android游戏编程入门经典android.media.MediaPlayer类可以让我们访问多媒体系统,展示在Android上加载和播放音频和视频文件的方法.Media Player是流式传输大型音频/视频资产的一种有用工具,并且无需将它们完整地加载到内存中,因为可供Android应用程序和游戏使用的内存有限.但Media Player不适合具有多种音效的游戏.它不是一种基于混合器的音频系统:其目的是每次从一个来源播放.我们可以使用Media Pl