//
|
// TZVideoPlayerController.m
|
// TZImagePickerController
|
//
|
// Created by 谭真 on 16/1/5.
|
// Copyright © 2016年 谭真. All rights reserved.
|
//
|
|
#import "TZVideoPlayerController.h"
|
#import <MediaPlayer/MediaPlayer.h>
|
#import "UIView+Layout.h"
|
#import "TZImageManager.h"
|
#import "TZAssetModel.h"
|
#import "TZImagePickerController.h"
|
#import "TZPhotoPreviewController.h"
|
|
@interface TZVideoPlayerController () {
|
AVPlayer *_player;
|
UIButton *_playButton;
|
UIImage *_cover;
|
|
UIView *_toolBar;
|
UIButton *_doneButton;
|
UIProgressView *_progress;
|
|
UIStatusBarStyle _originStatusBarStyle;
|
}
|
@end
|
|
@implementation TZVideoPlayerController
|
|
- (void)viewDidLoad {
|
[super viewDidLoad];
|
self.view.backgroundColor = [UIColor blackColor];
|
TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
|
if (tzImagePickerVc) {
|
self.navigationItem.title = tzImagePickerVc.previewBtnTitleStr;
|
}
|
[self configMoviePlayer];
|
}
|
|
- (void)viewWillAppear:(BOOL)animated {
|
[super viewWillAppear:animated];
|
_originStatusBarStyle = [UIApplication sharedApplication].statusBarStyle;
|
[UIApplication sharedApplication].statusBarStyle = iOS7Later ? UIStatusBarStyleLightContent : UIStatusBarStyleBlackOpaque;
|
}
|
|
- (void)viewWillDisappear:(BOOL)animated {
|
[super viewWillDisappear:animated];
|
[UIApplication sharedApplication].statusBarStyle = _originStatusBarStyle;
|
}
|
|
- (void)configMoviePlayer {
|
[[TZImageManager manager] getPhotoWithAsset:_model.asset completion:^(UIImage *photo, NSDictionary *info, BOOL isDegraded) {
|
_cover = photo;
|
}];
|
[[TZImageManager manager] getVideoWithAsset:_model.asset completion:^(AVPlayerItem *playerItem, NSDictionary *info) {
|
dispatch_async(dispatch_get_main_queue(), ^{
|
_player = [AVPlayer playerWithPlayerItem:playerItem];
|
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:_player];
|
playerLayer.frame = self.view.bounds;
|
[self.view.layer addSublayer:playerLayer];
|
[self addProgressObserver];
|
[self configPlayButton];
|
[self configBottomToolBar];
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pausePlayerAndShowNaviBar) name:AVPlayerItemDidPlayToEndTimeNotification object:_player.currentItem];
|
});
|
}];
|
}
|
|
/// Show progress,do it next time / 给播放器添加进度更新,下次加上
|
- (void)addProgressObserver{
|
AVPlayerItem *playerItem = _player.currentItem;
|
UIProgressView *progress = _progress;
|
[_player addPeriodicTimeObserverForInterval:CMTimeMake(1.0, 1.0) queue:dispatch_get_main_queue() usingBlock:^(CMTime time) {
|
float current = CMTimeGetSeconds(time);
|
float total = CMTimeGetSeconds([playerItem duration]);
|
if (current) {
|
[progress setProgress:(current/total) animated:YES];
|
}
|
}];
|
}
|
|
- (void)configPlayButton {
|
_playButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
_playButton.frame = CGRectMake(0, 64, self.view.tz_width, self.view.tz_height - 64 - 44);
|
[_playButton setImage:[UIImage imageNamedFromMyBundle:@"MMVideoPreviewPlay.png"] forState:UIControlStateNormal];
|
[_playButton setImage:[UIImage imageNamedFromMyBundle:@"MMVideoPreviewPlayHL.png"] forState:UIControlStateHighlighted];
|
[_playButton addTarget:self action:@selector(playButtonClick) forControlEvents:UIControlEventTouchUpInside];
|
[self.view addSubview:_playButton];
|
}
|
|
- (void)configBottomToolBar {
|
_toolBar = [[UIView alloc] initWithFrame:CGRectMake(0, self.view.tz_height - 44, self.view.tz_width, 44)];
|
CGFloat rgb = 34 / 255.0;
|
_toolBar.backgroundColor = [UIColor colorWithRed:rgb green:rgb blue:rgb alpha:0.7];
|
|
_doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
_doneButton.frame = CGRectMake(self.view.tz_width - 44 - 12, 0, 44, 44);
|
_doneButton.titleLabel.font = [UIFont systemFontOfSize:16];
|
[_doneButton addTarget:self action:@selector(doneButtonClick) forControlEvents:UIControlEventTouchUpInside];
|
TZImagePickerController *tzImagePickerVc = (TZImagePickerController *)self.navigationController;
|
if (tzImagePickerVc) {
|
[_doneButton setTitle:tzImagePickerVc.doneBtnTitleStr forState:UIControlStateNormal];
|
[_doneButton setTitleColor:tzImagePickerVc.oKButtonTitleColorNormal forState:UIControlStateNormal];
|
} else {
|
[_doneButton setTitle:[NSBundle tz_localizedStringForKey:@"Done"] forState:UIControlStateNormal];
|
[_doneButton setTitleColor:[UIColor colorWithRed:(83/255.0) green:(179/255.0) blue:(17/255.0) alpha:1.0] forState:UIControlStateNormal];
|
}
|
[_toolBar addSubview:_doneButton];
|
[self.view addSubview:_toolBar];
|
}
|
|
#pragma mark - Click Event
|
|
- (void)playButtonClick {
|
CMTime currentTime = _player.currentItem.currentTime;
|
CMTime durationTime = _player.currentItem.duration;
|
if (_player.rate == 0.0f) {
|
if (currentTime.value == durationTime.value) [_player.currentItem seekToTime:CMTimeMake(0, 1)];
|
[_player play];
|
[self.navigationController setNavigationBarHidden:YES];
|
_toolBar.hidden = YES;
|
[_playButton setImage:nil forState:UIControlStateNormal];
|
if (iOS7Later) [UIApplication sharedApplication].statusBarHidden = YES;
|
} else {
|
[self pausePlayerAndShowNaviBar];
|
}
|
}
|
|
- (void)doneButtonClick {
|
TZImagePickerController *imagePickerVc = (TZImagePickerController *)self.navigationController;
|
if (self.navigationController) {
|
if (imagePickerVc.autoDismiss) {
|
[self.navigationController dismissViewControllerAnimated:YES completion:^{
|
[self callDelegateMethod];
|
}];
|
}
|
} else {
|
[self dismissViewControllerAnimated:YES completion:^{
|
[self callDelegateMethod];
|
}];
|
}
|
}
|
|
- (void)callDelegateMethod {
|
TZImagePickerController *imagePickerVc = (TZImagePickerController *)self.navigationController;
|
if ([imagePickerVc.pickerDelegate respondsToSelector:@selector(imagePickerController:didFinishPickingVideo:sourceAssets:)]) {
|
[imagePickerVc.pickerDelegate imagePickerController:imagePickerVc didFinishPickingVideo:_cover sourceAssets:_model.asset];
|
}
|
if (imagePickerVc.didFinishPickingVideoHandle) {
|
imagePickerVc.didFinishPickingVideoHandle(_cover,_model.asset);
|
}
|
}
|
|
#pragma mark - Notification Method
|
|
- (void)pausePlayerAndShowNaviBar {
|
[_player pause];
|
_toolBar.hidden = NO;
|
[self.navigationController setNavigationBarHidden:NO];
|
[_playButton setImage:[UIImage imageNamedFromMyBundle:@"MMVideoPreviewPlay.png"] forState:UIControlStateNormal];
|
if (iOS7Later) [UIApplication sharedApplication].statusBarHidden = NO;
|
}
|
|
- (void)dealloc {
|
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
}
|
|
@end
|