iOS仿映客直播

作者: EchooJ | 来源:发表于2018-06-22 22:43 被阅读201次
    插图.jpg

    一、Demo演示

    demo演示.gif

    二、前言

    我记得在大学的时候,每次上完课回到宿舍就会打开直播软件,看看游戏直播,学学游戏技术,又或者听主播吹吹牛,也蛮有意思的。直播最近几年也真的是异常红火,这方面的相关iOS开发的学习资料也非常多,于是萌生了模仿直播的App的想法,然后就尝试做了这个项目。

    三、前期准备

    我想大家可能听过一个很厉害的词——反编译。其实并没有想象中那么难。

    强调下,本文仅供学习,不可用于商业用途

    1. How to get the images of the App?

    a. 首先准备一台Windows 电脑,下载itools,然后进行以下操作:
    点击应用市场>搜索>你要的应用(这里我搜索的是映客)>下载它>在已完成中点击🔍(图1)>将该ipa文件更换后缀名为xx.zip>解压缩>在Payload文件中就可以得到你要的App中各种图片资料(图2)

    图1.jpg
    图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 从入门到精通

    图3.png

    四、框架解析

    图4 框架介绍.png

    这是一个主要的界面,从这个界面中我们可以看出demo的框架。那么从上到下介绍下:
    1.NavigationBar放了一个topview,可以联动下部分的ScrollView;topView上点击任何关注或附近,ScrollView相应切换相应的子页面。
    2.中间的ScrollView分为三个子视图,分别是关注、热门、附近,每次按页进行左右视图切换。热门如图4,就是一个自定义的tableView,我是用xib对Cell进行自定义
    3.一个自定义Tabbar,有三个按钮:主页、直播的圈圈、我的。默认页为我的;点击圆圈进入推流直播(就是自己开直播);点击我的,进入我的界面。我的和主页点击有一个动画效果,可以变大,然后再缩回。

    五、拉流观看直播

    本项目的核心,就是观看映客上的直播。如图5

    图5 观看直播.png
    这里用到了一个Github上Bilibili的开源的项目ijkplayer,是基于FFmpeg的跨平台播放器框架并对VideoToolbox支持,目前已被多个主流直播App集成使用。既然这么好用,那我也用。
    在这个播放器之上,放了几个按钮(其实除了“X”都没用),“X”为关闭按钮,这里有个坑,记住这个关闭按钮要放到UIWindow上。

    六、附近直播

    图6 附近直播.png
    1. 这里是一个普通的CollectionView配合自定义cell,这个位置做了屏幕适配,5.5寸屏幕每行显示4个,4.7和4寸每行显示3个。
    2. 我们可以看到每一个cell中包含了地理位置,这是利用到了获取地理位置CLLocation,通过获取经纬度来得到自己的位置,然后将这些参数传给映客对应的接口,就可以返回附近的直播的地址和和相关信息。

    七、广告

    图7 广告.png

    广告实际上就是一张图片+右上角的计时器3秒后跳过

    八、推流进行直播

    推流直播也用的是第三方框架—— LFLiveKit,它支持H.264,AAC硬编码,利用GPUImage处理美颜,弱网丢帧处理和动态转换频率。
    下面将介绍图像处理之应用于实践。学了那么久图像处理,终于有点用了,给大家看下美颜效果,利用了GPUImage。
    咳咳,这里我将出卖我的手:

    图8 美颜.png
    可以看到左侧我的手垂涎欲滴,娇小诱人(默认开美颜),
    右侧我的手只能用一个字来形容——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:刚工作加班还贼多,哎)。希望大家能喜欢我的项目,以后会不定期更新我新掌握的一些知识或者吐槽。

    本文仅供学习,不可用于商业用途

    相关文章

      网友评论

      本文标题:iOS仿映客直播

      本文链接:https://www.haomeiwen.com/subject/ahcoeftx.html