iOS开发 MPMoviePlayerController和MPMoviePlayerViewController(视频播放)的使用

一.介绍

1.iOS9之前,iOS播放视频文件一般使用MPMoviePlayerViewController和 MPMoviePlayerController

2.MPMoviePlayerViewController继承自UIViewController,MPMoviePlayerController继承NSObject

3.MPMoviePlayerViewController里面包含了一个MPMoviePlayerController

4.支持本地视频和网络视频播放

5.这个类实现了MPMediaPlayback协议,因此具备一般的播放器控制功能,例如播放、暂停、停止等

二.使用

1.要想使用上述两者,需要导入MediaPlayer.framework

2.属性介绍

//
//  MPMoviePlayerController.h
//  MediaPlayer
//
//  Copyright 2008-2015 Apple, Inc. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <MediaPlayer/MediaPlayerDefines.h>
#import <MediaPlayer/MPMediaPlayback.h>
#import <UIKit/UIKit.h>

@class MPMovieAccessLog, MPMovieErrorLog;
// See MPMediaPlayback.h for the playback methods.

MP_API_IOS_DEPRECATED_WITH_REPLACEMENT_MACOS_TVOS_PROHIBITED("Use AVPlayerViewController in AVKit.", 2.0, 9.0, 10.12.2, 10.12.2, 2.0, 9.0)
@interface MPMoviePlayerController : NSObject <MPMediaPlayback>

// 初始化
- (instancetype)initWithContentURL:(NSURL *)url NS_DESIGNATED_INITIALIZER;

// 播放媒体URL,这个URL可以是本地路径,也可以是网络路径
@property (nonatomic, copy) NSURL *contentURL;

// 播放器视图(只可读),如果要显示视频必须将此视图添加到控制器上面
@property (nonatomic, readonly) UIView *view;

// 播放器背景视图(只可读)
@property (nonatomic, readonly) UIView *backgroundView;

// 媒体播放状态(只可读),枚举类型:
// MPMoviePlaybackStateStopped:停止播放
// MPMoviePlaybackStatePlaying:正在播放
// MPMoviePlaybackStatePaused:暂停
// MPMoviePlaybackStateInterrupted:中断
// MPMoviePlaybackStateSeekingForward:向前定位
// MPMoviePlaybackStateSeekingBackward:向后定位
@property (nonatomic, readonly) MPMoviePlaybackState playbackState;

// 网络媒体加载状态(只可读),枚举类型:
// MPMovieLoadStateUnknown:位置类型
// MPMovieLoadStatePlayable:
// MPMovieLoadStatePlaythroughOK:这种状态如果shouldAutoPlay为YES将自动播放
// MPMovieLoadStateStalled:停滞状态
@property (nonatomic, readonly) MPMovieLoadState loadState;

// 控制面板风格(默认是MPMovieControlStyleDefault),枚举类型:
// MPMovieControlStyleNone:无控制面板
// MPMovieControlStyleEmbedded:嵌入视频风格
// MPMovieControlStyleFullscreen:全屏
// MPMovieControlStyleDefault:默认风格
@property (nonatomic) MPMovieControlStyle controlStyle;

// 重复播放模式,枚举类型:
// MPMovieRepeatModeNone:不重复(默认值)
// MPMovieRepeatModeOne:重复播放
@property (nonatomic) MPMovieRepeatMode repeatMode;

// 当网络媒体缓存到一定数据时是否自动播放,默认为YES
@property (nonatomic) BOOL shouldAutoplay;

// 是否全屏展示,默认为NO,注意如果要通过此属性设置全屏必须在视图显示完成后设置,否则无效
@property (nonatomic, getter=isFullscreen) BOOL fullscreen;
- (void)setFullscreen:(BOOL)fullscreen animated:(BOOL)animated;

// 视频缩放填充模式(默认是MPMovieScalingModeAspectFit),枚举类型:
// MPMovieScalingModeNone:不进行任何缩放
// MPMovieScalingModeAspectFit:固定缩放比例并且尽量全部展示视频,不会裁切视频
// MPMovieScalingModeAspectFill:固定缩放比例并填充满整个视图展示,可能会裁切视频
// MPMovieScalingModeFill:不固定缩放比例压缩填充整个视图,视频不会被裁切但是比例失衡
@property (nonatomic) MPMovieScalingMode scalingMode;

// 是否有相关媒体被播放
@property (nonatomic, readonly) BOOL readyForDisplay NS_AVAILABLE_IOS(6_0);

@end

// -----------------------------------------------------------------------------
// Movie properties of the current movie prepared for playback.

@interface MPMoviePlayerController (MPMovieProperties)

// 媒体类别(只可读),枚举类型:
// MPMovieMediaTypeMaskNone:未知类型
// MPMovieMediaTypeMaskVideo:视频
// MPMovieMediaTypeMaskAudio:音频
@property (nonatomic, readonly) MPMovieMediaTypeMask movieMediaTypes MP_API_IOS_DEPRECATED_WITH_REPLACEMENT_MACOS_TVOS_PROHIBITED("Use AVPlayerViewController in AVKit.", 2.0, 9.0, 10.12.2, 10.12.2, 2.0, 9.0);

// 媒体源(默认是MPMovieSourceTypeUnknown),枚举类型:
// MPMovieSourceTypeUnknown:未知来源
// MPMovieSourceTypeFile:本地文件
// MPMovieSourceTypeStreaming:流媒体(直播或点播)
@property (nonatomic) MPMovieSourceType movieSourceType MP_API_IOS_DEPRECATED_WITH_REPLACEMENT_MACOS_TVOS_PROHIBITED("Use AVPlayerViewController in AVKit.", 2.0, 9.0, 10.12.2, 10.12.2, 2.0, 9.0)
;

// 媒体时长(只可读),如果未知则返回0
@property (nonatomic, readonly) NSTimeInterval duration MP_API_IOS_DEPRECATED_WITH_REPLACEMENT_MACOS_TVOS_PROHIBITED("Use AVPlayerViewController in AVKit.", 2.0, 9.0, 10.12.2, 10.12.2, 2.0, 9.0)
;

// 媒体可播放时长(只可读),主要用于表示网络媒体已下载视频时长
@property (nonatomic, readonly) NSTimeInterval playableDuration MP_API_IOS_DEPRECATED_WITH_REPLACEMENT_MACOS_TVOS_PROHIBITED("Use AVPlayerViewController in AVKit.", 2.0, 9.0, 10.12.2, 10.12.2, 2.0, 9.0)
;

// 视频实际尺寸(只可读),如果未知则返回CGSizeZero
@property (nonatomic, readonly) CGSize naturalSize MP_API_IOS_DEPRECATED_WITH_REPLACEMENT_MACOS_TVOS_PROHIBITED("Use AVPlayerViewController in AVKit.", 2.0, 9.0, 10.12.2, 10.12.2, 2.0, 9.0)
;

// 起始播放时间(默认是NaN)
@property (nonatomic) NSTimeInterval initialPlaybackTime MP_API_IOS_DEPRECATED_WITH_REPLACEMENT_MACOS_TVOS_PROHIBITED("Use AVPlayerViewController in AVKit.", 2.0, 9.0, 10.12.2, 10.12.2, 2.0, 9.0)
;

// 终止播放时间(默认是NaN)
@property (nonatomic) NSTimeInterval endPlaybackTime MP_API_IOS_DEPRECATED_WITH_REPLACEMENT_MACOS_TVOS_PROHIBITED("Use AVPlayerViewController in AVKit.", 2.0, 9.0, 10.12.2, 10.12.2, 2.0, 9.0)
;

// 是否允许无线播放,在iOS5以后默认为YES
@property (nonatomic) BOOL allowsAirPlay MP_API_IOS_DEPRECATED_WITH_REPLACEMENT_MACOS_TVOS_PROHIBITED("Use AVPlayerViewController in AVKit.", 4.3, 9.0, 10.12.2, 10.12.2, 4.3, 9.0)
;

// Indicates whether the movie player is currently playing video via AirPlay.
@property (nonatomic, readonly, getter=isAirPlayVideoActive) BOOL airPlayVideoActive MP_API_IOS_DEPRECATED_WITH_REPLACEMENT_MACOS_TVOS_PROHIBITED("Use AVPlayerViewController in AVKit.", 5.0, 9.0, 10.12.2, 10.12.2, 5.0, 9.0)
;

@end

// -----------------------------------------------------------------------------
// 视频播放通知

// 视频缩放比例改变
MP_EXTERN NSString * const MPMoviePlayerScalingModeDidChangeNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(2.0, 9.0, 10.12.2, 10.12.2, 2.0, 9.0);

// 媒体播放完成或用户手动退出,具体完成原因可以通过通知userInfo中的key为MPMoviePlayerPlaybackDidFinishReasonUserInfoKey的对象获取
MP_EXTERN NSString * const MPMoviePlayerPlaybackDidFinishNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(2.0, 9.0, 10.12.2, 10.12.2, 2.0, 9.0);

MP_EXTERN NSString * const MPMoviePlayerPlaybackDidFinishReasonUserInfoKey MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0); // NSNumber (MPMovieFinishReason)

// 播放状态改变,可配合playbackState属性获取具体状态
MP_EXTERN NSString * const MPMoviePlayerPlaybackStateDidChangeNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);

// 媒体网络加载状态改变
MP_EXTERN NSString * const MPMoviePlayerLoadStateDidChangeNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);

// 当前播放的媒体内容发生改变
MP_EXTERN NSString * const MPMoviePlayerNowPlayingMovieDidChangeNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);

// 将要进入全屏
MP_EXTERN NSString * const MPMoviePlayerWillEnterFullscreenNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);

// 进入全屏后
MP_EXTERN NSString * const MPMoviePlayerDidEnterFullscreenNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);

// 将要退出全屏
MP_EXTERN NSString * const MPMoviePlayerWillExitFullscreenNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);

// 退出全屏后
MP_EXTERN NSString * const MPMoviePlayerDidExitFullscreenNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);
MP_EXTERN NSString * const MPMoviePlayerFullscreenAnimationDurationUserInfoKey MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0); // NSNumber of double (NSTimeInterval)
MP_EXTERN NSString * const MPMoviePlayerFullscreenAnimationCurveUserInfoKey MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);     // NSNumber of NSUInteger (UIViewAnimationCurve)

// 当媒体开始通过AirPlay播放或者结束AirPlay播放
MP_EXTERN NSString * const MPMoviePlayerIsAirPlayVideoActiveDidChangeNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(5.0, 9.0, 10.12.2, 10.12.2, 5.0, 9.0);

// 视频显示状态改变
MP_EXTERN NSString * const MPMoviePlayerReadyForDisplayDidChangeNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(6.0, 9.0, 10.12.2, 10.12.2, 6.0, 9.0);

// -----------------------------------------------------------------------------
// 视频 属性 通知

// Calling -prepareToPlay on the movie player will begin determining movie properties asynchronously.
// 确定了媒体可用类型后
MP_EXTERN NSString * const MPMovieMediaTypesAvailableNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);

// 确定了媒体来源后
MP_EXTERN NSString * const MPMovieSourceTypeAvailableNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0); // Posted if the movieSourceType is MPMovieSourceTypeUnknown when preparing for playback.

// 确定了媒体播放时长后
MP_EXTERN NSString * const MPMovieDurationAvailableNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);

// 确定了媒体的实际尺寸后
MP_EXTERN NSString * const MPMovieNaturalSizeAvailableNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);

// -----------------------------------------------------------------------------
// Thumbnails

typedef NS_ENUM(NSInteger, MPMovieTimeOption) {
    MPMovieTimeOptionNearestKeyFrame,
    MPMovieTimeOptionExact
} MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);

@interface MPMoviePlayerController (MPMoviePlayerThumbnailGeneration)

// Returns a thumbnail at the given time.
// Deprecated.  Use -requestThumbnailImagesAtTimes:timeOption: / MPMoviePlayerThumbnailImageRequestDidFinishNotification instead.
- (UIImage *)thumbnailImageAtTime:(NSTimeInterval)playbackTime timeOption:(MPMovieTimeOption)option MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 7.0, 10.12.2, 10.12.2, 3.2, 7.0);

// Asynchronously request thumbnails for one or more times, provided as an array of NSNumbers (double).
// Posts MPMoviePlayerThumbnailImageRequestDidFinishNotification on completion.
- (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)option MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);

// Cancels all pending asynchronous thumbnail requests.
- (void)cancelAllThumbnailImageRequests MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);

@end

// Posted when each thumbnail image request is completed.
MP_EXTERN NSString * const MPMoviePlayerThumbnailImageRequestDidFinishNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0);
MP_EXTERN NSString * const MPMoviePlayerThumbnailImageKey MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0); // UIImage, may be nil if an error occurred.
MP_EXTERN NSString * const MPMoviePlayerThumbnailTimeKey MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0); // NSNumber (double)
MP_EXTERN NSString * const MPMoviePlayerThumbnailErrorKey MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(3.2, 9.0, 10.12.2, 10.12.2, 3.2, 9.0); // NSError

// -----------------------------------------------------------------------------
// Timed Metadata

@interface MPMoviePlayerController (MPMoviePlayerTimedMetadataAdditions)

// Returns an array of the most recent MPTimedMetadata objects provided by the media stream.
@property (nonatomic, readonly) NSArray *timedMetadata MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(4.0, 9.0, 10.12.2, 10.12.2, 4.0, 9.0);

@end

// Posted when new timed metadata arrives.
MP_EXTERN NSString * const MPMoviePlayerTimedMetadataUpdatedNotification MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(4.0, 9.0, 10.12.2, 10.12.2, 4.0, 9.0);
MP_EXTERN NSString * const MPMoviePlayerTimedMetadataUserInfoKey MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(4.0, 9.0, 10.12.2, 10.12.2, 4.0, 9.0);       // NSDictionary of the most recent MPTimedMetadata objects.

// Additional dictionary keys for use with the 'allMetadata' property. All keys are optional.
MP_EXTERN NSString * const MPMoviePlayerTimedMetadataKeyName MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(4.0, 9.0, 10.12.2, 10.12.2, 4.0, 9.0);           // NSString
MP_EXTERN NSString * const MPMoviePlayerTimedMetadataKeyInfo MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(4.0, 9.0, 10.12.2, 10.12.2, 4.0, 9.0);           // NSString
MP_EXTERN NSString * const MPMoviePlayerTimedMetadataKeyMIMEType MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(4.0, 9.0, 10.12.2, 10.12.2, 4.0, 9.0);       // NSString
MP_EXTERN NSString * const MPMoviePlayerTimedMetadataKeyDataType MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(4.0, 9.0, 10.12.2, 10.12.2, 4.0, 9.0);       // NSString
MP_EXTERN NSString * const MPMoviePlayerTimedMetadataKeyLanguageCode MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(4.0, 9.0, 10.12.2, 10.12.2, 4.0, 9.0);   // NSString (ISO 639-2)

// -----------------------------------------------------------------------------

@interface MPMoviePlayerController (MPMovieLogging)

// Returns an object that represents a snapshot of the network access log. Can be nil.
@property (nonatomic, readonly) MPMovieAccessLog *accessLog MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(4.3, 9.0, 10.12.2, 10.12.2, 4.3, 9.0);

// Returns an object that represents a snapshot of the error log. Can be nil.
@property (nonatomic, readonly) MPMovieErrorLog *errorLog MP_API_IOS_DEPRECATED_MACOS_TVOS_PROHIBITED(4.3, 9.0, 10.12.2, 10.12.2, 4.3, 9.0);

@end
//
//  MPMediaPlayback.h
//  MediaPlayer
//
//  Copyright 2009-2010 Apple, Inc. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <MediaPlayer/MediaPlayerDefines.h>

@protocol MPMediaPlayback

// 准备播放,加载视频数据到缓存,当调用play方法时如果没有准备好会自动调用此方法
- (void)prepareToPlay;

// Returns YES if prepared for playback.
@property(nonatomic, readonly) BOOL isPreparedToPlay;

// 开始播放
- (void)play;

// 暂停播放
- (void)pause;

// 停止播放
- (void)stop;

// 当前播放时间 单位:秒
@property(nonatomic) NSTimeInterval currentPlaybackTime;

// 当前播放速度,如果暂停则为0,正常速度为1.0,非0数据表示倍率
@property(nonatomic) float currentPlaybackRate;

// 向前定位
- (void)beginSeekingForward;
// 向后定位
- (void)beginSeekingBackward;
// 停止快进/快退
- (void)endSeeking;

@end

// Posted when the prepared state changes of an object conforming to the MPMediaPlayback protocol changes.
// This supersedes MPMoviePlayerContentPreloadDidFinishNotification.
MP_EXTERN __TVOS_PROHIBITED NSString *const MPMediaPlaybackIsPreparedToPlayDidChangeNotification NS_DEPRECATED_IOS(3_2, 9_0);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值