一、Demo演示
demo演示.gif二、前言
我记得在大学的时候,每次上完课回到宿舍就会打开直播软件,看看游戏直播,学学游戏技术,又或者听主播吹吹牛,也蛮有意思的。直播最近几年也真的是异常红火,这方面的相关iOS开发的学习资料也非常多,于是萌生了模仿直播的App的想法,然后就尝试做了这个项目。
三、前期准备
我想大家可能听过一个很厉害的词——反编译。其实并没有想象中那么难。
强调下,本文仅供学习,不可用于商业用途
1. How to get the images of the App?
a. 首先准备一台Windows 电脑,下载itools,然后进行以下操作:
点击应用市场>搜索>你要的应用(这里我搜索的是映客)>下载它>在已完成中点击🔍(图1)>将该ipa文件更换后缀名为xx.zip>解压缩>在Payload文件中就可以得到你要的App中各种图片资料(图2)
图2.png
b. 取Assets.car中的资源
利用图形界面工具iOS-Images-Extractor即可,通过其中文说明可以获取到百度云的下载地址,下载安装即可。
使用步骤:1. 将要解压的Assets.car直接拖拽到图形工具类中 → 2. 点击图形工具上的 Start 按钮 → 3. 点击图形界面上的 Output Dir按钮 → 4. 解压目录即可查看所有文件
所以,App中的图片资源=解压缩得到的图片+Assets.car中的图片
2. How to get the API of the App consisting of the server host, image host, advertisement and the stream of the Live?
利用 Charles抓包工具,通过抓包找到你要的后台接口地址。如果接口有加密抓不到,就强行截图或者将你要信息记录在plist文件中然后读取。Charles使用的具体教程可以参考唐巧大神的 Charles 从入门到精通
四、框架解析
图4 框架介绍.png这是一个主要的界面,从这个界面中我们可以看出demo的框架。那么从上到下介绍下:
1.NavigationBar放了一个topview,可以联动下部分的ScrollView;topView上点击任何关注或附近,ScrollView相应切换相应的子页面。
2.中间的ScrollView分为三个子视图,分别是关注、热门、附近,每次按页进行左右视图切换。热门如图4,就是一个自定义的tableView,我是用xib对Cell进行自定义
3.一个自定义Tabbar,有三个按钮:主页、直播的圈圈、我的。默认页为我的;点击圆圈进入推流直播(就是自己开直播);点击我的,进入我的界面。我的和主页点击有一个动画效果,可以变大,然后再缩回。
五、拉流观看直播
本项目的核心,就是观看映客上的直播。如图5
这里用到了一个Github上Bilibili的开源的项目ijkplayer,是基于FFmpeg的跨平台播放器框架并对VideoToolbox支持,目前已被多个主流直播App集成使用。既然这么好用,那我也用。
在这个播放器之上,放了几个按钮(其实除了“X”都没用),“X”为关闭按钮,这里有个坑,记住这个关闭按钮要放到UIWindow上。
六、附近直播
图6 附近直播.png- 这里是一个普通的CollectionView配合自定义cell,这个位置做了屏幕适配,5.5寸屏幕每行显示4个,4.7和4寸每行显示3个。
- 我们可以看到每一个cell中包含了地理位置,这是利用到了获取地理位置CLLocation,通过获取经纬度来得到自己的位置,然后将这些参数传给映客对应的接口,就可以返回附近的直播的地址和和相关信息。
七、广告
图7 广告.png广告实际上就是一张图片+右上角的计时器3秒后跳过
八、推流进行直播
推流直播也用的是第三方框架—— LFLiveKit,它支持H.264,AAC硬编码,利用GPUImage处理美颜,弱网丢帧处理和动态转换频率。
下面将介绍图像处理之应用于实践。学了那么久图像处理,终于有点用了,给大家看下美颜效果,利用了GPUImage。
咳咳,这里我将出卖我的手:
可以看到左侧我的手垂涎欲滴,娇小诱人(默认开美颜),
右侧我的手只能用一个字来形容——ugly。
至此,大家应该明白图像处理学习的用处了吧。
九、我的
图9 我的.png做的比较简单,一个tableview组成,表头加主体构成,主要问题是屏幕适配。因为用的xib,所以用的autolayout做的适配,不过似乎做的不太好,后期会优化。
十、用到的第三方库
这里我粘贴下我的podfile,都是一些常用的第三方
target 'imitateInke' do
# Uncomment the next line if you're using Swift or would like to use dynamic frameworks
# use_frameworks!
# Pods for imitateInke
pod 'AFNetworking', '~> 3.1.0'
pod 'SDWebImage', '~> 3.8.1'
pod 'Masonry', '~> 1.0.1'
pod 'YYKit', '~> 1.0.7'
pod 'MJExtension'
pod 'LFLiveKit'
end
总结
这个项目我这样写起来看起来比较简单,但是实际上在做的过程中,其实并不容易。必须先得掌握iOS开发的基础,由浅入深才能最后实现到这个程度,包括OC基础,iOS基本控件的掌握,iOS网络编程以及多线程,获取地理位置信息等等,不仅如此,还需要掌握当下比较流行的第三方库,通过看他们提供的demo理解他们的源码。由于第三方库有更新以及iOS11的升级,导致还遇到了一些坑,在不断的理解和查询解决bug的过程中,也收获了挺多。这个项目实际上希望表达的是我对于iOS开发自学大概九个多月以来的总结,所花的时间也基本都是下班后的业余时间(PS:刚工作加班还贼多,哎)。希望大家能喜欢我的项目,以后会不定期更新我新掌握的一些知识或者吐槽。
网友评论