热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UWP-NaïveMediaPlayer1.0

首先,先呈上GitHub项目地址:https:github.comGTGONavieMediaPlayer本次项目主要实现了播放MP3,MP4,也即一个简单而又丑陋的播放器。实现

首先,先呈上GitHub项目地址:https://github.com/GTGO/NavieMediaPlayer

本次项目主要实现了播放MP3,MP4,也即一个简单而又丑陋的播放器。

实现的效果图如下:

主界面

打开文件

播放界面

当然,即使是制作如此简陋的媒体播放器,我还是遇到了问题,具体如下:

1、如何可以让用户选择文件

根据XAML控件库中对MediaElement的描述,我发现也只能实现自己播放Assets文件中的音频或视频文件,用户无法根据自己喜好选择本地下载的文件进行播放,用户体验度为0!于是便查阅了MediaElement的官方文档,发现在官方文档中有一块告诉了我们怎么打开本地媒体文件。

(URL:https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.mediaelement#remarks)

除了在XAML中简单的调用MediaElement外,还需要使用FileOpenPicker来获取文件,具体内容如下:

private async void Button_Click(object sender, RoutedEventArgs e)
{
    await SetLocalMedia();
}

async private System.Threading.Tasks.Task SetLocalMedia()
{
    var openPicker = new Windows.Storage.Pickers.FileOpenPicker();

    openPicker.FileTypeFilter.Add(".mp4");
    openPicker.FileTypeFilter.Add(".mp3");

    var file = await openPicker.PickSingleFileAsync();

    // mediaPlayer is a MediaElement defined in XAML
    if (file != null)
    {
        var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
        mediaPlayer.SetSource(stream, file.ContentType);

        mediaPlayer.Play();
    }
}

这里为了使用方便,通过Button来实现该功能。至此,一个简单的media player实现。

2、Button的美化

虽然简单的功能可以实现,但是一个大大的Button不得不说十分影响美观,考虑到大多情况下我们都是以一个小图标代替文字来实现相同功能,于是我便寻找相关图片,试图通过插入img代替button的功能,反复试验后发现自己真的是图样图森破,后联想到老师上课所说将Button的Font Family设置为Segoe MDL2 Assets就可以在其库中找到相应图标复制粘贴,发现真的是一步到位。

(URL:http://modernicons.io/segoe-mdl2/cheatsheet/)

相应的代码部分如下:

3、进度栏的增改

事实上,一个media player离不开对播放内容的控制,包括但不限于简单的播放、暂停、全屏、调节音量等,由于初期只是简单的增加了MediaElement并没有在其功能上进一步完善,于是我便再次查看了官方文档,发现在MediaElement只需添加

AreTransportCOntrolsEnabled="True"

即可实现简易的功能。此外,在查看官方文档时,我还发现了MediaTransportControls Class一栏。

(URL:https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.mediatransportcontrols)

其中有对TransportControls的详细介绍,发现除了播放、暂停等之外,还有快进、后退等,再增加这些功能后,我又考虑到有时IsCompact="False"的情况下会影响用户观影体验。为了将用户体验度从0升为1,我增加了ToggleSwitch以供用户选择是否设置IsCompact="False",代码部分如下:

XAML部分:



     
C#部分:
private void MyToggleSwitch_Toggled(object sender, RoutedEventArgs e)
        {
            ToggleSwitch toggleSwitch = sender as ToggleSwitch;
            if (toggleSwitch != null)
            {
                if (toggleSwitch.IsOn == true)
                {
                    MyMediaPlayer.TransportControls.IsCompact = false;
                }
                else
                {
                    MyMediaPlayer.TransportControls.IsCompact = true;
                }
            }
        }

实现效果如下:


至此,一个Naïve Media Player基本实现。至于用户体验度,期待一下2.0版本的提高吧~







推荐阅读
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • C# WPF自定义按钮的方法
    本文介绍了在C# WPF中实现自定义按钮的方法,包括使用图片作为按钮背景、自定义鼠标进入效果、自定义按压效果和自定义禁用效果。通过创建CustomButton.cs类和ButtonStyles.xaml资源文件,设计按钮的Style并添加所需的依赖属性,可以实现自定义按钮的效果。示例代码在ButtonStyles.xaml中给出。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
author-avatar
周俊瑶zjy_963
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有