ID:152611

Eric liu 有团队

iOS开发工程师

  • 公司信息:
  • 北京中文万维科技有限公司
  • 工作经验:
  • 4年
  • 兼职日薪:
  • 800元/8小时
  • 兼职时间:
  • 周六
  • 周日
  • 可工作日远程
  • 所在区域:
  • 北京
  • 朝阳

技术能力

● 扎实的Objective-C、Swift语言基础,熟悉python语言,具体良好的代码编写风格和设计思想。
● 掌握KVO的底层实现,熟练使用runloop、runtime运行时机制进行方法的替换,动态类、方法的生成。
● 了解响应式编程、链式编程思想,并在实际开发中运用,进行项目的开发 
● iOS开发中能熟练的使用JavaScript实现JS交互,了解 H5 和 UI 界面的交互;
● 熟练掌握多线程开发,熟练掌握网络通信协议,数据传输,JSON数据解析;
● 熟练掌握YYKit、Lottie等主流框架的使用
● 熟练掌握Git、SVN源代码管理器;
● 熟练掌握XMPP;
● 熟练使用Mac系统、Xcode等相关开发工具掌握 iOS 应用开发、发布、上线流程,逻辑思维较强;
● 熟悉移动终端网络编程,熟悉XML/JSON,掌握HTTP/TCP/IP协议,Socket网络编程,精通 JSON ,熟练使用XML 数据解析;
● 熟练使用各种设计模式,如代理模式、单例模式、工厂模式、观察者模式等设计模式 ;
● 熟练掌握数据持久化技术,如使用 数据库、CoreData、NSUserdDefault、Plist 及归档等;
● 熟练掌握 UI 系统界面和自定义控件,熟练掌握动画的制作 ;
● 熟练使用并理解 MJRefresh、SDWebImage、AFNetworking、JSONModel、MBProgress、FMDB 等第三方库;
● 熟悉Instruments进行性能检测,继而优化代码;
● 熟练使用 CocoaPods 管理第三方类库。

项目经验

英语天天见(学生端)、abc(教师端)(已上线)
该项目是一款直播教育类app,项目分为教师端、学生端。项目从2018年06月份开始研发、版本迭代。研发期间,解决房间内因视频丢帧造成的消息丢失问题,视频延迟卡顿优化、房间内部模块的重构、消息节点传递、解耦合等。
1. 房间因视频丢帧造成消息丢失:之前房间内部消息的执行仅依靠视频帧携带的SEI信息,但是视频因网络抖动发生丢帧,会导致学生端无法响应老师端发出的指令。解决方案:教师端从两个渠道发送指令信息:视频帧插入SEI、socket长连接。学生端将收到的长链接消息存放到消息队列中待执行。学生端需要计算从老师端发送到接收到视频之间的时间差。如果接收到视频SEI信息,直接执行SEI信息,未接收到,消息轮询判断间隔时间,若大于时间差,执行消息队列中的消息。
2. 视频延迟卡顿优化:
1> 对客户端进行网络实时监测,根据客户端的网络情况进行拉流码率的调节,网络状况越差清晰度越低,如果网络状态很差,选择只播放音频。
2> 选择硬解码
3> 优化缓冲策略:在播放录播课时,增大播放器的缓冲区,待播放器缓冲到阈值时进行播放。使用系统的AVPlayer时,属性automaticallyWaitsToMinimizeStalling(iOS10.0)就是控制播放器缓冲策略的。
3. 房间内部模块的重构:随着功能的增加,房间内的业务越来越繁重。所以就对房间内容进行了重构:
1> 将内部课件按课件类型分类,UI和相应课型的课件逻辑分离。使得单元测试变得更加容易。逻辑调整、UI调试可以分离进行
2> 分离消息总线,根据消息落点来打开执行相应课件的功能。根据数据有无驱动UI展示。
4. 处理课件不同层次造成的手势拦截、冲突等问题。利用贝塞尔曲线完成学生端画板功能,完成学生涂鸦功能。
5. 语音识别及字符串相似度匹配:利用苹果原生SpeechKit框架完成语音识别功能并根据编辑距离算法计算语音识别内容与正确答案的相似度,完成语音答题功能。同时将语音进行AAC编码成文件,保存并上传到服务端。
云会见(已上线)
该项目是一款视频会议类app。项目用到的技术点:
1.视频的采编解:通过使用VideoToolBox、AVFoundation采集视频。编码采用H264进行编码:创建编码器,配置编码器参数,调用VideoToolBox进行编码,在编码回调中在I帧中获取sps、pps信息。编码结束之后,通过RTP连接发送到服务器。
2.音频的采集:使用AudioToolBox进行采集。处理音频采集回声抑制、自动增益,在采集回调中进行编码,编码结束之后通过RTP发送。
3.音频解码:在收到音频数据之后,通过相对应的音频解码器进行解码,然后调用opus库进行解码,播放音频。
4.视频解码:收到视频数据之后,通过对应的视频解码器获取Nalu_Type的值,根据不同的值获取视频数据的sps、pps值、解析I帧、P帧数据。通过VideoToolBox进行视频数据的硬解码。解码完成回调中将数据交由GPU,使用OpenGL进行画面的渲染。
5.信令控制:客户端和服务端通过socket连接,来处理消息的收发,进而控制音视频的采集和业务逻辑的处理。
遇到的问题及解决办法:
1. 视频解帧出现花屏:
视频解析过程中会出现绿屏、视频画面显示一半等情况。这是因为在网络抖动的情况下,解析视频的时候,视频帧的sps、pps包含的信息与当前帧不对应导致解帧失败。或者缺少sps、pps信息就开始进行解帧。
解决办法:在解帧之前判断上一次解帧是否失败,如果失败重置rss、pps值,再开始解析视频帧
2.socket 粘包问题解决方式:
a.服务端返回的字段中有可识别的头和尾,可以根据头和尾来进行拆包
b.服务器返回的数据只包含头,头里边有数据的长度。可以根据这个头包含的数据长度来进行拆包。
星宇直播 (用户端)
该项目是一款直播类app。接手项目之后,发现结构臃肿、代码管理混乱。之后分析现有产品需求以及项目架构,根据需求重新规划整个项目的架构体系:
1.对原工程进行业务模块与功能组件进行分离,保证所有的功能组件独立于主工程之外,便于复用、业务模块的调用。
2.对业务模块进行划分与拆解:将业务模块按照各自的用途进行拆解,降低、切断各个业务模块的强依赖。
3.所有组件、模块独立编译:对新功能、新需求,采用组件化、模块化模式进行编码,能够独立于主工程进行工作,确保功能模块的复用性,提高开发效率。
4.网络请求引擎模块的开发,在网络请求中加入filter层,filter层实现思路:依据服务端、客户端接口返回数据类型的约定,将客户端需要解析到的字段按照字段---

团队情况

  • 整包服务: App开发   
角色 职位
负责人 iOS开发工程师
队员 iOS工程师

信用行为

  • 接单
    0
  • 评价
    0
  • 收藏
    0
微信扫码,建群沟通

发布任务

企业点击发布任务,工程师会在任务下报名,招聘专员也会在1小时内与您联系,1小时内精准确定人才

微信接收人才推送

关注猿急送微信平台,接收实时人才推送

接收人才推送
联系需求方端客服
联系需求方端客服