Contents
  1. 1. 方法一:
    1. 1.1. 使用IJKMediaFramework.framework(将IJKMediaFramework.framework导入到工程,做直播用这个)
    2. 1.2. 示例代码(以前项目中用到的地方,捡需要的东西拿)
  2. 2. 方法二:
    1. 2.1. 使用第三方(KRVideoPlayer)
    2. 2.2. pod “KRVideoPlayer”
    3. 2.3. 示例代码(以前项目中用到的地方,捡需要的东西拿,看不懂请点击右上角)

方法一:

使用IJKMediaFramework.framework(将IJKMediaFramework.framework导入到工程,做直播用这个)

  • 添加依赖库

其它依赖库

示例代码(以前项目中用到的地方,捡需要的东西拿)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#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

方法二:

使用第三方(KRVideoPlayer)

github链接

pod “KRVideoPlayer”

1
2
3
target 'xxxxx' do
pod "KRVideoPlayer"
end

示例代码(以前项目中用到的地方,捡需要的东西拿,看不懂请点击右上角)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#import "XYTopicVideoView.h"
#import <UIImageView+WebCache.h>
#import "XYTopicModel.h"
#import "XYSeeBigPictureController.h"
#import <KRVideoPlayerController.h>
@interface XYTopicVideoView ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) IBOutlet UIImageView *placeholderView;
@property (weak, nonatomic) IBOutlet UILabel *playcountLabel;
@property (weak, nonatomic) IBOutlet UILabel *videotimeLabel;
@property (nonatomic, strong) KRVideoPlayerController *videoController;
@end
@implementation XYTopicVideoView
- (void)awakeFromNib
{
self.autoresizingMask = UIViewAutoresizingNone;
// 允许图片交互
self.imageView.userInteractionEnabled = YES;
// 给图片添加点击手势
[self.imageView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(seeBigPicture)]];
}
- (void)seeBigPicture
{
XYSeeBigPictureController *seeBigPicture = [[XYSeeBigPictureController alloc] init];
seeBigPicture.topic = self.topic;
[self.window.rootViewController presentViewController:seeBigPicture animated:YES completion:nil];
}
- (void)setTopic:(XYTopicModel *)topic
{
_topic = topic;
// 显示占位图
self.placeholderView.hidden = NO;
[self.imageView sd_setImageWithURL:[NSURL URLWithString:topic.image1] placeholderImage:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
if (!image) return; // 图片下载不成功
// 隐藏占位图
self.placeholderView.hidden = YES;
}];
}
- (IBAction)play {
NSURL *videoURL = [NSURL URLWithString:self.topic.videouri];
[self playVideoWithURL:videoURL];
}
- (void)playVideoWithURL:(NSURL *)url
{
if (!self.videoController) {
self.videoController = [[KRVideoPlayerController alloc] initWithFrame:[UIScreen mainScreen].bounds];
__weak typeof(self)weakSelf = self;
[self.videoController setDimissCompleteBlock:^{
weakSelf.videoController = nil;
}];
[self.videoController showInWindow];
}
self.videoController.contentURL = url;
}
- (void)layoutSubviews
{
[super layoutSubviews];
self.videoController.frame = self.imageView.frame;
}
Contents
  1. 1. 方法一:
    1. 1.1. 使用IJKMediaFramework.framework(将IJKMediaFramework.framework导入到工程,做直播用这个)
    2. 1.2. 示例代码(以前项目中用到的地方,捡需要的东西拿)
  2. 2. 方法二:
    1. 2.1. 使用第三方(KRVideoPlayer)
    2. 2.2. pod “KRVideoPlayer”
    3. 2.3. 示例代码(以前项目中用到的地方,捡需要的东西拿,看不懂请点击右上角)