iOS开发之视频播放

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

时间: 2024-10-29 10:45:56

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

iOS开发系列--音频播放、录音、视频播放、拍照、视频录制

iOS开发系列--音频播放.录音.视频播放.拍照.视频录制 转载:http://www.cnblogs.com/kenshincui/p/4186022.html#avFoundationCamera --iOS多媒体 概览 随着移动互联网的发展,如今的手机早已不是打电话.发短信那么简单了,播放音乐.视频.录音.拍照等都是很常用的功能.在iOS中对于多媒体的支持是非常强大的,无论是音视频播放.录制,还是对麦克风.摄像头的操作都提供了多套API.在今天的文章中将会对这些内容进行一一介绍: 音频 音

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

ABBPlayerKit ios开发视频播放后台下载功能实现 : 代码下载地址:https://github.com/niexiaobo/ABBPlayerKit github资料学习和下载地址:https://github.com/niexiaobo/ 实现功能 :播放视频 ,视频后台下载 (真机调试功能正常) 1.使用ZFPlayer播放视频(可以在线和本地播放,基于AVPlayer,调节音量和屏幕亮度) 2.使用 WHCNetWorkKit 实现下载,后台下载(多任务同时下载,单任务下载,

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

文顶顶iOS开发博客链接整理及部分项目源代码下载 网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程却很难找.如果你是初学者,在学习了斯坦福iOS7公开课和跟着文顶顶的博客做项目之后,最快只需要2个月时间,就基本可以独立完成iOS App的开发工作.有经验的开发者也可以在该博客中寻找代码片段进行学习借鉴,必有所收获. 在此也向@文顶顶 表示严重感谢! 由于文顶顶博客博文繁多,每次找文章需要频繁的翻页,

iOS - AVPlayer 音视频播放

iOS - AVPlayer 音视频播放 本文目录 前言 1.本地/网络音视频播放 2.本地/网络音视频播放设置 3.AVPlayerViewControllerDelegate 画中画协议方法 回到顶部 前言 NS_CLASS_AVAILABLE(10_7, 4_0) @interface AVPlayer : NSObject @available(iOS 4.0, *) public class AVPlayer : NSObject NS_CLASS_AVAILABLE_IOS(8_0)

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报开源框架 图像: 1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.      下载:https://github.com/mwaterfall/MWPhotoBrowser目前比较活跃的社区仍旧是Github,

iOS开发 非常全的三方库、插件、大牛博客等等

UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件. SVPullToRefresh- 下拉刷新控件. MJRefresh- 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明.具体使用看"使用方法". (国人写) XHRefreshControl- XHRefreshControl 是一款高扩展性.低耦合度的下拉刷新.上提加载更多的组件.(国人写) CBStoreHo

iOS开发之资料收集

github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自github:https://github.com/Tim9Liu9/TimLiu-iOS UI 下拉刷新 EGOTableViewPullRefresh- 最早的下拉刷新控件. SVPullToRefresh- 下拉刷新控件. MJRefresh- 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者

iOS开发-常用第三方开源框架介绍

iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作. 下载:https://github.com/mwaterfall/MWPhotoBrowser 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下G

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

[385][scrollView不接受点击事件,是因为事件传递失败] // // MyScrollView.m // Created by beyond on 15/6/6. // Copyright (c) 2015年 beyond.com All rights reserved. // 不一定要用继承,可以使用分类 #import MyScrollView.h #import CoView.h @implementation MyScrollView - (void)touchesBegan