9月10号的凌晨上演了一场IT界的春晚,相信很多果粉(恩,如果你指坚果,那我也没办法了,是在下输了)都熬夜看了吧,看完打算去医院割肾了吧。在发布会上发布了游戏机 Apple TV,更大的砧板 Ipad Pro ,鼠标右键 3D Touch,筷子 Apple Pencil,大妈金的肾6s和肾6sp,等等,当然还有LivePhotos。

先看看IOS的LivePhotos

“我要给你拍照了,别站着不动。”“你说啥?”“我在给你拍照,走两步!”

LivePhotos ——Twitter. not Jony Ive

这个是视频,优酷上的。

LivePhotos就是把你拍照前1.5s和拍照后的1.5s都记录下来了,而且!!而且是1200像素的图片啊!!不是视频不是gif啊!

所以内存变成2GB了?网上说照片的大小只是以前的2倍。网上还说肾6s和肾6sp才支持拍摄,之前的肾都不支持,只支持查看。

更多的我就不知道了,只有等到25号发布了再看看别人发的测评文章了。

再看看Android上山寨的LivePhotos

在第一张gif的计数显示到3到4的时候点击了拍照。程序中是记录了前后3s共计6s的时间。

github上的地址:https://github.com/yydcdut/LivePhotos-android

现在的设计思路(3s内的照片)

  1. 计算出大概的平均每帧间隔时间,new一个可以缓存1.5s内帧数据的队列;
  2. 获取Camera的帧数据(YUV格式),加入缓存队列,如果队列满了,弹出第一个,再把最新的加到最后;
  3. 如果点击拍照了,new一个可以缓存3s帧数据的队列,将之前的1.5s数据加到这个队列中,再缓存拍照后1.5s的数据(但是这样可能会OOM,有待改善);
  4. 将3s的数据写到数据库中,新开启一个服务进程将这3s数据读取出来解码成JPG图片写到SDCard中;
  5. 获取中间那张图片,做成一张高斯模糊的照片;
  6. 当展示Live Photo的时候,自定义一个类,初始化前5张照片(这个5张可自定义数量),当显示第一张的时候去解析第六张图片,当显示第二张的时候去解析第七张图片,一次类推;

踩过的巨坑

  1. 当时担心OOM就将每帧数据一获取到缓存下来然后马上写到数据库中,然后当点击拍照的时候记录时间,之后去数据库中获取数据做图,但是到后面数据库超级大,而且队里里面还缓存了很多;
  2. 为了结局数据库大的问题,改为当数据库中存的有3s时间内的帧数据的时候就写一条数据然后删一条数据,发现超级慢,缓存队列大到爆;
  3. 展示Live Photo的时候以为应该不会出现OOM,就用的帧动画AnimationDrawable,结果小内存的手机就OOM,大内存的没有。

还没做完,还要做的

  1. 当API小于14的时候就使用SurfaceView + Camera的onPreviewFrame()回调(现在还只做了这个,注意有坑)!
  2. 当API < 20 && API >= 14的时候使用TextureView + Camera来显示预览,获取每帧的bitmap。
  3. 当API >= 20的时候使用TextureView + Camera2来显示预览,这样可以将图片的分辨率变大。
  4. 试试前置摄像头的LivePhotos功能。
  5. 声音!!!

这篇文章还没完

好吧,东西还没做完,但是觉得在Android还是有一定的可行性的。

这篇博客会时常更新,这里就是华丽的分割线。

博客地址:http://www.cnblogs.com/yydcdut/p/4813406.html

Github地址:https://github.com/yydcdut/LivePhotos-android

华丽的分割线

--------- 9.22 更 -----------
完成了4.X上的获取帧数据,但是还没有结局获取帧数据卡顿的情况,第二是获取到的是bitmap,但是要转成byte[],这一部分速率问题等。
发现一个bug,在bugme的系统上,在2.x的activity上能正常开启Service,而在4.x的activity上却不行。。

我是天王盖地虎的分割线

在Android上山寨了一个Ios9的LivePhotos,放Github上了的更多相关文章

  1. git操作+一个本地项目推到github上+注意

    git init 创建新文件夹,打开,然后执行以创建新的 git 仓库. git config --global user.name "xxx" git config --glob ...

  2. Git学习笔记-上传一个新的项目到GitHub上

    前提: 已有Github账号,已在Github上建立了仓库,已在Github上配置了SSH,已上传过一些项目到Github上 目标: 目前有一个新的项目,需要上传到github上 我的做法记录: 1. ...

  3. [Git]使用Git上传本地项目,并同步到Github上

    第一步:先要在github.com中创建一个仓库(New Repository). 第二步,打开Git Bash ① git init [+仓库名]:初始化仓库,执行之后可以在指定的仓库存放地上面看到 ...

  4. 在windows上传一个新的项目到GitHub上

    不多说,直接上步骤 1,新建GitHub的账号密码. 2,新建一个项目  点击new repository 3,选择自己项目,填写格式 点击创建  create  repository,这时候一个雏形 ...

  5. android studio学习----添加项目依赖包补充---添加github上的开源项目为库

    导入maven中的库 如果开源库作者有将代码放到Maven库中,我们可以在gradle配置中直接引入,类似如下: compile 'com.github.dmytrodanylyk.android-p ...

  6. React Native ——实现一个简单的抓取github上的项目数据列表

    /** * Sample React Native App * https://github.com/facebook/react-native */ 'use strict'; var React ...

  7. 还怕问源码?Github上神级Android三方源码解析手册,已有7.6 KStar

    或许对于许多Android开发者来说,所谓的Android工程师的工作"不过就是用XML实现设计师的美术图,用JSON解析服务器的数据,再把数据显示到界面上"就好了,源码什么的,看 ...

  8. 微软为何选择在 Github 上开源 .NET 核心?

    本文来自微软开源.NET 的一篇公告 ,文中阐述了微软为何选择在 Github 开源.NET,以及微软对开源和开源社区方面的认识的变迁. 对于.NET来说,今天(2014/11/12)是个大日子! 我 ...

  9. Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目

    Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...

随机推荐

  1. hdu 5775 Bubble Sort 树状数组

    Bubble Sort 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 Description P is a permutation of t ...

  2. FireDAC 下的 Sqlite [2] - 第一个例子

    为了方便测试, 我把官方提供的 C:\Users\Public\Documents\Embarcadero\Studio\14.0\Samples\data\FDDemo.sdb 复制了一份到 C:\ ...

  3. 狗日的系统之家下载的Windows 10 1803/1809系统不干净,捆绑自动安装腾讯关键等软件

    特此记录一下,如果网友看到这篇文章请不要下载它们家的,捆绑软件,并且安装自动设置了账号,这还不是修改,是啥? 我们都知道现在iso文件基本都是网友自行制作的,从微软下载的文件自行制作成iso,也就是现 ...

  4. JTAG Communications model

    https://en.wikipedia.org/wiki/Joint_Test_Action_Group In JTAG, devices expose one or more test acces ...

  5. LINUX IO 图解

    http://blog.chinaunix.net/uid/29075379/cid-183430-list-1.html

  6. 在ASP.NET MVC下实现单个图片上传, 客户端服务端双重限制图片大小和格式, 服务端裁剪图片

    在"MVC文件图片ajax上传轻量级解决方案,使用客户端JSAjaxFileUploader插件01-单文件上传"一文中,使用JSAjaxFileUploader这款插件实现了单文 ...

  7. 集群服务器下使用SpringBoot @Scheduled注解定时任务

    原文:https://blog.csdn.net/huyang1990/article/details/78551578 SpringBoot提供了 Schedule模块完美支持定时任务的执行 在实际 ...

  8. /bin/sh^M: bad interpreter:没有那个文件或目录解决

    /bin/sh^M: bad interpreter:没有那个文件或目录解决   执行脚本时发现如下错误: /bin/sh^M: bad interpreter: 没有那个文件或目录   错误分析: ...

  9. Java Jackson - Json Polymorphism

    from://http://www.studytrails.com/java/json/java-jackson-Serialization-polymorphism.jsp Jackson prov ...

  10. 探讨一下Java单例设计模式

    所谓单例模式,简单来说,就是在整个应用中保证只有一个类的实例存在.就像是Java Web中的application,也就是提供了一个全局变量,用处相当广泛,比如保存全局数据,实现全局性的操作等. 1. ...