iOS视频功能模块的开发(一)

简介: iOS视频功能模块的开发

iOS视频功能模块的开发


一、使用MPMoviePlayerController进行视频播放


       MPMoviePlayerController是iOS中进行视频播放开发的一个控制类,里面涵盖了视频播放中大部分的需求功能,在使用这个框架时,需要导入头文件<MediaPlayer/MediaPlayer.h>。


1、初始化方法


       MPMoviePlayerController可以播放网络视频,也可以播放本地视频,通过不同的URL来进行初始化,例如本地视频的初始化如下:


//视频文件路径

   NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:@"mp4"];

   //视频URL

   NSURL *url = [NSURL fileURLWithPath:path];

   //视频播放对象

   MPMoviePlayerController * movie = [[MPMoviePlayerController alloc] initWithContentURL:url];


初始化和完成相关配置后,我们需要将MPMoviePlayerController对象的View添加在我们需要的UI视图上,这个控制器只提供的控制的相关功能,外部的UI并没有为我们提供好。


2、相关属性与方法



@property (nonatomic, copy) NSURL *contentURL;


视频文件的url地址




@property (nonatomic, readonly) UIView *view;


播放器view,在使用之前,必须设置frame大小,然后将其添加在我们的UI视图上




@property (nonatomic, readonly) UIView *backgroundView;


播放器背景颜色




@property (nonatomic, readonly) MPMoviePlaybackState playbackState;


播放器的当前播放状态,枚举定义如下:


typedef NS_ENUM(NSInteger, MPMoviePlaybackState) {

   MPMoviePlaybackStateStopped,//停止播放

   MPMoviePlaybackStatePlaying,//正在播放

   MPMoviePlaybackStatePaused,//暂停播放

   MPMoviePlaybackStateInterrupted,//中断播放

   MPMoviePlaybackStateSeekingForward,//快进

   MPMoviePlaybackStateSeekingBackward//快退

};



@property (nonatomic, readonly) MPMovieLoadState loadState;


播放器的网络缓存状态,枚举定义如下:


typedef NS_OPTIONS(NSUInteger, MPMovieLoadState) {

   MPMovieLoadStateUnknown        = 0,//状态未知

   MPMovieLoadStatePlayable       = 1 << 0,//缓存数据足够开始播放,但是视频并没有缓存完全

   MPMovieLoadStatePlaythroughOK  = 1 << 1, //已经缓存完成,如果设置了自动播放,这时会自动播放

   MPMovieLoadStateStalled        = 1 << 2, //数据缓存已经停止,播放将暂停

};




@property (nonatomic) MPMovieControlStyle controlStyle;


播放器风格,枚举如下:


typedef NS_ENUM(NSInteger, MPMovieControlStyle) {

   MPMovieControlStyleNone,       // 无控制器

   MPMovieControlStyleEmbedded,   // 嵌入视频风格

   MPMovieControlStyleFullscreen, // 全屏播放风格

 

   MPMovieControlStyleDefault = MPMovieControlStyleEmbedded

};





@property (nonatomic) MPMovieRepeatMode repeatMode;


播放器的循环模式,枚举如下:


typedef NS_ENUM(NSInteger, MPMovieRepeatMode) {

   MPMovieRepeatModeNone,//播放结束后不循环

   MPMovieRepeatModeOne//循环

};



@property (nonatomic) BOOL shouldAutoplay;


是否开启自动播放




@property (nonatomic, getter=isFullscreen) BOOL fullscreen;


设置是否充满屏幕



- (void)setFullscreen:(BOOL)fullscreen animated:(BOOL)animated;


设置是否充满屏幕,带动画效果



@property (nonatomic) MPMovieScalingMode scalingMode;


设置播放器的填充方式,枚举定义如下:


typedef NS_ENUM(NSInteger, MPMovieScalingMode) {

   MPMovieScalingModeNone,       // 无缩放

   MPMovieScalingModeAspectFit,  // 适应大小模式

   MPMovieScalingModeAspectFill, // 充满可视范围,可能会被裁剪

   MPMovieScalingModeFill        // 缩放到充满视图

};



@property (nonatomic, readonly) BOOL readyForDisplay NS_AVAILABLE_IOS(6_0);


返回YES说明数据栈已经缓存好数据,返回NO则没有缓存好




@property (nonatomic, readonly) MPMovieMediaTypeMask movieMediaTypes;


数据文件的格式,枚举如下:


typedef NS_OPTIONS(NSUInteger, MPMovieMediaTypeMask) {

   MPMovieMediaTypeMaskNone  = 0,//格式未知

   MPMovieMediaTypeMaskVideo = 1 << 0,//音频格式

   MPMovieMediaTypeMaskAudio = 1 << 1//视频格式

};




@property (nonatomic) MPMovieSourceType movieSourceType;


视频的数据类型,枚举如下:


typedef NS_ENUM(NSInteger, MPMovieSourceType) {

   MPMovieSourceTypeUnknown,//类型未知

   MPMovieSourceTypeFile,     // 文件类型

   MPMovieSourceTypeStreaming // 数据流

};




@property (nonatomic, readonly) NSTimeInterval duration;


视频文件的时长




@property (nonatomic, readonly) NSTimeInterval playableDuration;


缓存完成能够播放的时长




@property (nonatomic, readonly) CGSize naturalSize;


视频的原始大小




@property (nonatomic) NSTimeInterval initialPlaybackTime;


播放器开始播放的时间




@property (nonatomic) NSTimeInterval endPlaybackTime;


播放器结束播放的时间




@property (nonatomic) BOOL allowsAirPlay;


是否允许云端播放




- (void)requestThumbnailImagesAtTimes:(NSArray *)playbackTimes timeOption:(MPMovieTimeOption)optio;


获取视频某一些时间点的缩略图,参数枚举如下,生成缩略图的数据回调在后面的通知中详说:


typedef NS_ENUM(NSInteger, MPMovieTimeOption) {

   MPMovieTimeOptionNearestKeyFrame,//使用最近的关键帧生成缩略图

   MPMovieTimeOptionExact//使用精确的当前帧生成缩略图

};



与播放控制相关的方法如下:


//调用这个方法进行播放视频的准备工作

- (void)prepareToPlay;

//获取播放器的准备工作是否就绪

@property(nonatomic, readonly) BOOL isPreparedToPlay;

//调用此方法进行视频的播放

- (void)play;

//调用此方法进行视频播放的暂停操作

- (void)pause;

//调用此方法停止视频播放

- (void)stop;

//当前视频已播放的时间

@property(nonatomic) NSTimeInterval currentPlaybackTime;

//当前视频的播放速度

@property(nonatomic) float currentPlaybackRate;

//调用此方法进行快进操作

- (void)beginSeekingForward;

//调用此方法进行快退操作

- (void)beginSeekingBackward;

//调用此方法结束快进或者快退操作

- (void)endSeeking;



3、系统相关通知


       MPMoviePlayerController的系统回调并没有采用代理的设计模式,而是采用的系统发通知,我们注册观察者,接收我们需要的通知。举例几种常用通知如下:



NSString * const MPMoviePlayerScalingModeDidChangeNotification;


播放器缩放产生改变时发送的通知




NSString * const MPMoviePlayerPlaybackDidFinishNotification;


播放结束时发送的通知




NSString * const MPMoviePlayerPlaybackStateDidChangeNotification;


播放状态改变时发送的通知




NSString * const MPMoviePlayerLoadStateDidChangeNotification;


缓冲状态改变时发送的通知




NSString * const MPMoviePlayerNowPlayingMovieDidChangeNotification;


当前播放的视频改变时发送的通知




NSString * const MPMoviePlayerWillEnterFullscreenNotification;


将要进入全屏模式时发送的通知




NSString * const MPMoviePlayerDidEnterFullscreenNotification;


已经进入全屏时发送的通知




NSString * const MPMoviePlayerWillExitFullscreenNotification;


将要退出全屏时发送的通知




NSString * const MPMoviePlayerDidExitFullscreenNotification;


已经退出全屏时发送的通知




NSString * const MPMoviePlayerThumbnailImageRequestDidFinishNotification;


获取缩略图完成时发送的通知



目录
相关文章
|
1月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
12天前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
100 66
|
22天前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
|
25天前
|
存储 安全 数据安全/隐私保护
深入解析iOS 14隐私保护功能:用户数据安全的新里程碑
随着数字时代的到来,个人隐私保护成为全球关注的焦点。苹果公司在最新的iOS 14系统中引入了一系列创新的隐私保护功能,旨在为用户提供更透明的数据使用信息和更强的控制权。本文将深入探讨iOS 14中的几项关键隐私功能,包括App跟踪透明性、简化的隐私设置以及增强的系统安全性,分析它们如何共同作用以提升用户的隐私保护水平。
79 3
|
27天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
28天前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
26天前
|
监控 搜索推荐 数据安全/隐私保护
深入探索iOS 14的隐私保护功能
本文将深入探讨iOS 14操作系统中的隐私保护功能,包括新的隐私指示器、应用程序跟踪透明度以及增强的隐私设置。我们将分析这些功能如何提高用户对个人数据的控制权,并讨论它们对应用开发者和广告行业的影响。
33 1
|
1月前
|
安全 IDE Swift
探索iOS开发之旅:从初学者到专家
在这篇文章中,我们将一起踏上iOS开发的旅程,从基础概念的理解到深入掌握核心技术。无论你是编程新手还是希望提升技能的开发者,这里都有你需要的指南和启示。我们将通过实际案例和代码示例,展示如何构建一个功能齐全的iOS应用。准备好了吗?让我们一起开始吧!
|
1月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
33 2
|
1月前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
54 9