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

简介: 原文:与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windows Phone 的音乐和视频中心集成[索引页][源码下载] 与众不同 windows phone (14) - Media(媒体)之音频播放器, 视频播放器, 与 Windo...
原文: 与众不同 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
[源码下载]

目录
相关文章
|
1月前
|
人工智能 达摩院 并行计算
VideoRefer:阿里达摩院开源视频对象感知与推理框架,可集成 VLLM 提升其空间和时间理解能力
VideoRefer 是浙江大学与阿里达摩学院联合推出的视频对象感知与推理技术,支持细粒度视频对象理解、复杂关系分析及多模态交互,适用于视频剪辑、教育、安防等多个领域。
155 17
VideoRefer:阿里达摩院开源视频对象感知与推理框架,可集成 VLLM 提升其空间和时间理解能力
|
1月前
|
人工智能 数据处理 C#
AI Dev Gallery:微软开源 Windows AI 模型本地运行工具包和示例库,助理开发者快速集成 AI 功能
微软推出的AI Dev Gallery,为Windows开发者提供开源AI工具包和示例库,支持本地运行AI模型,提升开发效率。
87 13
|
4月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
123 9
|
7月前
|
Linux Apache C++
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
该文介绍了如何在Windows环境下为FFmpeg集成SRT协议支持库libsrt。首先,需要安装Perl和Nasm,然后编译OpenSSL。接着,下载libsrt源码并使用CMake配置,生成VS工程并编译生成srt.dll和srt.lib。最后,将编译出的库文件和头文件按照特定目录结构放置,并更新环境变量,重新配置启用libsrt的FFmpeg并进行编译安装。该过程有助于优化直播推流的性能,减少卡顿问题。
170 2
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
|
6月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
478 0
|
6月前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
103 0
|
8月前
|
编解码 Windows
FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid
XviD是开源MPEG-4视频编码器,与DivX相似但后者非开源。早期MP4常使用XviD或DivX编码,现已被H.264取代。在Windows上集成FFmpeg的XviD编解码库libxvid,需访问<https://labs.xvid.com/source/>下载源码,解压后在MSYS环境中配置、编译和安装。之后重新配置FFmpeg,启用libxvid并编译安装。详细步骤包括configure命令、make和make install。成功后,通过`ffmpeg -version`检查是否启用libxvid。更多音视频开发技术可参考《FFmpeg开发实战:从零基础到短视频上线》。
156 0
FFmpeg开发笔记(二十九)Windows环境给FFmpeg集成libxvid
|
7月前
|
数据采集 存储 算法
ScrapySharp框架:小红书视频数据采集的API集成与应用
ScrapySharp框架:小红书视频数据采集的API集成与应用
|
9月前
|
Windows
如何使用Windows Media Player刻录数据DVD
Windows Media Player是微软Windows系统自带的多媒体播放器,支持多种音频、视频格式及图片查看,也能接收网络广播和刻录CD/DVD。用户可利用它管理媒体文件、创建播放列表。然而,其刻录DVD功能有限,仅适用于数据DVD。若需创建可在DVD播放机上播放的视频DVD,建议使用专业软件如DVDFab DVD Creator。
|
9月前
|
编解码 5G Linux
FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器
AVS3是中国首个8K及5G视频编码标准,相比AVS2和HEVC性能提升约30%。解码器libuavs3d支持8K/60P视频实时解码,兼容多种平台。《FFmpeg开发实战》书中介绍了在Windows环境下如何集成libuavs3d到FFmpeg。集成步骤包括下载源码、使用Visual Studio 2022编译、调整配置、安装库文件和头文件,以及重新配置和编译FFmpeg以启用libuavs3d。
142 0
FFmpeg开发笔记(二十一)Windows环境给FFmpeg集成AVS3解码器

热门文章

最新文章