1如何播放视频

iOS提供了MPMoviePlayerController、MPMoviePlayerViewController两个类,可以用来轻松播放视频和网络流媒体\网络音频。

提示:网络音频同样使用此控制器播放。YouTobe就是用MPMoviePlayerController实现的。

MPMoviePlayerViewController只能全屏播放视频。

上述两个类都定义在了MediaPlayer框架中,必须手动添加

2MPMoviePlayerController支持的格式

n  MPMoviePlayerController

n  继承自NSObject

n  内部有个view可以展示视频内容

n  将该视图添加其他控制器的view上,即可显示视频内容

n  MPMoviePlayerController可以播放的视频格式包括:

n  H.264、MPEG-4等

n  支持的文件扩展名包括:avi,mkv,mov,m4v,mp4等

n  可以从苹果官网:http://support.apple.com/kb/HT1425下载一些用来测试的视频文件,文件都比较小

n  提示:MPMoviePlayerController并不支持所有的视频格式,如果要播放不支持的视频格式,需要借助第三方框架进行解码,如VLC

https://github.com/videolan/vlc

3MPMoviePlayerController的使用

加载视频资源(注意,如果urlnil同样可以加载)

NSAssert(self.url, @"URL不能为空");

[[MPMoviePlayerController alloc] initWithContentURL:self.url];

显示:

[self.view addSubview:self.moviePlayer.view];

通过设置AutoresizingMask属性可以在横竖屏转换时自动调整视图大小

播放:

[self.moviePlayer play];

全屏:

[self.moviePlayer setFullscreen:YES animated:YES];

【备注】MPMoviePlayerController的播放状态是通过通知中心监听的

例如:

#import "MJMoviePlayerViewController.h"

#import <MediaPlayer/MediaPlayer.h>

@interface MJMoviePlayerViewController ()

@property (nonatomic, strong) MPMoviePlayerController *moviePlayer;

@end

@implementation MJMoviePlayerViewController

- (MPMoviePlayerController *)moviePlayer

{

if (!_moviePlayer) {

// 负责控制媒体播放的控制器

NSURL *url =

[[NSBundle mainBundle] URLForResource:@"promo_full.mp4" withExtension:nil];

_moviePlayer =

[[MPMoviePlayerController alloc] initWithContentURL:url];

_moviePlayer.view.frame = self.view.bounds;

_moviePlayer.view.autoresizingMask =

UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

[self.view addSubview:_moviePlayer.view];

}

return _moviePlayer;

}

- (void)viewDidLoad

{

[super viewDidLoad];

[self.moviePlayer play];

}

@end

运行结果:

4常用监听通知事件

状态变化:

MPMoviePlayerPlaybackStateDidChangeNotification

播放结束:

MPMoviePlayerPlaybackDidFinishNotification

退出全屏:

MPMoviePlayerDidExitFullscreenNotification

截屏完成:

MPMoviePlayerThumbnailImageRequestDidFinishNotification

截屏方法:

-requestThumbnailImagesAtTimes:timeOption:

例如:

#import "MJMoviePlayerViewController.h"

#import <MediaPlayer/MediaPlayer.h>

@interface MJMoviePlayerViewController ()

@property (nonatomic, strong) MPMoviePlayerController *moviePlayer;

@end

@implementation MJMoviePlayerViewController

- (MPMoviePlayerController *)moviePlayer

{

if (!_moviePlayer) {

// 负责控制媒体播放的控制器

_moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:self.movieURL];

_moviePlayer.view.frame = self.view.bounds;

_moviePlayer.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

[self.view addSubview:_moviePlayer.view];

}

return _moviePlayer;

}

- (void)viewDidLoad

{

[super viewDidLoad];

[self.moviePlayer play];

[self addNotification];

}

- (void)viewDidAppear:(BOOL)animated

{

self.moviePlayer.fullscreen = YES;

}

#pragma mark - 添加通知

- (void)addNotification

{

// 1. 添加播放状态的监听

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];

[nc addObserver:self selector:@selector(stateChanged) name:

MPMoviePlayerPlaybackStateDidChangeNotification object:nil];

// 2. 播放完成

[nc addObserver:self selector:@selector(finished) name:

MPMoviePlayerPlaybackDidFinishNotification object:nil];

// 3. 全屏

[nc addObserver:self selector:@selector(finished) name:

MPMoviePlayerDidExitFullscreenNotification object:nil];

// 4. 截屏完成通知

[nc addObserver:self selector:@selector(captureFinished:) name:

MPMoviePlayerThumbnailImageRequestDidFinishNotification object:nil];

// 数组中有多少时间,就通知几次

// MPMovieTimeOptionExact 精确

// MPMovieTimeOptionNearestKeyFrame 大概

[self.moviePlayer requestThumbnailImagesAtTimes:@[@(5.0), @(20.0)] timeOption:MPMovieTimeOptionNearestKeyFrame];

}

- (void)captureFinished:(NSNotification *)notification

{

NSLog(@"%@", notification);

[self.delegate moviePlayerDidCapturedWithImage:notification.userInfo[MPMoviePlayerThumbnailImageKey]];

}

- (void)finished

{

// 1. 删除通知监听

[[NSNotificationCenter defaultCenter] removeObserver:self];

// 2. 返回上级窗体

// 谁申请,谁释放!

[self.delegate moviePlayerDidFinished];

NSLog(@"完成");

}

/**

MPMoviePlaybackStateStopped,           停止

MPMoviePlaybackStatePlaying,           播放

MPMoviePlaybackStatePaused,            暂停

MPMoviePlaybackStateInterrupted,       中断

MPMoviePlaybackStateSeekingForward,    下一个

MPMoviePlaybackStateSeekingBackward    前一个

*/

- (void)stateChanged

{

switch (self.moviePlayer.playbackState) {

case MPMoviePlaybackStatePlaying:

NSLog(@"播放");

break;

case MPMoviePlaybackStatePaused:

NSLog(@"暂停");

break;

case MPMoviePlaybackStateStopped:

// 执行[self.moviePlayer stop]或者前进后退不工作时会触发

NSLog(@"停止");

break;

default:

break;

}

}

@end

iOS开发之视频播放的更多相关文章

  1. ios开发 MPMoviePlayerController 视频播放器

    项目中用到视频播放功能, 写点视频基础部分 MPMoviePlayerController是通过MediaPlayer.frame引入的,可用于播放在iOS支持的所有格式的视频,用起来很简单!!! M ...

  2. ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调试功能正常)

    ABBPlayerKit ios开发视频播放后台下载功能实现 : 代码下载地址:https://github.com/niexiaobo/ABBPlayerKit github资料学习和下载地址:ht ...

  3. iOS开发系列文章(持续更新……)

    iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...

  4. ios开发中的小技巧

    在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...

  5. IOS 开发中要注意的事项

    1.关于拍摄 TGCameraViewController – 基于 AVFoundation 的自定义相机.样式漂亮,轻量并且可以很容易地集成到 iOS 项目中.不会内存吃紧 2.block 中对控 ...

  6. 文顶顶iOS开发博客链接整理及部分项目源代码下载

    文顶顶iOS开发博客链接整理及部分项目源代码下载   网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...

  7. iOS开发常见BUG和一些小技巧(ps:耐心看完,很实用)

    [385][scrollView不接受点击事件,是因为事件传递失败] // // MyScrollView.m // Created by beyond on 15/6/6. // Copyright ...

  8. iOS开发人员不容错过的10大工具

    内容简介 1.iOS简介 2.iOS开发十大实用工具之开发环境 3.iOS开发十大实用工具之图标设计 4.iOS开发十大实用工具之原型设计 5.iOS开发十大实用工具之演示工具 6.iOS开发十大实用 ...

  9. iOS - 开发类库

    开发类库   UI 项目名称 项目信息 1.MJRefresh 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明. ...

随机推荐

  1. display的none与block(判断登录界面的账号密码是否为空)

    判断登录界面的账号密码是否为空的时候又不想用alert显示就需要用display来隐藏alert啦(在设置时切忌要将隐藏的内容写在账号和密码的div中,否则会根据屏幕的分辨率不同而有所变化,这是本人教 ...

  2. BOM之history对象

    前面的话 history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起.由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后 ...

  3. 隐藏Apache的版本号及其它敏感信息

    首先,打开配置文件: /etc/apache2/apache2.conf 来修改ServerTokens 的配置: 找到:ServerTokens Full 所在行,将其改为: ServerToken ...

  4. 论SNAPSHOT包的危害性

    先介绍一下背景:我们应用是一个标准的spring+webx工程,博主在一次项目发布前为了再次测试一下自己的代码,将分支部署到日常环境中,但是项目启动的时候报错: 第一眼看到这个堆栈后有点懵逼 第一是上 ...

  5. 融云发送手机短信验证短信(.net版本)

    首先本次需求是在MVC5中进行的,通过收费的融云服务来验证手机号码,而且本次的项目也是前后台分离,所以添加了WEBAPI2,那么先添加WEBAPI的接口 using System; using Sys ...

  6. 报表学习总结(一)——ASP.NET 水晶报表(Crystal Reports)的简单使用

    一.水晶报表简介 Crystal Reports(水晶报表)是一款商务智能(BI)软件,主要用于设计及产生报表.水晶报表是业内最专业.功能最强的报表系统,它除了强大的报表功能外.最大的优势是实现了与绝 ...

  7. AngularJs ng-repeat指令中怎么实现含有自定义指令的动态html

    今天用angular写table的时候,遇到了一个问题.在ng-repeat中,含有动态的html,而这些html中含有自定义指令. 因为希望实现一个能够复用的table,所以定义了一个指令mySta ...

  8. Android.mk模板(持续更新中)

    此文列出Android.mk的常用模板(部分内容源于多篇他人博客,这里不具体指出),如有错漏,还请在评论中指出,后期持续更新   #链接第三方动态库,在和部分android源码的编译中验证不过 LOC ...

  9. 用友财务软件U8V10.1虚拟机 及培训视频

    需要学习用友财务软件U8V10.1虚拟机 及培训视频 ,请联系QQ:858-048-581 虚拟机系统为WIN2003+SQLSERVER2008+U8V10.1,虚拟机内存最少需要2G

  10. C# TCP多线程服务器示例

    前言 之前一直很少接触多线程这块.这次项目中刚好用到了网络编程TCP这块,做一个服务端,需要使用到多线程,所以记录下过程.希望可以帮到自己的同时能给别人带来一点点收获- 关于TCP的介绍就不多讲,神马 ...