远程控制媒体播放器与数据库交互

本文旨在展示如何将多种技术融合在一起,创造出一个有趣的应用。这个项目最初是为了学位项目而提交的,本文是原始项目的简化版本。原始项目的代码量太大,无法提交到代码项目网站上。

这个应用程序分为两个部分:服务器应用(ServerApp)和客户端应用(ClientApp)。服务器应用托管了一个微软媒体播放器控件、一个曲目列表,以及一个自定义的控件,用于管理内置的媒体库。客户端应用则托管了一个曲目列表和一些按钮,用于控制服务器应用中的媒体播放器,它也托管了一个自定义控件,用于管理内置的媒体库。

显而易见,希望服务器应用安装在一台具有音频功能的机器上,而客户端应用则安装在另一台机器上,用于控制服务器应用的音乐播放。服务器应用将连接到一个立体声音响,客户端应用可以提供远程控制曲目列表给服务器应用,并按需播放不同的歌曲。客户端还可以执行停止、快退、快进等操作,这些操作将在服务器应用的电脑上执行。

实现这一功能使用了以下技术:

  • .NET remoting
  • 解析XML(用于曲目列表)
  • ping(.NET 1.1没有ping类,所以这个功能是在代码项目网站上找到的,代码中有提及)
  • 自定义控件
  • 启用像Windows XP那样的主题(在.NET v1.1中实现这一点并不容易,详见代码)
  • 数据库交互
  • 嵌入式微软媒体播放器控件

由于在开发原始代码时希望能够独立测试代码的部分,因此代码主要由自定义控件组成,因此有很多不同的项目,当压缩后,它太大了,不符合代码项目网站的指南。如果仍然感兴趣,已经把所有的代码放在了一个zip文件中。

如果使用的是从这里下载的zip文件,只需解压缩这两个文件,然后运行安装程序。安装完成后,首先启动服务器应用,然后启动客户端应用。

如果使用的是代码项目网站上的代码,可以在Visual Studio 2003中打开服务器应用/客户端应用解决方案,然后从Visual Studio内部构建并运行它们。

让看看它是什么样子的。

服务器应用

服务器应用包含两个自定义控件(如果感兴趣,可以查看代码项目网站上的Re_Mp3代码),这些是媒体播放器控件和媒体库控件。

媒体播放器控件使用了嵌入式的微软媒体播放器控件。该控件提供以下功能:

  • 从文件系统拖放文件到曲目列表
  • 当前播放的曲目加粗显示
  • 双击曲目播放新曲目
  • 更改微软媒体播放器控件GUI的格式
  • 保存和加载XML格式的曲目列表
  • 使用删除键删除曲目
  • 使用CTRL/SHIFT选择曲目
  • 使用上下箭头移动选中的曲目
  • 当从另一台计算机播放曲目时(可能来自客户端应用),将PING拥有该曲目的计算机以确保可以播放

注意:微软媒体播放器控件不支持完整的UNC路径,所以不得不使用像\\NODE\DRIVE\DIRECTORY\FILE这样的格式,例如\\BUDHA01\D$\MP3's\Buzzcocks - singles going steady。这种方法的一个缺点是,两台机器需要为用户希望与两个Re_Mp3应用程序一起使用的任何驱动器提供默认的管理员共享。例如,在主PC的D:\驱动器上存储音乐,所以必须确保D$是可访问的,同样,在笔记本电脑的C:\上存储所有音乐,所以必须确保C$在笔记本电脑上是可访问的。知道这是一个很大的麻烦,但这是能够使用微软媒体播放器控件的唯一方法。一个更好的方法是使用DirectSound。也许有人想要进一步发展这个项目,可以替换服务器应用使用的嵌入式媒体播放器控件,用一个基于DirectSound的自定义控件。

媒体库控件使用微软Access数据库存储所有记录的音乐。该控件提供以下功能:

  • 通过文件系统视图或流派查看库项
  • 将曲目的视图更改为详细信息、图标或缩略图
  • 显示单个曲目的所有详细信息
  • 使用右键菜单将记录的文件夹添加到媒体播放器
  • 通过使用“添加文件夹/共享文件”按钮,或在文件系统树视图中右键单击文件夹并使用删除选项来管理底层数据库

日志记录有点巧妙,每次应用程序启动时都会进行新的扫描,以查看在数据库中已经保存的文件系统路径下是否存在新文件。如果发现新条目,它们将被添加到库中。这就像有一个文件系统监视器,而不需要应用程序一直运行。

客户端应用

由于客户端应用程序用于控制服务器应用程序播放的音乐,它需要知道服务器的位置。为此,它有一个初始屏幕,列出了当前网络中的所有网络计算机(参见另一篇),用户可以从中选择一个。如果客户端可以与所选地址的服务器建立联系,将显示主客户端界面,否则客户端应用程序将退出。

一旦成功加载,客户端包含两个自定义控件(如果感兴趣,可以查看代码项目网站上的Re_Mp3代码),这些是客户端曲目列表控件和媒体库控件。

客户端曲目列表控件提供以下功能:

  • 从文件系统拖放文件到曲目列表
  • 当前播放的曲目加粗显示
  • 双击曲目播放新曲目
  • 保存和加载XML格式的曲目列表
  • 使用删除键删除曲目
  • 使用CTRL/SHIFT选择曲目
  • 使用上下箭头移动选中的曲目
  • 使用Re-MP3服务器:媒体播放器操作来控制Re-MP3服务器,例如创建新的曲目列表,停止,快退一首歌曲,快进一首歌曲

以下屏幕截图显示了这种控制操作,当前服务器应用的曲目在客户端端也是加粗显示的。这种远程控制完全是通过标准的.NET Remoting技术完成的。

与服务器应用中使用的控件相同。

好了,除了下面要展示的几件需要注意的事情。

注意事项

由于这个项目使用了.NET remoting,防火墙可能需要知道这两个应用程序,所以当它询问时,请接受这两个项目作为允许的项目。

由于这个项目使用了皮肤,使得安装程序只适用于Windows XP及以上版本的Windows。

微软媒体播放器控件不支持完整的UNC路径,所以不得不使用像\\NODE\DRIVE\DIRECTORY\FILE这样的格式,例如\\BUDHA01\D$\MP3's\Buzzcocks - singles going steady。这种方法的一个缺点是,两台机器需要为用户希望与两个Re_Mp3应用程序一起使用的任何驱动器提供默认的管理员共享。例如,在主PC的D:\驱动器上存储音乐,所以必须确保D$是可访问的,同样,在笔记本电脑的C:\上存储所有音乐,所以必须确保C$在笔记本电脑上是可访问的。知道这是一个很大的麻烦,但这是能够使用微软媒体播放器控件的唯一方法。一个更好的方法是使用DirectSound。也许有人想要进一步发展这个项目,可以替换服务器应用使用的嵌入式媒体播放器控件,用一个基于DirectSound的自定义控件。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485