zoukankan      html  css  js  c++  java
  • iOS

    前言

    	MP_EXTERN_CLASS_AVAILABLE(3_2) NS_DEPRECATED_IOS(3_2, 9_0, "Use AVPlayerViewController in AVKit.")
    	@interface MPMoviePlayerViewController : UIViewController
    	 
    	@available(iOS, introduced=3.2, deprecated=9.0, message="Use AVPlayerViewController in AVKit.")
    	public class MPMoviePlayerViewController : UIViewController
    	
    	
    	MP_EXTERN_CLASS_AVAILABLE(2_0) NS_DEPRECATED_IOS(2_0, 9_0, "Use AVPlayerViewController in AVKit.")
    	@interface MPMoviePlayerController : NSObject <MPMediaPlayback>
    	
    	@available(iOS, introduced=2.0, deprecated=9.0, message="Use AVPlayerViewController in AVKit.")
    	public class MPMoviePlayerController : NSObject, MPMediaPlayback
    
    • 视频播放:
      • 添加库文件:MediaPlayer.framework
      • 包含头文件:#import <MediaPlayer/MediaPlayer.h>

    1、本地/网络视频播放

    1.1 使用 MPMoviePlayerViewController 播放

    • Objective-C

      	// 添加库文件:MediaPlayer.framework
      	// 包含头文件:#import <MediaPlayer/MediaPlayer.h>
      
      	// 声明媒体播放控件
      	@property(nonatomic, retain)MPMoviePlayerViewController *mpMoviePlayerVC;
      
      	// 加载文件路径,加载本地视频
      	NSURL *mediaUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"步步高手机" ofType:@"mp4"]];
      	
      	// 加载文件路径,加载网络视频
      	NSURL *mediaUrl = [NSURL URLWithString:@"http://w2.dwstatic.com/1/5/1525/127352-100-1434554639.mp4"];
      
      	// 实例化媒体播放控件
      	mpMoviePlayerVC = [[MPMoviePlayerViewController alloc] initWithContentURL:mediaUrl];
      
      	// 弹出播放页面,开始播放
      	[self presentMoviePlayerViewControllerAnimated: mpMoviePlayerVC];
      
    • Swift

      	// 添加库文件:MediaPlayer.framework
      	// 包含头文件:import MediaPlayer
      
      	// 声明媒体播放控件
      	var mpMoviePlayerVC:MPMoviePlayerViewController!
      	
      	// 加载文件路径,加载本地视频
      	let mediaUrl:NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("步步高手机", ofType: "mp4")!)
      	
      	// 加载文件路径,加载网络视频
      	let mediaUrl:NSURL = NSURL(string: "http://w2.dwstatic.com/1/5/1525/127352-100-1434554639.mp4")!
      
      	// 实例化媒体播放控件
      	mpMoviePlayerVC = MPMoviePlayerViewController(contentURL: mediaUrl)
          
       	// 弹出播放页面,开始播放
      	self.presentMoviePlayerViewControllerAnimated(mpMoviePlayerVC)
      

    1.2 使用 MPMoviePlayerController 播放

    • Objective-C

      	// 添加库文件:MediaPlayer.framework
      	// 包含头文件:#import <MediaPlayer/MediaPlayer.h>
      
      	// 声明媒体播放控件
      	@property(nonatomic, retain)MPMoviePlayerController *mpMoviePlayer;
      
      	// 加载文件路径,加载本地视频
      	NSURL *mediaUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"步步高手机" ofType:@"mp4"]];
      	
      	// 加载文件路径,加载网络视频
      	NSURL *mediaUrl = [NSURL URLWithString:@"http://w2.dwstatic.com/1/5/1525/127352-100-1434554639.mp4"];
      
      	// 实例化媒体播放控件
      	mpMoviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:mediaUrl];
      
      	// 添加播放页面,开始播放
      	[self.view addSubview:mpMoviePlayer.view];
      
      	// 设置是否全屏播放,必须设置,必须放在添加页面之后设置,为 NO 时,必须设置 mpMoviePlayer.view.frame
      	mpMoviePlayer.fullscreen = YES;
      
    • Swift

      	// 添加库文件:MediaPlayer.framework
      	// 包含头文件:import MediaPlayer
      
      	// 声明媒体播放控件
      	var mpMoviePlayer:MPMoviePlayerController!
      
      	// 加载文件路径,加载本地视频
      	let mediaUrl:NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("步步高手机", ofType: "mp4")!)
      	
      	// 加载文件路径,加载网络视频
      	let mediaUrl:NSURL = NSURL(string: "http://w2.dwstatic.com/1/5/1525/127352-100-1434554639.mp4")!
      
      	// 实例化媒体播放控件
      	mpMoviePlayer = MPMoviePlayerController(contentURL: mediaUrl)
      
      	// 添加播放页面,开始播放
      	self.view.addSubview(mpMoviePlayer.view)
      
      	// 设置是否全屏播放,必须设置,必须放在添加页面之后设置,为 NO 时,必须设置 mpMoviePlayer.view.frame
      	mpMoviePlayer.fullscreen = true
      

    2、本地/网络视频播放设置

    2.1 使用 MPMoviePlayerViewController 播放

    • Objective-C

      	// 显示播放页面
      	/*
      		弹出播放页面,开始播放
      	*/
      	[self presentMoviePlayerViewControllerAnimated: mpMoviePlayerVC];
      
      	// 开始播放
      	[mpMoviePlayerVC.moviePlayer play];
          
      	// 暂停播放
      	[mpMoviePlayerVC.moviePlayer pause];
          
      	// 停止播放
      	/*
      		停止播放会自动退出播放界面
      	*/
      	[mpMoviePlayerVC.moviePlayer stop];
          
      	// 退出播放
      	/*
      		退出播放界面,停止播放
      	*/
      	[self dismissMoviePlayerViewControllerAnimated];
      
    • Swift

      	// 显示播放页面
      	/*
      		弹出播放页面,开始播放
      	*/
      	self.presentMoviePlayerViewControllerAnimated(mpMoviePlayerVC)
      
      	// 开始播放
      	mpMoviePlayerVC.moviePlayer.play()
          	
      	// 暂停播放
      	mpMoviePlayerVC.moviePlayer.pause()
          	
      	// 停止播放
      	/*
      		停止播放会自动退出播放界面
      	*/
      	mpMoviePlayerVC.moviePlayer.stop()
          	
      	// 退出播放
      	/*
      		退出播放界面,停止播放
      	*/
      	self.dismissMoviePlayerViewControllerAnimated()
      

    2.2 使用 MPMoviePlayerController 播放

    • Objective-C

      	// 判断媒体是否正在通过 AirPlay 播放
      	BOOL airPlayVideoActive = mpMoviePlayer.isAirPlayVideoActive;
        	
      	// 判断是否准备好显示
      	BOOL readyForDisplay = mpMoviePlayer.readyForDisplay;
         	
      	// 获取播放控制器所在的视图
      	/*
      		The view in which the media and playback controls are displayed
      	*/
      	UIView *playbackView = mpMoviePlayer.view;
         	
      	// 获取媒体播放背景视图
      	/*
      		A view for customization which is always displayed behind movie content
      	*/
      	UIView *backgroundView = mpMoviePlayer.backgroundView;
        	
      	// 获取播放状态
      	/*
      		MPMoviePlaybackStateStopped,                停止
      		MPMoviePlaybackStatePlaying,                播放
      		MPMoviePlaybackStatePaused,                 暂停
      		MPMoviePlaybackStateInterrupted,            中断
      		MPMoviePlaybackStateSeekingForward,         快进
      		MPMoviePlaybackStateSeekingBackward         快退
      		
      		Returns the current playback state of the movie player
      	*/
      	MPMoviePlaybackState playbackState = mpMoviePlayer.playbackState;
         	
      	// 获取网络加载状态
      	/*
      		MPMovieLoadStateUnknown        = 0,       状态未知
      		MPMovieLoadStatePlayable       = 1 << 0,  可播放
      		MPMovieLoadStatePlaythroughOK  = 1 << 1,  Playback will be automatically started in this
      		                                          state when shouldAutoplay is YES
      		MPMovieLoadStateStalled        = 1 << 2,  Playback will be automatically paused in this 
      		                                          state, if started
      		                                          
      		Returns the network load state of the movie player
      	*/
      	MPMovieLoadState loadState = mpMoviePlayer.loadState;
      
      	// 获取媒体类型
      	/*
      		MPMovieMediaTypeMaskNone  = 0,
      		MPMovieMediaTypeMaskVideo = 1 << 0,
      		MPMovieMediaTypeMaskAudio = 1 << 1
      		
      		The types of media in the movie, or MPMovieMediaTypeNone if not known
      	*/
      	MPMovieMediaTypeMask movieMediaType = mpMoviePlayer.movieMediaTypes;
         	
      	// 获取媒体原始尺寸
      	/*
      		The natural size of the movie, or CGSizeZero if not known/applicable
      	*/
      	CGSize naturalSize = mpMoviePlayer.naturalSize;
         	
      	// 获取媒体播放时长
      	/*
      		The duration of the movie, or 0.0 if not known
      	*/
      	NSTimeInterval duration = mpMoviePlayer.duration;
         	
      	// 获取当前可播放的时长
      	/*
      		for progressively downloaded network content
      	*/
      	NSTimeInterval playableDuration = mpMoviePlayer.playableDuration;
         	
      	// 设置播放页面大小
      	mpMoviePlayer.view.frame = CGRectMake(10, 30, self.view.bounds.size.width - 20, 200);
      
      	// 缓冲视频
      	/*
      		即使不写,系统也会自动调用该方法
      	*/
      	[mpMoviePlayer prepareToPlay];
      
      	// 显示播放页面
      	/*
      		添加播放页面,开始播放
      	*/
      	[self.view addSubview:mpMoviePlayer.view];
      
      	// 开始播放
      	[mpMoviePlayer play];
          	
      	// 暂停播放
      	[mpMoviePlayer pause];
          	
      	// 停止播放
      	[mpMoviePlayer stop];
          	
      	// 设置全屏
      	[mpMoviePlayer setFullscreen:YES animated:YES];
          	
      	// 快进
      	[mpMoviePlayer beginSeekingForward];
          	
      	// 快退
      	[mpMoviePlayer beginSeekingBackward];
          	
      	// 停止快进或快退
      	[mpMoviePlayer endSeeking];
          
      	// 设置是否全屏播放
      	/*
      		必须设置,必须放在添加页面之后设置,设置为 NO 时,必须设置 mpMoviePlayer.view.frame 的大小
      	*/
      	mpMoviePlayer.fullscreen = NO;
      
      	// 设置是否自动开始播放
      	/*
      		默认为 YES
      	*/
      	mpMoviePlayer.shouldAutoplay = NO;
      
      	// 设置是否允许通过 AirPlay 播放
      	/*
      		Defaults to YES on iOS 5.0 and later
      	*/
      	mpMoviePlayer.allowsAirPlay = NO;
      
      	// 设置当前播放时间
      	mpMoviePlayer.currentPlaybackTime = 10;
      
      	// 设置当前播放速度
      	/*
      		默认为 1.0 (normal speed),设为 0.0 时暂停播放
      	*/
      	mpMoviePlayer.currentPlaybackRate = 1.0;
      
      	// 设置开始播放时间
      	/*
      		The start time of movie playback. Defaults to NaN, indicating the natural start time of 
      		the movie
      	*/
      	mpMoviePlayer.initialPlaybackTime = 10;
      
      	// 设置停止播放时间
      	/*
      		The end time of movie playback. Defaults to NaN, which indicates natural end time of 
      		the movie
      	*/
      	mpMoviePlayer.endPlaybackTime = 20;
      
      	// 设置播放控制器类型
      	/*
      		MPMovieControlStyleNone,        没有控制器,  No controls
      		MPMovieControlStyleEmbedded,    嵌入式,默认,Controls for an embedded view   可将播放窗口全屏化
      		MPMovieControlStyleFullscreen,  全屏式,     Controls for fullscreen playback
               
      		MPMovieControlStyleDefault = MPMovieControlStyleEmbedded
      	*/
      	mpMoviePlayer.controlStyle = MPMovieControlStyleEmbedded;
      
      	// 设置重复播放模式
      	/*
      		MPMovieRepeatModeNone,   不重复,默认
      		MPMovieRepeatModeOne     重复播放
      	*/
      	mpMoviePlayer.repeatMode = MPMovieRepeatModeNone;
      
      	// 设置画面缩放模式
      	/*
      		MPMovieScalingModeNone,         不做任何缩放
      		MPMovieScalingModeAspectFit,    适应屏幕大小,保持宽高比,默认
      		MPMovieScalingModeAspectFill,   充满屏幕,保持宽高比
      		MPMovieScalingModeFill          充满屏幕,不保持宽高比
      	*/
      	mpMoviePlayer.scalingMode = MPMovieScalingModeAspectFit;
      
      	// 设置媒体资源类型
      	/*
      		The playback type of the movie. Defaults to MPMovieSourceTypeUnknown.
      		Specifying a playback type before playing the movie can result in faster load times.
               
      		MPMovieSourceTypeUnknown,
      		MPMovieSourceTypeFile,         Local or progressively downloaded network content
      		MPMovieSourceTypeStreaming     Live or on-demand streaming content
      	*/
      	mpMoviePlayer.movieSourceType = MPMovieSourceTypeFile;
      
    • Swift

      	// 判断媒体是否正在通过 AirPlay 播放
      	let airPlayVideoActive:Bool = mpMoviePlayer.airPlayVideoActive
         	
      	// 判断是否准备好显示
      	let readyForDisplay:Bool = mpMoviePlayer.readyForDisplay
         	
      	// 获取播放控制器所在的视图
      	/*
      		The view in which the media and playback controls are displayed
      	*/
      	let playbackView:UIView = mpMoviePlayer.view
         	
      	// 获取媒体播放背景视图
      	/*
      		A view for customization which is always displayed behind movie content
      	*/
      	let backgroundView:UIView = mpMoviePlayer.backgroundView
          	
      	// 获取播放状态
      	/*
      		Stopped,           停止
      		Playing,           播放
      		Paused,            暂停
      		Interrupted,       中断
      		SeekingForward,    快进
      		SeekingBackward    快退
      		
      		Returns the current playback state of the movie player
      	*/
      	let playbackState:MPMoviePlaybackState = mpMoviePlayer.playbackState
      
      	// 获取网络加载状态
      	/*
      		Unknown        = 0,        状态未知
      		Playable       = 1 << 0,   可播放
      		PlaythroughOK  = 1 << 1,   Playback will be automatically started in this state when 
      		                           shouldAutoplay is YES
      		Stalled        = 1 << 2,   Playback will be automatically paused in this state, if started
      		
      		Returns the network load state of the movie player
      	*/
      	let loadState:MPMovieLoadState = mpMoviePlayer.loadState
         		
      	// 获取媒体类型
      	/*
      		MaskNone  = 0,
      		MaskVideo = 1 << 0,
      		MaskAudio = 1 << 1
      		
      		The types of media in the movie, or MPMovieMediaTypeNone if not known
      	*/
      	let movieMediaType:MPMovieMediaTypeMask = mpMoviePlayer.movieMediaTypes
         	
      	// 获取媒体原始尺寸
      	/*
      		The natural size of the movie, or CGSizeZero if not known/applicable
      	*/
      	let naturalSize:CGSize = mpMoviePlayer.naturalSize
        	
      	// 获取媒体播放时长
      	/*
      		The duration of the movie, or 0.0 if not known
      	*/
      	let duration:NSTimeInterval = mpMoviePlayer.duration
         	
      	// 获取当前可播放的时长
      	/*
      		for progressively downloaded network content
      	*/
      	let playableDuration:NSTimeInterval = mpMoviePlayer.playableDuration
         	
      	// 设置播放页面大小
      	mpMoviePlayer.view.frame = CGRectMake(10, 30, self.view.bounds.size.width - 20, 200)
      
      	// 缓冲视频
      	/*
      		即使不写,系统也会自动调用该方法
      	*/
      	mpMoviePlayer.prepareToPlay()
      
      	// 显示播放页面
      	/*
      		添加播放页面,开始播放
      	*/
      	self.view.addSubview(mpMoviePlayer.view)
      
      	// 开始播放
      	mpMoviePlayer.play()
          	
      	// 暂停播放
      	mpMoviePlayer.pause()
          	
      	// 停止播放
      	mpMoviePlayer.stop()
          	
      	// 设置全屏
      	mpMoviePlayer.setFullscreen(true, animated: true)
          	
      	// 快进
      	mpMoviePlayer.beginSeekingForward()
          	
      	// 快退
      	mpMoviePlayer.beginSeekingBackward()
          	
      	// 停止快进或快退
      	mpMoviePlayer.endSeeking()
          
      	// 设置是否全屏播放
      	/*
      		必须设置,必须放在添加页面之后设置,设置为 NO 时,必须设置 mpMoviePlayer.view.frame 的大小
      	*/
      	mpMoviePlayer.fullscreen = false
      
      	// 设置是否自动开始播放
      	/*
      		默认为 YES
      	*/
      	mpMoviePlayer.shouldAutoplay = false
      
      	// 设置是否允许通过 AirPlay 播放
      	/*
      		Defaults to YES on iOS 5.0 and later
      	*/
      	mpMoviePlayer.allowsAirPlay = false
      
      	// 设置当前播放时间
      	mpMoviePlayer.currentPlaybackTime = 10
      
      	// 设置当前播放速度
      	/*
      		默认为 1.0 (normal speed),设为 0.0 时暂停播放
      	*/
      	mpMoviePlayer.currentPlaybackRate = 1.0
      
      	// 设置开始播放时间
      	/*
      		The start time of movie playback. Defaults to NaN, indicating the natural start time of 
      		the movie
      	*/
      	mpMoviePlayer.initialPlaybackTime = 10
      
      	// 设置停止播放时间
      	/*
      		The end time of movie playback. Defaults to NaN, which indicates natural end time of 
      		the movie
      	*/
      	mpMoviePlayer.endPlaybackTime = 20
      
      	// 设置播放控制器类型
      	/*
      		None,        没有控制器,  No controls
      		Embedded,    嵌入式,默认,Controls for an embedded view     可将播放窗口全屏化
      		Fullscreen,  全屏式,     Controls for fullscreen playback
      	*/
      	mpMoviePlayer.controlStyle = MPMovieControlStyle.Embedded
      
      	// 设置重复播放模式
      	/*
      		None,   不重复,默认
      		One     重复播放
      	*/
      	mpMoviePlayer.repeatMode = MPMovieRepeatMode.None
      
      	// 设置画面缩放模式
      	/*
      		None,          不做任何缩放
      		AspectFit,     适应屏幕大小,保持宽高比,默认
      		AspectFill,    充满屏幕,保持宽高比
      		Fill           充满屏幕,不保持宽高比
      	*/
      	mpMoviePlayer.scalingMode = MPMovieScalingMode.AspectFit
      
      	// 设置媒体资源类型
      	/*
      		The playback type of the movie. Defaults to MPMovieSourceTypeUnknown.
      		Specifying a playback type before playing the movie can result in faster load times.
               
      		Unknown,
      		File,          Local or progressively downloaded network content
      		Streaming      Live or on-demand streaming content
      	*/
      	mpMoviePlayer.movieSourceType = MPMovieSourceType.File
      

    3、监听播放进度

    	// Movie Property Notifications:媒体属性观察者
    
    		MPMovieMediaTypesAvailableNotification   // 媒体属性可获取
    		MPMovieSourceTypeAvailableNotification   // 媒体类型是 MPMovieSourceTypeUnknown
    
    		MPMovieDurationAvailableNotification     // 媒体播放时长可获取
    		MPMovieNaturalSizeAvailableNotification  // 媒体原始尺寸可获取
    
    	// Movie Player Notifications:媒体播放观察者
    
    		MPMediaPlaybackIsPreparedToPlayDidChangeNotification   // 准备播放
    
    		MPMoviePlayerPlaybackDidFinishNotification            // 播放完成或退出播放
    
    		MPMoviePlayerPlaybackDidFinishReasonUserInfoKey       // NSNumber (MPMovieFinishReason)
    
    		MPMoviePlayerPlaybackStateDidChangeNotification       // 播放状态改变,通过程序或者用户操作改变
    
    		MPMoviePlayerScalingModeDidChangeNotification         // 画面缩放模式改变
    
    		MPMoviePlayerLoadStateDidChangeNotification           // 网络加载状态改变
    
    		MPMoviePlayerNowPlayingMovieDidChangeNotification     // 当前播放媒体改变
    
    		MPMoviePlayerWillEnterFullscreenNotification          // 将要进入全屏播放状态
    		MPMoviePlayerDidEnterFullscreenNotification           // 已经进入全屏播放状态
    		MPMoviePlayerWillExitFullscreenNotification           // 将要退出全屏播放状态
    		MPMoviePlayerDidExitFullscreenNotification            // 已经退出全屏播放状态
    		MPMoviePlayerFullscreenAnimationDurationUserInfoKey   // NSNumber of double (NSTimeInterval)
    		MPMoviePlayerFullscreenAnimationCurveUserInfoKey      // NSNumber of NSUInteger (UIViewAnimationCurve)
    
    		MPMoviePlayerIsAirPlayVideoActiveDidChangeNotification  // 开始或停止通过 AirPlay 播放
    
    		MPMoviePlayerReadyForDisplayDidChangeNotification       // 准备好显示
    
    • Objective-C

      	// 添加系统通知观察者
      	/*
      		观察的状态发生改变时将会调用添加的相应方法进行处理
      	*/
      	[[NSNotificationCenter defaultCenter] addObserver:self 
      	                                         selector:@selector(playFinished) 
      	                                             name:MPMoviePlayerPlaybackDidFinishNotification 
      	                                           object:mpMoviePlayer];
      	
      	// 观察者响应事件
      	- (void)playFinished {
              
      	}
      
      	// 取消监听
      	[[NSNotificationCenter defaultCenter] removeObserver:self 
      	                                                name:MPMoviePlayerPlaybackDidFinishNotification 
      	                                              object:mpMoviePlayer];
      
    • Swift

      	// 添加系统通知观察者
      	/*
      		观察的状态发生改变时将会调用添加的相应方法进行处理
      	*/
      	NSNotificationCenter.defaultCenter().addObserver(self, 
      	                                        selector: #selector(MpMoviePlayerController.playFinished), 
      	                                            name: MPMoviePlayerPlaybackDidFinishNotification, 
      	                                          object: mpMoviePlayer)
          
      	// 观察者响应事件
      	func playFinished() {
              	
      	}
      
      	// 取消监听
      	NSNotificationCenter.defaultCenter().removeObserver(self, 
      	                                               name: MPMoviePlayerPlaybackDidFinishNotification, 
      	                                             object: mpMoviePlayer)
      
  • 相关阅读:
    流程图制作在云上 https://www.processon.com/
    白板编程浅谈——Why, What, How
    如何创建一个非常酷的3D效果菜单
    Xcode及模拟器SDK下载
    Swift项目兼容Objective-C问题汇总
    iOS 多个精致动画
    代码注释中的5要与3不要
    如何处理iOS中照片的方向
    会报编译器警告的Xcode 6.3新特性:Nullability Annotations
    iOS应用架构谈 view层的组织和调用方案
  • 原文地址:https://www.cnblogs.com/QianChia/p/5771156.html
Copyright © 2011-2022 走看看