首页 > 代码库 > iOS开发_初识视频直播
iOS开发_初识视频直播
一、使用第三方ijkPlayer框架开发直播
1、去到B站得github主页,找到ijkplayer项目,下载源码 ijkplayer下载地址
2、Demo的使用以及如何编译Demo
请移步如何快速的开发一个完整的iOS直播app(播放篇)
其实里面讲的很详细,我也是参照这个写的Demo。然后在他的基础上加了一点东西。(不废话我直接上我的代码)
先看看效果图
特点
1、纯代码Masonry布局
2、集成ijkplayer第三方库,实现拉流播放
3、打包ijkplayer静态库,实现release版真机模拟机的包
4、实现点赞与送礼物特效
二、代码详解
其实使用第三方的库简单的实现拉流还是比较简单的。
只要将打包好的IJKMediaFramework包拉到项目,然后导入系统运行所必要的包,比如下图
1、导入头文件
import<IJKMediaFramework/IJKMediaFramework.h>
2、实现直播画面
// 拉流地址
NSURL *url = [NSURL URLWithString:_model.stream_addr];
// 创建IJKFFMoviePlayerController:专门用来直播,传入拉流地址就好了
IJKFFMoviePlayerController *playerVc = [[IJKFFMoviePlayerController alloc] initWithContentURL:url withOptions:nil];
// 准备播放
[playerVc prepareToPlay];
// 强引用,反正被销毁
_player = playerVc;
// 自动调整自己的宽度和高度
playerVc.view.frame = [UIScreen mainScreen].bounds;
playerVc.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view insertSubview:playerVc.view atIndex:1];
[playerVc setScalingMode:IJKMPMovieScalingModeAspectFill];
3、实现点赞与礼物
/**
点赞
*/
-(void)showTheLove:(UIButton *)sender{
_heartSize = 36;
DMHeartFlyView* heart = [[DMHeartFlyView alloc]initWithFrame:CGRectMake(0, 0, _heartSize, _heartSize)];
[self.view addSubview:heart];
CGPoint fountainSource = CGPointMake(_heartSize + _heartSize/2.0, self.view.bounds.size.height - _heartSize/2.0 - 10);
heart.center = fountainSource;
[heart animateInView:self.view];
// button点击动画
CAKeyframeAnimation *btnAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
btnAnimation.values = @[@(1.0),@(0.7),@(0.5),@(0.3),@(0.5),@(0.7),@(1.0), @(1.2), @(1.4), @(1.2), @(1.0)];
btnAnimation.keyTimes = @[@(0.0),@(0.1),@(0.2),@(0.3),@(0.4),@(0.5),@(0.6),@(0.7),@(0.8),@(0.9),@(1.0)];
btnAnimation.calculationMode = kCAAnimationLinear;
btnAnimation.duration = 0.3;
[sender.layer addAnimation:btnAnimation forKey:@"SHOW"];
}
/**
送礼物
*/
- (void)showMyPorsche918 {
CGFloat durTime = 3.0;
UIImageView *porsche918 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"porsche"]];
//设置汽车初始位置
porsche918.frame = CGRectMake(0, 0, 0, 0);
[self.view addSubview:porsche918];
//给汽车添加动画
[UIView animateWithDuration:durTime animations:^{
porsche918.frame = CGRectMake(ScreenW * 0.5 - 100, ScreenH * 0.5 - 100 * 0.5, 240, 120);
}];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(durTime * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//
[UIView animateWithDuration:0.5 animations:^{
porsche918.alpha = 0;
} completion:^(BOOL finished) {
[porsche918 removeFromSuperview];
}];
});
//烟花
CALayer *fireworksL = [CALayer layer];
fireworksL.frame = CGRectMake((ScreenW - 250) * 0.5, 100, 250, 50);
fireworksL.contents = (id)[UIImage imageNamed:@"gift_fireworks_0"].CGImage;
[self.view.layer addSublayer:fireworksL];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(durTime * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[UIView animateWithDuration:0.5 animations:^{
//没找到设置透明度的方法,有创意可以自己写
// fireworksL.alpha = 0;
} completion:^(BOOL finished) {
[fireworksL removeFromSuperlayer];
}];
});
_fireworksL = fireworksL;
NSMutableArray *tempArray = [NSMutableArray array];
for (int i = 1; i < 3; i++) {
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"gift_fireworks_%d",i]];
[tempArray addObject:image];
}
_fireworksArray = tempArray;
_timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(update) userInfo:nil repeats:YES];
}
static int _fishIndex = 0;
- (void)update {
_fishIndex++;
if (_fishIndex > 1) {
_fishIndex = 0;
}
UIImage *image = self.fireworksArray[_fishIndex];
_fireworksL.contents = (id)image.CGImage;
}
三、需要注意的地方
界面消失,一定要记得停止播放,不然会引起内存泄漏。
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
// 界面消失,一定要记得停止播放
[_player pause];
[_player stop];
[_player shutdown];
[_timer invalidate];
_timer = nil;
}
四、代码分享
传送门:LiveDemo
这个代码缺少最重要的自己打包的IJKMediaFramework,需要自己打包,不过我也学习分享文章中的方法 ,将文件分开,你们可以自己打包,也可以去我的百度云中下载。
传送门: IJKMediaFramework
最后,如果有什么疑问或者百度云链接或者GitHub源码链接出现问题,可以留言或者通过邮箱gzd1214@163.com找我
iOS开发_初识视频直播
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。