Files
ifish/Ifish/controllers/IfishTabControllers/消息/IfishIMFiles/Sessions/ViewController/Video/NTESVideoViewController.m
T
2017-08-15 16:59:01 +08:00

208 lines
6.5 KiB
Objective-C

//
// NTESVideoViewController.m
// NIM
//
// Created by chris on 15/4/12.
// Copyright (c) 2015年 Netease. All rights reserved.
//
#import "NTESVideoViewController.h"
#import "Toast+UIView.h"
#import "Reachability.h"
#import "UIAlertView+NTESBlock.h"
#import "SVProgressHUD.h"
#import "NTESNavigationHandler.h"
@interface NTESVideoViewController ()
@property (nonatomic,strong) NIMVideoObject *videoObject;
@end
@implementation NTESVideoViewController
@synthesize moviePlayer = _moviePlayer;
- (instancetype)initWithVideoObject:(NIMVideoObject *)videoObject{
self = [super initWithNibName:nil bundle:nil];
if (self) {
_videoObject = videoObject;
}
return self;
}
- (void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[[NIMSDK sharedSDK].resourceManager cancelTask:_videoObject.path];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.edgesForExtendedLayout = UIRectEdgeAll;
self.navigationItem.title = @"视频短片";
if ([[NSFileManager defaultManager] fileExistsAtPath:self.videoObject.path]) {
[self startPlay];
}else{
__weak typeof(self) wself = self;
[self downLoadVideo:^(NSError *error) {
if (!error) {
[wself startPlay];
}else{
[wself.view makeToast:@"下载失败,请检查网络"
];
}
}];
}
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear: animated];
[SVProgressHUD dismiss];
if (![[self.navigationController viewControllers] containsObject: self])
{
[self topStatusUIHidden:NO];
}
}
- (void)viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
[self.moviePlayer stop];
}
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear: animated];
if (_moviePlayer.playbackState == MPMoviePlaybackStatePlaying) {//不要调用.get方法,会过早的初始化播放器
[self topStatusUIHidden:YES];
}else{
[self topStatusUIHidden:NO];
}
}
- (void)downLoadVideo:(void(^)(NSError *error))handler{
[SVProgressHUD show];
__weak typeof(self) wself = self;
[[NIMSDK sharedSDK].resourceManager download:self.videoObject.url filepath:self.videoObject.path progress:^(float progress) {
[SVProgressHUD showProgress:progress];
} completion:^(NSError *error) {
if (wself) {
[SVProgressHUD dismiss];
if (handler) {
handler(error);
}
}
}];
}
- (void)startPlay{
self.moviePlayer.view.frame = self.view.bounds;
self.moviePlayer.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.moviePlayer play];
[self.view addSubview:self.moviePlayer.view];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlaybackComplete:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:self.moviePlayer];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayStateChanged:)
name:MPMoviePlayerPlaybackStateDidChangeNotification
object:self.moviePlayer];
CGRect bounds = self.moviePlayer.view.bounds;
CGRect tapViewFrame = CGRectMake(0, 0, bounds.size.width, bounds.size.height);
UIView *tapView = [[UIView alloc]initWithFrame:tapViewFrame];
[tapView setAutoresizingMask:UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight];
tapView.backgroundColor = [UIColor clearColor];
[self.moviePlayer.view addSubview:tapView];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(onTap:)];
[tapView addGestureRecognizer:tap];
}
- (void)moviePlaybackComplete: (NSNotification *)aNotification
{
if (self.moviePlayer == aNotification.object)
{
[self topStatusUIHidden:NO];
NSDictionary *notificationUserInfo = [aNotification userInfo];
NSNumber *resultValue = [notificationUserInfo objectForKey:MPMoviePlayerPlaybackDidFinishReasonUserInfoKey];
MPMovieFinishReason reason = [resultValue intValue];
if (reason == MPMovieFinishReasonPlaybackError)
{
NSError *mediaPlayerError = [notificationUserInfo objectForKey:@"error"];
NSString *errorTip = [NSString stringWithFormat:@"播放失败: %@", [mediaPlayerError localizedDescription]];
[self.view makeToast:errorTip
];
}
}
}
- (void)moviePlayStateChanged: (NSNotification *)aNotification
{
if (self.moviePlayer == aNotification.object)
{
switch (self.moviePlayer.playbackState)
{
case MPMoviePlaybackStatePlaying:
[self topStatusUIHidden:YES];
break;
case MPMoviePlaybackStatePaused:
case MPMoviePlaybackStateStopped:
case MPMoviePlaybackStateInterrupted:
[self topStatusUIHidden:NO];
case MPMoviePlaybackStateSeekingBackward:
case MPMoviePlaybackStateSeekingForward:
break;
}
}
}
- (void)topStatusUIHidden:(BOOL)isHidden
{
[[UIApplication sharedApplication] setStatusBarHidden:isHidden];
self.navigationController.navigationBar.hidden = isHidden;
NTESNavigationHandler *handler = (NTESNavigationHandler *)self.navigationController.delegate;
handler.recognizer.enabled = !isHidden;
}
- (void)onTap: (UIGestureRecognizer *)recognizer
{
switch (self.moviePlayer.playbackState)
{
case MPMoviePlaybackStatePlaying:
[self.moviePlayer pause];
break;
case MPMoviePlaybackStatePaused:
case MPMoviePlaybackStateStopped:
case MPMoviePlaybackStateInterrupted:
[self.moviePlayer play];
break;
default:
break;
}
}
- (MPMoviePlayerController*)moviePlayer{
if (!_moviePlayer) {
_moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:self.videoObject.path]];
_moviePlayer.controlStyle = MPMovieControlStyleNone;
_moviePlayer.scalingMode = MPMovieScalingModeAspectFill;
_moviePlayer.fullscreen = YES;
}
return _moviePlayer;
}
@end