介绍:

和音频播放一样,ios也提供个很多的API。如mediaPlayer.framework下的MPMediaPlayerController、AVFounditon.framework下的AVPlayer和AVKit下的AVPlayerViewcontroller。MPMovieplayerController已经在ios9.0中被废弃了,用来替代的是AVPlayerViewcontroller。尽管如此,但还是说一下比较熟悉的MPMovieplayerController.

1、MPMovieplayerController

<1>初始化MPMovieplayerController

//创建本地URL(也可创建基于网络的URL)
NSURL* movieUrl = [[NSBundlemainBundle]URLForResource:@"movie"withExtension:@"mp4"];//使用指定URL创建MPMoviePlayerController//MPMoviePlayerController将会播放该URL对应的视频
MPMoviePlayerController*moviePlayer = [[MPMoviePlayerControlleralloc]initWithContentURL:movieUrl];

<2>设置属性并添加到当前控制器的View上

//设置该播放器的控制条风格。
moviePlayer.controlStyle =MPMovieControlStyleEmbedded;//设置该播放器的缩放模式
moviePlayer.scalingMode =MPMovieScalingModeAspectFit;//设置播放视图大小_movieplayer.view.frame =self.view.bounds;//设置播放视图宽高自适应调整
_movieplayer.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
//添加到当前控制器的View上
[self.View  addSubview:moviePlayer.view];

<3>播放选择

//播放缓冲
[self.movieplayer prepareToPlay];//播放开始
[moviePlayer play];//播放暂停
[moviePlayer pause];//播放停止
[moviePlayer stop];

由于属性太多,这里只列出能完成简单的播放器的属性,其他属性可在头文件中查找,注意:播放的状态的监听和截图功能都是通过通知实现的。

这里给一个具体的代码:

ViewController类

#import "ViewController.h"
#import "PlayViewController.h"@interface ViewController ()<PlayViewControllerDelegate>@property (weak, nonatomic) IBOutlet UIImageView*imageView;@end@implementationViewController- (void)viewDidLoad {[super viewDidLoad];self.navigationItem.title= @"播放器";
}-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{PlayViewController*playContronller =segue.destinationViewController;playContronller.delegate =self;
}#pragma mark <PlayViewControllerDelegate>
-(void)dismissPlayViewController{[self dismissViewControllerAnimated:self completion:nil];
}-(void)setImageWithThumbnailImage:(UIImage *)image{self.imageView.image=image;
}@end

View Code

PlayViewController类

#import <UIKit/UIKit.h>@protocol PlayViewControllerDelegate <NSObject>//关闭模态窗体
-(void)dismissPlayViewController;//设置截图
-(void)setImageWithThumbnailImage:(UIImage *)image;@end@interfacePlayViewController : UIViewController
@property (assign,nonatomic)id<PlayViewControllerDelegate> delegate;@end

View Code

#import "PlayViewController.h"
#import <MediaPlayer/MediaPlayer.h>
#import <AVKit/AVKit.h>@interfacePlayViewController ()
@property (strong,nonatomic)MPMoviePlayerController*movieplayer;@end@implementationPlayViewController/** 创建视频播放器*/
-(MPMoviePlayerController *)movieplayer{if (!_movieplayer) {//设置播放器的属性NSURL *URL = [[NSBundle mainBundle]URLForResource:@"风景" withExtension:@".mp4"];_movieplayer=[[MPMoviePlayerController alloc]initWithContentURL:URL];_movieplayer.view.frame=self.view.bounds;_movieplayer.view.autoresizingMask= UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight;//添加通知
[self addNotify];}return_movieplayer;
}- (void)viewDidLoad {[super viewDidLoad];[self.view addSubview:self.movieplayer.view];[self.movieplayer prepareToPlay];[self.movieplayer play];
}//添加通知
-(void)addNotify{//注册播放完成的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotificationobject:_movieplayer];//注册播放状态改变的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackStateChanged) name:MPMoviePlayerPlaybackStateDidChangeNotificationobject:_movieplayer];//注册全屏通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayDidEnterFullScreen) name:MPMoviePlayerDidEnterFullscreenNotificationobject:_movieplayer];[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayDidExitFullScreen) name:MPMoviePlayerDidExitFullscreenNotificationobject:_movieplayer];//注册请求截屏的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerRequestThumbnailImage) name:MPMoviePlayerThumbnailImageRequestDidFinishNotificationobject:_movieplayer];//发送截图请求[self.movieplayer requestThumbnailImagesAtTimes:@[@(5.0f),@(10.0f)] timeOption:MPMovieTimeOptionNearestKeyFrame];
}//截屏
-(void)moviePlayerRequestThumbnailImage{//获取图片UIImage *image = [self.movieplayer thumbnailImageAtTime:5.0ftimeOption:MPMovieTimeOptionNearestKeyFrame];NSLog(@"%@",image);if ([self.delegaterespondsToSelector:@selector(setImageWithThumbnailImage:)]) {[self.delegatesetImageWithThumbnailImage:image];}
}//播放完成
-(void)moviePlayBackDidFinish:(NSNotification *)notification{NSLog(@"播放完成");
}//播放状态改变
-(void)moviePlayBackStateChanged{switch(self.movieplayer.playbackState) {caseMPMoviePlaybackStateStopped:NSLog(@"播放停止");break;caseMPMoviePlaybackStatePlaying:NSLog(@"播放中");break;caseMPMoviePlaybackStatePaused:NSLog(@"播放暂停");break;caseMPMoviePlaybackStateInterrupted:NSLog(@"播放中断");break;caseMPMoviePlaybackStateSeekingForward:NSLog(@"快进播放");break;caseMPMoviePlaybackStateSeekingBackward:NSLog(@"回退播放");break;}
}//进入全屏
-(void)moviePlayDidEnterFullScreen{NSLog(@"进入全屏");
}//离开全屏
-(void)moviePlayDidExitFullScreen{NSLog(@"离开全屏");//关闭播放器
[self.movieplayer.view removeFromSuperview];self.movieplayer=nil;if ([self.delegaterespondsToSelector:@selector(dismissPlayViewController)]) {[self.delegatedismissPlayViewController];}[[NSNotificationCenter defaultCenter]removeObserver:self];
}@end

View Code

演示结果截图:

播放前:                                             播放中:

  

播放过程中一个指定时间点的视频截图

2、AVPlayer

AVPlayer既可以播放音乐又可以播放视频;使用AVPlayer不能直接显示视频,必须要加入AVPlayerLayer中,并添加到其他能显示的layer中。

//获取播放源的url
NSString *filePath = [[NSBundlemainBundle] pathForResource:@"backspace"ofType:@"mov"];
NSURL*sourceMovieURL =[NSURLfileURLWithPath:filePath];//创建播放器
AVAsset *movieAsset=[AVURLAsset URLAssetWithURL:sourceMovieURL options:nil];
AVPlayerItem*playerItem =[AVPlayerItem playerItemWithAsset:movieAsset];
AVPlayer*player =[AVPlayer playerWithPlayerItem:playerItem];//创建播放图层
AVPlayerLayer *playerLayer =[AVPlayerLayer playerLayerWithPlayer:player];
playerLayer.frame=self.view.layer.bounds;
playerLayer.videoGravity=AVLayerVideoGravityResizeAspect;
[self.view.layer addSublayer:playerLayer];//开始播放
[player play];

3、AVPlayerViewcontroller

AVPlayerViewcontroller继承自UIViewController,一般适用于点击一个视频缩略图,modal出一个新的界面来进行播放的情况。

用法:

//创建播放器
AVPlayerViewController *player =[[AVPlayerViewController alloc]init];
player.player=[[AVPlayer alloc]initWithURL:movieUrl];//模态出播放器
[self presentViewController:player animated:YES completion:nil];

4、ffmpeg-AVPlayer-for-iOS——强大的iOS视频播放框架

ffmpeg-avplayer-for-ios是一个微小但是强大的iOS视频播放框架,能够播放大多数的音频和视频格式文件(包括网络音频和视频流),没有格式转换的烦恼,不依赖VLC和SDL。支持播放1080P视频,但是建议只在iPad Air & iPhone 5s设备上播放1080P视频。

ffmpeg-avplayer-for-ios是专门针对iOS开发者编写的AVPlayer SDK,只需几行代码便可在应用中加入强大的视频播放器。
ffmpeg-avplayer-for-ios依赖于iOS OpenGL ES 2.0框架和基于LGPL协议开源的FFmpeg类库。
截图:
特性:

1、支持ARC;
2、支持armv7, armv7s, arm64, i386和x86-64;
3、支持播放本地文件;
4、支持Windows SMB/CIFS文件 (PRO version only);
5、支持http, https和rtmp协议;
6、解析音频和视频持续时间、帧尺寸信息;
7、获取视频缩略图;
8、实时位&帧率和网络缓冲进度计算;
9、查询当前播放时间信息;
10、播放速度控制;
11、亮度,对比度,饱和度控制;
12、支持音频、视频播放背景;
13、支持全屏模式;
14、系统音量控制;
15、从指定的事件位置播放;
16、支持播放、暂停、停止、重播、快进、快退。
17、支持音频会话中断处理程序;
18、自定义字幕字体;
19、支持嵌入字幕格式;
20、支持多个音频、字幕流;
21、支持SRT, ASS, SSA, SMI格式;
Github托管地址:https://github.com/iMoreApps/ffmpeg-avplayer-for-ios

转载于:https://www.cnblogs.com/XYQ-208910/p/5159726.html

iOS: ios视频播放(MPMediaPlayerController,AVPlayer,AVPlayerViewcontroller、ffmpeg-AVPlayer)...相关推荐

  1. iOS音视频播放-AVPlayer简单使用

    按公司需求需要对音频文件进行后台播放,借此机会对音频播放做了个总结.主要针对 AVPlayer 进行详细说明. iOS 各播放器比较 名称 使用环境 优点 确点 System Sound Servic ...

  2. 【iOS】视频播放之AVPlayer

    [iOS]视频播放之AVPlayer iOS平台使用播放视频,可用的选项一般有这四个,他们各自的作用和功能如下: 使用环境 优点 缺点 AVPlayerViewController AVKit 简单易 ...

  3. iOS音视频播放指南(二)

    1. 让你的App支持画中画 画中画指可以让视频在小窗中播放,可以一边看视频一边刷知乎 你可以使用AVPlayerViewController或者AVPictureInPictureControlle ...

  4. ios 播放不了服务器视频文件流,浅析iOS中视频播放的几种方案

    1.AVPlayer (1) 优缺点 优点:可以自定义 UI, 进行控制 缺点:单纯的播放,没有控制 UI(进度,暂停,播放等按钮),而且如果要显示播放界面, 需要借助AVPlayerLayer, 添 ...

  5. ios端无法播放mp3音频 ffmpeg mp3 转aac

    最近用到ffmpeg,需要把mp3转成aac,调用以下命令参数: 如果不加 -strict experimental ios端可能播放MP3音频失败 ffmpeg -i xxx.mp3 -acodec ...

  6. 移动开发(IOS) – iOS系统架构

    移动开发(IOS) – iOS系统架构 1.iOS系统架构的四个层次 1.1.可触摸层(Cocoa Touch):为应用程序开发提供各种有用的框架,并且大部分均与用户界面有关,本质上来说它负责用户在i ...

  7. 报错 Building for iOS, but the embedded framework ‘xxx.framework‘ was built for iOS + iOS Simulator

    1.问题描述 我在Xcode13.4上面运行一个集成了.a文件的工程之后报错,上一周还是好好的,突然就不行了,不知道咋回事 报错信息如下: Building for iOS, but the embe ...

  8. iOS开发(OC)——音频播放AVPlayer

    AVPlayer支持在线播放,使用如下: 1.头文件 #import <AVFoundation/AVFoundation.h> @property (nonatomic, strong) ...

  9. 【iOS】音频播放之AVAudioPlayer,AVPlayer,AVQueuePlayer

    前言 在婚语APP中,分别使用了AVAudioPlayer,AVPlayer,AVQueuePlayer来实现音频播放功能,下面以婚语的实际需求分别介绍它们的使用方法和区别. 需求1 档期备忘:用户新 ...

最新文章

  1. SpringBoot之配置嵌入式Servlet容器
  2. Linux之因BASH造成的键盘错误和环境问题
  3. SQL 学习最强刷题网站!
  4. mmap映射区和shm共享内存的区别总结
  5. Java开发环境!java基础知识点总结
  6. 如何使用echo指令向文件写入内容
  7. 理论基础 —— 排序 —— 基数排序
  8. 将asp.net webapi的运行时版本由4.0升级到4.5.1时遇到的问题及解决
  9. 汉化:Blocs for Mac(可视化网页设计工具)4.5.0
  10. 了解一下Redis队列【缓兵之计-延时队列】
  11. 第八章 软件维护(1)
  12. 今秋新iPhone将采用更大容量电池?外媒称最低3110mAh 较iPhone XR提升5%
  13. bugku ctf 杂项 旋转跳跃 (熟悉的声音中貌似又隐藏着啥,key:syclovergeek)
  14. 交友结婚的原则[转贴]
  15. Python工作好找吗?没有工作经验和学历怎么找?【就业必看】
  16. 什么是 MEMORY.DMP 文件 ?
  17. 计算机制图孔中心线,机械制图教程—1-5绘图方法和步骤
  18. python读取多个txt文件数据恢复_多个文件内容
  19. 全国多地新冠病例0增长,教你用Python画出当下疫情最火玫瑰图!
  20. 朔源反制:IDS IPS snort suricata

热门文章

  1. 大推荐——家庭书架·成功读库系列
  2. RabbitMQ安装和运行
  3. 3.2 表达式的类别与类型
  4. Git 配置命令设置
  5. WPF 中动态创建和删除控件
  6. TensorFlow入门:Graph
  7. mysql添加定时器
  8. 分区表在安装系统(MBR)丢失或损坏
  9. CSS3 @font-face
  10. ORACLE SQL机能优化系列(六)