使用Media Player框架


使用Media Player框架
音频和视频都比图像更加复杂。幸运的是,有一个高级别框架——MediaPlayer——允许你访问音频和视频。如果你不需要音频或视频紧密地集成到应用程序的其余部分中,那么它是一个很好的选择——对于视频通常工作得很好,但是对于音频是一个不太理想的选择。
MediaPlayer框架包含两个类:MPMoviePlayerController和MPVolumeView。它们管理整个页面的音频或视频播放器,无需你控制其如何工作,但是让你很容易访问音频或视频文件。
要使用任何一个媒体播放器类,你都应该向你的项目添加Media Player框架和MediaPlayer/MediaPlayer.h头文件。
媒体播放器类
为 了使用媒体播放器,你需要用将要调用的文件的URL字符串初始化一个MPMoviePlayer-Controller对象。这可能是任何.mp3、.mp4、.mov或.3gp文件,或者是iPhone支持的任何其他东西。启动媒体播放器的方式有两种,可以立即播放(这会导致iPhone的转盘旋转得快一点,当它做好准备时),或者等到接收了文件已加载的通知后再启动。
使用媒体播放器时你需要注意的通知有三个,表18-4中描述了它们。
表18-4 告诉你媒体播放器正在做什么的通知

18-4 告诉你媒体播放器正在做什么的通知

通  知

   

MPMoviePlayerContentPreloadDidFinishNotification

文件已加载

MPMoviePlayerPlaybackDidFinishNotification

重放完成

(续)

通  知

   

MPMoviePlayerScalingModeDidChangeNotification

播放器的缩放模式改变



1. 调用媒体播放器
代 码清单18-6显示了播放器的一个简单调用。该程序的构造开始于InterfaceBuilder中,包括一个UITextField(用于URL的输入)、一个UILabel(用于报告状态和错误)和一个UIActivity-IndicatorView(在加载期间展示活动)。它依赖于通知来跟踪媒体播放器是如何工作的。
代码清单18-6 媒体播放器的一个简单调用



你的项目开始很简单,就是设置UITextField。这涉及设置Return键和编写它的主委托方法textFieldShouldReturn:
项目是从文本字段真正开始的。当文本数据被输入时,chooseFile:方法被调用,就是该方法加载播放器。
假设你被传递一个URL(因为它简单,我们曾经使用过,尽管我们马上就会讨论本地文件),将之转换成NSURL,然后创建播放器
有少量的属性可以设置来指定播放器如何工作,这些属性都列出在类参考中。你使用前面看到的过程链接到播放器的通知中
让用户知道你怎样进行处理是个不错的主意,所以最后几行代码更新状态信息并启动一个活动指示器,表示正在进行处理中

一旦文件被加载,movieDidLoad:方法就会被通知

它清除你的更新信息,然后播放器开始播放。跟我们在前面章节中看到的模式视图控制器一样,此时由媒体播放器负责,直到其额外的通知回来之前无需你操心任何事情。在本例中,当它完成之后

你做一些最后的清除。


2. 从文件加载
如果你愿意从文件而不是从互联网加载,你就可以包含媒体文件作为软件包的一部分。使用我们在第16章中讨论的方法,创建一个到这些本地文件的路径,并且用fileURLWithPath:工厂方法创建NSURL:





在编写本书时,加载文件比从互联网加载更为可靠。从互联网加载时,音乐文件偶尔会无缘由地被破坏,流视频似乎根本不能工作。我们期望这些问题很快得到纠正,可能就在本书出版之际。
媒体播放器还支持另一个功能:你可以允许用户在播放器之外设置音量。
18.5.2 音量视图
通过调用MPVolumeView条目,你可以允许用户调整音量,调用方法如下:


你不需要做任何后台工作,当用户更改音量控件时,系统音量将立即更改。如果你愿意使用另外的方法,有三个一般函数可用来调用音量警报。参见表18-5。

18-5 用警报设置音量

   

   

MPVolumeSettingsAlertShow

显示音量警报

MPVolumeSettingsAlertHide

隐藏音量警报

MPVolumeSettingsAlertIsVisible

返回一个布尔值,以显示音量警报的状态

注意,这些是函数,不是方法。它们不与任何类捆绑在一起,而一旦你加载了Media Player框架,则这些函数通常是可用的。

在编写本书时,音量控制在iPhone仿真器中不起作用。

18.5.3 更好地集成媒体播放器
媒体播放器最大的问题是,它调用一个单独的屏幕。因此,很难用它将音乐或视频直接集成到程序中。
对于音乐来说,这个问题目前还难以一下子就解决了。如图18-4所示,当播放音乐时,屏幕被一个大的QuickTime标志占据着。我们希望,SDK的未来版本能够给予你选项,来定义播放声音时的背景(或者更好一点,允许你保持在普通视图中,从而能够真正集成媒体播放器的音频功能)。


图 18-4
对 于播放视频来说,最大的问题是控件,因为当你将视频用作cutscene时,不希望用户操作它。通过将MPMoviePlayerController的movieControlMode属性设置为MPMovieControl-ModeVolumeOnly(这只允许使用音量控件)或者MPMovieControlModeHidden
(这不允许用户访问任何控件),可以解决这个问题。

有了这种隐藏电影控件的能力,媒体播放器应该成了你显示视频所需要的工具,但是它还是不能使用音频,迫使你去寻求另外的方法。不幸的是,还没有高级别的框架用于播放音频,所以你自己必须做不少的工作。大量具体的细节由于比较复杂,超出了本书范畴,但是我们将从媒体播放器之外的处理音频所用最简单方法开始介绍

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值