208 lines
6.5 KiB
Objective-C
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
|