mp4.mvo.m4v.m2v.3gp.3g2
视频播放使用
#import "ViewController.h"
#import <MediaPlayer/MediaPlayer.h>
//如果想使用AVAssetImageGenerator 获得截图 必须导入AVFoundation
#import <AVFoundation/AVFoundation.h>
//AVAsset 通过URL 获取视频的资源
//AVAssetImageGenerator可以得到 视频里面的图片
初始化一个全局变量
@interface ViewController ()
{
MPMoviePlayerController *moviewPlayer;
}
@end
@implementation ViewController
// moviePlayer可以通过 通知来 检测到 视频播放的状态
// MPMoviePlayerPlaybackStateDidChangeNotification
//
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(changeState:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];
/**
* 播放视频的类
*
* MPMoviePlayerController
*/
NSString *path = [[NSBundle mainBundle]pathForResource:@"学前须知" ofType:@"mp4"];
moviewPlayer = [[MPMoviePlayerController alloc]initWithContentURL:[NSURL fileURLWithPath:path]];
UIImage *image = [self thumbnailImage:path];
self.view.backgroundColor = [UIColor colorWithPatternImage:image];
还需要设置 moviePlayer。View 的fram
//
// moviewPlayer.view.frame =self.view.frame;
// moviewPlayer.view.backgroundColor = [UIColor redColor];
//
//
显示视频显示的控制的样式
// moviewPlayer.controlStyle = MPMovieControlStyleEmbedded;
//
设置视频 是否循环播放
MPMovieRepeatModeNone 不循环
MPMovieRepeatModeOne 循环
// moviewPlayer.repeatMode = MPMovieRepeatModeNone;
//
// /**
// * 需要把 视频播放器的View 添加在 需要播放的视图
// *
// * @return
// */
//
// [self.view addSubview:moviewPlayer.view];
//
//
// NSLog(@"视频播放的当前时间%f",moviewPlayer.currentPlaybackTime);
//
// // 是否允许分享到airPlay
// moviewPlayer.allowsAirPlay =YES;
//
// // 是否使用了AirPlay
// NSLog(@"是否使用了AirPlay :%d",moviewPlayer.airPlayVideoActive);
//
// // 如果播放的是网络视频 是否需要 自动继续播放
// moviewPlayer.shouldAutoplay =YES;
//
// // 设置视频全屏
// // 1
// // moviewPlayer.fullscreen =YES;
// 2
// // [moviewPlayer setFullscreen:YES animated:YES];
//
播放
//
// [moviewPlayer play];
//
// NSLog(@"是否全屏 %d",moviewPlayer.isFullscreen);
//
// 获取视频当前加载状态
// 未知状态
// MPMovieLoadStateUnknown = 0,
// 可以播放的状态
// MPMovieLoadStatePlayable = 1 << 0,
// 如果使用了 shouAutoplay is YES 有可以自动播放的 自动播放
// MPMovieLoadStatePlaythroughOK
// 没有网络数据可以播放的时候
// MPMovieLoadStateStalled = 1 << 2,
// 获取视频播放的当前状态
// moviewPlayer.loadState
}
-(void)changeState:(NSNotification *)not
{
NSLog(@"%@",not.object);
// 可以获得 整个视频播放的对象
MPMoviePlayerController *mp = not.object;
// playbackState 只读的属性 可以通过它来获取 视频播放的状态
// MPMoviePlaybackStateStopped,停止
// MPMoviePlaybackStatePlaying,播放
// MPMoviePlaybackStatePaused,暂停
// MPMoviePlaybackStateInterrupted,中断
// MPMoviePlaybackStateSeekingForward,快进
// MPMoviePlaybackStateSeekingBackward 快退
NSLog(@"%ld",(long)mp.playbackState);
switch (mp.playbackState) {
case MPMoviePlaybackStateStopped:
NSLog(@"停止");
break;
case MPMoviePlaybackStatePlaying:
NSLog(@"开始");
break;
case MPMoviePlaybackStatePaused:
NSLog(@"暂停");
break;
case MPMoviePlaybackStateInterrupted:
NSLog(@"中断");
break;
case MPMoviePlaybackStateSeekingForward:
NSLog(@"快进");
break;
case MPMoviePlaybackStateSeekingBackward:
NSLog(@"快退");
break;
default:
break;
}
//通过moviePlayerController 获得截图的方法
// MPMovieTimeOptionNearestKeyFrame获得相对时间的截图
// MPMovieTimeOptionExact获得绝对时间的截图
[moviewPlayer requestThumbnailImagesAtTimes:@[@(1),@(5)] timeOption:MPMovieTimeOptionNearestKeyFrame];
// 检测截图成功的通知的名字
// MPMoviePlayerThumbnailImageRequestDidFinishNotification
// 可以获得 通知传过来 内容的 图片的key
// MPMoviePlayerThumbnailImageKey
}
//转码
//FFMGEG VFL 转码的开源框架
/**
* 截图
*
*
*/
-(UIImage *)thumbnailImage:(NSString *)path
{
// 1、通过 URL获得视频的资源
// AVAsset
// AVURLAsset
AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:path]];
//
// 这两个是一样的
// AVURLAsset *asset = [AVURLAsset assetWithURL:[NSURL fileURLWithPath:path]];
// 2、初始化 视频资源图片的持有者
AVAssetImageGenerator *generator =[[AVAssetImageGenerator alloc]initWithAsset:asset];
// 3、开始截图
// CMTime 包含了时间的值 和帧数
// copyCGImageAtTime 拷贝哪个时间段的图片(包括哪一帧)
CGImageRef ref = [generator copyCGImageAtTime:CMTimeMake(1, 2) actualTime:nil error:nil];
//
UIImage *image = [UIImage imageWithCGImage:ref];
return image;
}