构建SNAP APP

目标

这篇文章依然是内部分享一个课题,主要讲述短视频APP “SNAP”的诞生,“SNAP”是公司内部产品代号,目前已经上线App Store和Android各大国内应用市场。

最初要达到的目标是一个月完成需求开发:
用户登录,通过信息流看别人发布的视频,发布自由拍视频,跟拍别人视频和自有的剧本。
当时产品也没有完全准备好需求,我们感觉到了压力和着急。

技术实施

使用熟练度掌握最成熟的技术和框架优先保证稳定性和效率。

关键技术路径

跟拍是解析剧本文件,根据时间显示不同的贴纸。那么自由拍就是剧本文件的写入过程。
考虑到自由拍需求和扩展,将剧本分为前期贴纸和后期特效,全局三个文件。

自由拍

前期剧本

  1. 录制页录制时直接将选择的贴纸写入到视频(硬编),并生成前期剧本文件。
  2. 音频和视频剥离开分为两个文件:音乐解码写入文件,视频编码写入文件。
  3. 视频暂停:每录制一段,生成一个单独的视频文件。
  4. 最终使用FFMPEG合成多段视频。

后期剧本

  1. 用户选择特效写入到后期剧本文件。

发布

  1. 使用FFmpeg进行音视频合成。
  2. 解析后期剧本,离屏渲染,生成带特效的视频文件。
  3. 将前期、后期剧本、视频文件、写入到ZIP。

跟拍

保持戏精大本营的实现。

前期调研

  1. SoundTouch 实现音频的变速
  2. iJKPlayer 实现视频变速播放预览
  3. 商汤新版的背景分隔,实现幻景
  4. FFmpeg 实现用户选择音视频时候的剪裁,拼接,合成。

技术实现

http://wiki.jcndev.com/wiki/images/8/89/ScriptSequence.jpg

遇到的问题

结果视频音视频不同步

音频和视频的录制时两条线程分别进行的,由于两条线程启动的时机和结束的时间有误差,以及音视频编码和写入的方式不同,会导致音频和视频画面不同步。

音视频开头对齐

  1. 视频渲染和编码逻辑慢于音频逻辑,因此在视频逻辑准备好之后,在启动音频播放写入。
  2. 此时记录时间
  3. 视频编码向前偏移(当前时间-记录时间)。

image

音频和视频停止对齐

  1. 调整视频录制时间
    调整前:

image

调整后:

image

  1. 据音频结束时间进行剪裁。

跟拍时进度条和剧本时间点对不上

  1. 原因使用剧本暂停点
    image

  2. 统一使用音频线作为基准线

耗电优化

应用中存在多个GL渲染的页面录制页,播放页,特效编辑页。在不同的页面开启多个GL线程导致
耗电增加,手机发烫。为了解决这个问题引发了一系列问题,包括Android系统自身的BUG。

  • 页面不可见的时候暂停GL线程,页面可见的时候开始GL线程。

开始GL线程时需要重建整个GL环境,包括所有的贴纸层。导致页面切换的时候黑屏。

  • 解决黑屏setPreserveEGLContextOnPause

这个方法表示在GL线程暂停时是否保留EGL上下文。在Android 3.0以前取决于支持保留的最大数量。

  • 卡死

在频繁暂停和开启GL线程的时候,会偶现整个界面卡死的情况。
这是Android 官方承认的一个BUG。
由于GL线程没有结束,又再次开启导致的。
解决方法:暂停时UI线程等待,同时向GL线程事件队列末尾发送一个事件,
事件执行完之后再放开UI线程,从尔避免这种情况。

不足:前期准备不充分

  • 跟拍和自由拍的控制逻辑耦合,改动总的多功能点去验证。
  • 剧本逻辑和视频逻辑接口衔接复杂,更好的应该只提供一个接口,供控制逻辑调用(一会儿控制播放, 一会控制录制)。

项目管理

按照大项目进行实施追踪进度,有完善的项目计划。

一些经验

  • 一定将功能需求细化,团队达到共识,评估工时。
保证需求理解的一致性,公式的准确性,从而保证项目计划的准确。
  • 注意关键路径和模块依赖梳理,尤其是有技术难度的模块。做好风险把控。
关键路径体现最终项目计划成败,模块依赖少可以降低风险,分工调整也更方便。
  • 设置里程碑,遇到关键节延时点即时调整路径。
取得阶段性成果,第一检验总计划风险即时调整,
第二对上有交代,对团队士气起到正面鼓舞作用。
  • 控制好冗余时间
应对各种突发情况的稻草
  • 有问题一定要提前说
提前暴漏提前解决
  • 需求变更根据项目风险要求调整时间
新APP在实施的过程中难免会有更好方案,站到项目计划的角度坚决杜绝,站到公司角度能带来更好的效益也是可接受的,但是要根据项目计划要调整时间。

遇到的问题

  • 产品需求准备不充分导致需求变更
在产品和技术上需求最优解
  • 产品的需求无法满足
自我思考意识,产品的思路不一定对,寻找合理的用户功能和体验,在产品上进行约束,在技术上进行降级。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

返回主页看更多
狠狠的抽打博主 支付宝 扫一扫