标签:工程 翻译 content setw ima code 开源 ons 上下
在看这篇之前,如果您还不了解直播原理,请查看上篇文章如何快速的开发一个完整的iOS直播app(原理篇)
开发一款直播app,集成ijkplayer成功后,就算完成直播功能一半的工程了,只要有拉流url,就能播放直播啦
本篇主要讲解的是直播app中,需要用到的一个很重要的开源框架ijkplayer
,然后集成这个框架可能对大多数初学者
还是比较有难度的,所以本篇主要教你解决集成【ijkplayer】遇见的各种坑
。
很多文章,可能讲解的是如何做,我比较注重讲解为什么
这样做,大家有什么不明白,还可以多多提出来
。
如果喜欢我的文章,可以关注我微博:袁峥Seemygo,也可以来袁峥Seemygo,了解下我们的iOS培训课程。后续还会更新更多内容,有任何问题,欢迎简书留言
峥吖。。。
README.md文件
:框架的描述文件,描述这个框架怎么使用
编译语言
:程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要翻译,所以编译型语言的程序执行效率高,比如OC,C,C++
解释性语言
:解释性语言的程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低
解释性语言执行和编译语言执行的区别
:
脚本语言
:属于解析语言,必须通过解释器解析,将其一条条的翻译成机器可识别的指令,并按程序顺序执行。
shell解释器
:shell是一个命令行解释器,相当于windows的cmd,处于内核和用户之间,负责把用户的指令传递给内核并且把执行结果回显给用户.
bash
: bash是一种shell解释器版本,shell有很多种版本,就像人,也分不同国家的人。
shell
:通常我们说的shell,指的是shell脚本语言,而不是shell解释器。
什么时候使用shell命令
,比如有些系统命令经常需要用到,可以把命令封装到一个脚本文件,以后就不用再敲一遍了,直接执行脚本语言。sh
:sheel脚本文件后缀名
一般学习第三方库,都是先查看Demo
‘libavformat/avformat.h‘ file not found
原因
:因为libavformat是ffmpeg中的库,而ijkplayer是基于ffmpeg这个库的,因此需要导入ffmpeg
解决
:查看ijkplayer的README.md,一般都会有说明。
init-ios.sh
脚本的作用:下载ffmpeg源码
init-ios.sh
这个脚本做了哪些事情。init-ios.sh
脚本文件步骤一:
找到init-ios.sh脚本文件步骤二:
打开终端,cd进入到ijkplayer-master的目录中步骤三:
输入./init-ios.sh,就会执行当前脚本了。ffmpeg
了‘libavformat/avformat.h‘ file not found
错误原因
:执行init-ios.sh,仅仅是下载源码
,但是源码并没有参与编译,需要把源码编译成.a文件
打开 IJKMediaPlayer库
右击,发现FFMPEG中的库都是红的,表示不存在
解决
:查看ijkplayer的README.md
脚本文件
的目录下./compile-ffmpeg.sh clean
编译完ffmpeg后,IJKMediaPlayer库中显示
cmd+r,Demo运行成功
ijkplayer
的README
中的方法比较麻烦,不方便携带,不推荐。只有发布版本的库
。真机测试
,模拟器测试比较卡,不流畅
,真机就没有问题了- (void)loadData
{
// 映客数据url
NSString *urlStr = @"http://116.211.167.106/api/live/aggregation?uid=133825214&interest=1";
// 请求数据
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
mgr.responseSerializer = [AFJSONResponseSerializer serializer];
mgr.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/plain", nil];
[mgr GET:urlStr parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSDictionary * _Nullable responseObject) {
_lives = [YZLiveItem mj_objectArrayWithKeyValuesArray:responseObject[@"lives"]];
[_tableView reloadData];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
}
IJKFFMoviePlayerController
:用来做直播的类- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
// 设置直播占位图片
NSURL *imageUrl = [NSURL URLWithString:[NSString stringWithFormat:@"http://img.meelive.cn/%@",_live.creator.portrait]];
[self.imageView sd_setImageWithURL:imageUrl placeholderImage:nil];
// 拉流地址
NSURL *url = [NSURL URLWithString:_live.stream_addr];
// 创建IJKFFMoviePlayerController:专门用来直播,传入拉流地址就好了
IJKFFMoviePlayerController *playerVc = [[IJKFFMoviePlayerController alloc] initWithContentURL:url withOptions:nil];
// 准备播放
[playerVc prepareToPlay];
// 强引用,反正被销毁
_player = playerVc;
playerVc.view.frame = [UIScreen mainScreen].bounds;
[self.view insertSubview:playerVc.view atIndex:1];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
// 界面消失,一定要记得停止播放
[_player pause];
[_player stop];
}
后续还会更新更多有关直播的资料,希望做到教会每一个朋友从零开始做一款直播app,并且Demo也会慢慢完善.
Demo点击下载
打开工程,把jkplayer拖入到工程中
,而是直接把jkplayer库拷贝到与Classes同一级目录下就可以了。不要向下面这样操作
标签:工程 翻译 content setw ima code 开源 ons 上下
原文地址:http://www.cnblogs.com/supper-Ho/p/6234980.html