视频播放控制器(MPMoviePlayerController)可以管理播放文件或网络流中的视频。播放在播放器的view上进行,可以是全屏或行内inline的。你可以将视频播放器的view添加到你的应用中的视图结构中,或使用MPMoviePlayerViewController对象提供的界面。
重要的:MPMoviePlayerController类在iOS9就被正式废弃了。(MPMoviePlayerViewController也被正式废弃了)。在iOS9或之后播放视频时,使用AVKit框架中的AVPictureInPictureController或AVPlayerViewController类,或者WebKit中的WKWebView类。
视频播放器(iOS 4.3和之后)支持无线AirPlay播放,从iOS5开始,AirPlay播放成为默认支持的功能。要关闭AirPlay支持,设置allowsAirPlay属性为NO。在iOS 8和之后,用户可以通过控制面板访问AirPlay兼容硬件,视频播放器不再显示AirPlay控制。
当你添加一个视频播放器到你的应用的视图中,要确保正确的设置frame:注意注释
MPMoviePlayerController *player = [[MPMoviePlayerController alloc]initWithContentURL:myURL];
[player prepareToPlay];
[player.view setFrame:myView.bounds]; // player’s frame must match parent's
[myView addSubview:player.view];
//...
[player play];
MPMoviePlayerController *player = [[MPMoviePlayerController alloc]initWithContentURL:myURL];
[player prepareToPlay];
[player.view setFrame:myView.bounds]; // player’s frame must match parent's
[myView addSubview:player.view];
//...
[player play];
要将视频播放器看成一个不透明整体,你可以在视频的顶层添加你自定义的子视图但你绝对不可以修改任何原有的子视图。
除了在视频顶层添加子视图外,你还可以通过在backgroundView属性上添加自定义子视图来自定义背景内容。自定义的子视图也支持全屏和行内两张模式,但在进入/退出全屏模式时,你需要调整你的view的位置。使用MPMoviePlayerWillEnterFullscreenNotification和MPMoviePlayerWillExitFullscreenNotification通知来获取全屏模式的转变。
这个类支持编程的方式或用户通过视频播放器上的按钮来控制播放。你可以通过使用这个类遵循的MPMediaPlayback协议中定义的方法和属性来通过代码控制播放的大部分方面。这个MPMediaPlayback协议中的属性和方法可以让你开始、停止播放,快进、快退播放内容,甚至还可以改变播放速率。另外,本类的controlStyle属性可以展示一套标准的系统控件来让用户操纵播放。你也可以为网络内容设置shouldAutoplay属性来自动播放。
当你创建一个新的MPMoviePlayerController对象时为其指定要播放的视频。当然,你也可以通过修改contentURL属性来修改当前播放的视频。修改这个属性可以让你多次重用视频播放控制器。由于性能原因,你可能需要先将视频下载到本地目录。
注意:尽管你可以在你的界面中创建多个MPMoviePlayerController对象,但同时只有一个视频播放器可以播放。
为方便对一个长视频创建书签或章节链接,MPMoviePlayerController类定义了对一个视频的指定时间点创建缩略图的方法。你可以通过thumbnailImageAtTime:timeOption:方法来请求单张缩略图或通过requestThumbnailImagesAtTimes:timeOption:方法请求多个缩略图。
要从需要访问认证的URL请求中播放网络流时,先要创建一个合适的NSURLCredential对象,通过initWithUser:password:persistence:方法,如下:
NSURLCredential *credential = [[NSURLCredential alloc]initWithUser:@“userName” password:@“password” persistence:NSURLCredentialPersistenceForSession];
self.credential = credential;
[credential release];
NSURLCredential *credential = [[NSURLCredential alloc]initWithUser:@“userName” password:@“password” persistence:NSURLCredentialPersistenceForSession];
self.credential = credential;
[credential release];
另外,创建一个合适的NSURLProtectionSpace对象,如下:
NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc]initWithHost:@“streams.mydomain.com” port:80 protocol:@“http” realm:@“my domain.com” authenticationMethod:NSURLAuthenticationMethodDefault];
self.protectionSpace = protectionSpace;
[protectionSpace release];
NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc]initWithHost:@“streams.mydomain.com” port:80 protocol:@“http” realm:@“my domain.com” authenticationMethod:NSURLAuthenticationMethodDefault];
self.protectionSpace = protectionSpace;
[protectionSpace release];
添加URL credential和protection space到单例对象NSURLCredentialStorage。如下:
[[NSURLCredentialStorage sharedCredentialStoreage]setDefaultCredential:credential forProtectionSpace:protectionSpace];
[[NSURLCredentialStorage sharedCredentialStoreage]setDefaultCredential:credential forProtectionSpace:protectionSpace];
视频播放器通知
视频播放器通过发送通知来通知你的应用关于视频播放状态的信息。除了播放结束的通知,你的应用还可以接收如下情况的通知:
- 当视频播放器开始播放、已暂停,或者快进和快退
- 当AirPlay播放开始或结束
- 当视频的缩放模式发生变化
- 当视频进入或推出全屏模式
- 当网络视频的加载状态改变
- 当视频的元信息可用
更多信息,参考文档的Notifications小节。
支持格式
这个类可用播放iOS支持的视频或音频。包括流式内容和固定长度的文件内容。对于视频文件,就是扩展名为.mov、.mp4、.mpv和.3gp的文件或使用以下压缩标准的:
- H.264 Baseline Profile Level 3.0 video, up to 640 x 480 at 30 fps. (The Baseline profile does not support B frames.)
- MPEG-4 Part 2 video(Simple Profile)
如果你使用本类播放音频文件,播放时屏幕将是空白的,有一个QuickTime的logo。本类支持AAC-LA audio at up to 48 kHz, and MP3 (MPEG-1 Audio Layer 3) up to 48 kHz, stereo audio.