#import <UIKit/UIKit.h>
@interface PlayViewController : UIViewController
@property (nonatomic, strong)NSURL * liveUrl;
@property (nonatomic, strong)NSString * imageUrl;
@end
#import "PlayViewController.h"
#import "UIImageView+WebCache.h"
#import <IJKMediaFramework/IJKMediaFramework.h>
#define XJScreenH [UIScreen mainScreen].bounds.size.height
#define XJScreenW [UIScreen mainScreen].bounds.size.width
@interface PlayViewController ()
//背景图片
@property (nonatomic, strong)UIImageView *backgroundIamgeView;
//用于播放直播视频的控制器
@property (atomic, retain) id <IJKMediaPlayback> player;
@end
@implementation PlayViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
//直播试图
[self goPlaying];
// 开启通知
[self installMovieNotificationObservers];
[self loadUI];
}
- (void)goPlaying{
self.player = [[IJKFFMoviePlayerController alloc]initWithContentURL:self.liveUrl withOptions:nil];
//获取到直播试图
UIView *playerView = [self.player view];
playerView.frame = self.view.bounds;
[self.view addSubview:playerView];
//这一步必须有,否则不能播放,准备完毕自动开始播放
[self.player prepareToPlay];
}
- (void)loadUI
{
//背景图片
self.backgroundIamgeView = [[UIImageView alloc] initWithFrame:self.view.bounds];
[self.backgroundIamgeView sd_setImageWithURL:[NSURL URLWithString: _imageUrl] placeholderImage:[UIImage imageNamed:@"LaunchImage-700"]];
[self.view addSubview:self.backgroundIamgeView];
//背景图片的毛玻璃效果
UIVisualEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
visualEffectView.frame = self.backgroundIamgeView.bounds;
[self.backgroundIamgeView addSubview:visualEffectView];
// 返回
UIButton * backBtn = [UIButton buttonWithType:UIButtonTypeCustom];
backBtn.frame = CGRectMake(10, 24, 33, 33);
[backBtn setImage:[UIImage imageNamed:@"show_image_back_icon"] forState:UIControlStateNormal];
[backBtn addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
backBtn.layer.shadowColor = [UIColor blackColor].CGColor;
backBtn.layer.shadowOffset = CGSizeMake(0, 0);
backBtn.layer.shadowOpacity = 0.5;
backBtn.layer.shadowRadius = 1;
[self.view addSubview:backBtn];
// 暂停
UIButton * playBtn = [UIButton buttonWithType:UIButtonTypeCustom];
playBtn.frame = CGRectMake(XJScreenW - 43, 24, 33, 33);
[playBtn setImage:[UIImage imageNamed:@"playButtonPause"] forState:(UIControlStateNormal)];
[playBtn setImage:[UIImage imageNamed:@"playButtonPlay"] forState:(UIControlStateSelected)];
[playBtn addTarget:self action:@selector(play_btn:) forControlEvents:(UIControlEventTouchUpInside)];
playBtn.layer.shadowColor = [UIColor blackColor].CGColor;
playBtn.layer.shadowOffset = CGSizeMake(0, 0);
playBtn.layer.shadowOpacity = 0.5;
playBtn.layer.shadowRadius = 1;
[self.view addSubview:playBtn];
}
// 返回
- (void)goBack
{
//停播
[self.player shutdown];
[self dismissViewControllerAnimated:YES completion:nil];
}
// 暂停开始
- (void)play_btn:(UIButton *)sender {
sender.selected = !sender.selected;
if (![self.player isPlaying]) {
// 播放
[self.player play];
}else{
// 暂停
[self.player pause];
}
}
/*
IJKMPMoviePlayerLoadStateDidChangeNotification
IJKMPMoviePlayerPlaybackDidFinishNotification
IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification
IJKMPMoviePlayerPlaybackStateDidChangeNotification
*/
#pragma mark 通知
- (void)installMovieNotificationObservers{
//监听播放状态,当播放状态改变时将北京图片设为透明
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackStateDidChange:) name:IJKMPMoviePlayerPlaybackStateDidChangeNotification object:_player];
}
- (void)removeMovieNotificationObservers {
[[NSNotificationCenter defaultCenter] removeObserver:self name:IJKMPMoviePlayerPlaybackStateDidChangeNotification object:_player];
}
- (void)moviePlayBackStateDidChange:(NSNotification*)notification {
self.backgroundIamgeView.hidden = YES;
}
- (void)dealloc{
[self removeMovieNotificationObservers];
}
@end