iOS: ios视频播放(MPMediaPlayerController,AVPlayer,AVPlayerViewcontroller、ffmpeg-AVPlayer)...
介绍:
和音频播放一样,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视频。
转载于:https://www.cnblogs.com/XYQ-208910/p/5159726.html
iOS: ios视频播放(MPMediaPlayerController,AVPlayer,AVPlayerViewcontroller、ffmpeg-AVPlayer)...相关推荐
- iOS音视频播放-AVPlayer简单使用
按公司需求需要对音频文件进行后台播放,借此机会对音频播放做了个总结.主要针对 AVPlayer 进行详细说明. iOS 各播放器比较 名称 使用环境 优点 确点 System Sound Servic ...
- 【iOS】视频播放之AVPlayer
[iOS]视频播放之AVPlayer iOS平台使用播放视频,可用的选项一般有这四个,他们各自的作用和功能如下: 使用环境 优点 缺点 AVPlayerViewController AVKit 简单易 ...
- iOS音视频播放指南(二)
1. 让你的App支持画中画 画中画指可以让视频在小窗中播放,可以一边看视频一边刷知乎 你可以使用AVPlayerViewController或者AVPictureInPictureControlle ...
- ios 播放不了服务器视频文件流,浅析iOS中视频播放的几种方案
1.AVPlayer (1) 优缺点 优点:可以自定义 UI, 进行控制 缺点:单纯的播放,没有控制 UI(进度,暂停,播放等按钮),而且如果要显示播放界面, 需要借助AVPlayerLayer, 添 ...
- ios端无法播放mp3音频 ffmpeg mp3 转aac
最近用到ffmpeg,需要把mp3转成aac,调用以下命令参数: 如果不加 -strict experimental ios端可能播放MP3音频失败 ffmpeg -i xxx.mp3 -acodec ...
- 移动开发(IOS) – iOS系统架构
移动开发(IOS) – iOS系统架构 1.iOS系统架构的四个层次 1.1.可触摸层(Cocoa Touch):为应用程序开发提供各种有用的框架,并且大部分均与用户界面有关,本质上来说它负责用户在i ...
- 报错 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 ...
- iOS开发(OC)——音频播放AVPlayer
AVPlayer支持在线播放,使用如下: 1.头文件 #import <AVFoundation/AVFoundation.h> @property (nonatomic, strong) ...
- 【iOS】音频播放之AVAudioPlayer,AVPlayer,AVQueuePlayer
前言 在婚语APP中,分别使用了AVAudioPlayer,AVPlayer,AVQueuePlayer来实现音频播放功能,下面以婚语的实际需求分别介绍它们的使用方法和区别. 需求1 档期备忘:用户新 ...
最新文章
- SpringBoot之配置嵌入式Servlet容器
- Linux之因BASH造成的键盘错误和环境问题
- SQL 学习最强刷题网站!
- mmap映射区和shm共享内存的区别总结
- Java开发环境!java基础知识点总结
- 如何使用echo指令向文件写入内容
- 理论基础 —— 排序 —— 基数排序
- 将asp.net webapi的运行时版本由4.0升级到4.5.1时遇到的问题及解决
- 汉化:Blocs for Mac(可视化网页设计工具)4.5.0
- 了解一下Redis队列【缓兵之计-延时队列】
- 第八章 软件维护(1)
- 今秋新iPhone将采用更大容量电池?外媒称最低3110mAh 较iPhone XR提升5%
- bugku ctf 杂项 旋转跳跃 (熟悉的声音中貌似又隐藏着啥,key:syclovergeek)
- 交友结婚的原则[转贴]
- Python工作好找吗?没有工作经验和学历怎么找?【就业必看】
- 什么是 MEMORY.DMP 文件 ?
- 计算机制图孔中心线,机械制图教程—1-5绘图方法和步骤
- python读取多个txt文件数据恢复_多个文件内容
- 全国多地新冠病例0增长,教你用Python画出当下疫情最火玫瑰图!
- 朔源反制:IDS IPS snort suricata