我写了一个场所码小工具(上海实用)
随着新冠疫情的常态化,以上海为例,出示健康码、扫码场所码已经成了每天进出地铁、公司必备操作。对于上班工作,每天的场所码都是同一个地点,对应的场所码图片也不会发生变化,每次扫场所码的时候要不就是前面有很多人一起挤着,或者遇到下雨天不方便等情况。对于我自己而言,我会把场所码保存下来,方便下一次“扫场所码”,但由于存在图库,每次依然需要打开支付宝或者微信选择对应的图片进行扫描,所以就做了个工具,实现:一键打开健康码、自动保存场所码、一键打开存储的场所码。
随着新冠疫情的常态化,以上海为例,出示健康码、扫码场所码已经成了每天进出地铁、公司必备操作。对于上班工作,每天的场所码都是同一个地点,对应的场所码图片也不会发生变化,每次扫场所码的时候要不就是前面有很多人一起挤着,或者遇到下雨天不方便等情况。对于我自己而言,我会把场所码保存下来,方便下一次“扫场所码”,但由于存在图库,每次依然需要打开支付宝或者微信选择对应的图片进行扫描,所以就做了个工具,实现:一键打开健康码、自动保存场所码、一键打开存储的场所码。
此前很多工作都设计到使用 FFmpeg 对视频帧进行获取,在 FFmpeg 解码视频文件获取到帧数据结构是 AVFrame
, 对于应用层我们没有办法直接拿到进行数据处理,需要转换为 Android 平台特有的处理结构。而我是需要对应的帧图片数据,那么在 Android 侧需要将其转化为 Bitmap
,之前整理的过程中发现了这篇《Android音视频开发】从AVFrame到MediaFrame数组(二)》博客文章 ,觉得写得很不错,非常精简,适合我的需求,于是对齐进行整理,并标注一下自己在过程中遇到的一些坑点。
此前我们项目组开发了相关 SDK 并集成到 App 工程中进行测试,发现业务App中的 wire (一个与 protobuf 相关的库),版本为1.5.1,而 SDK 中所依赖的版本为3.7.0,两者之间相互不兼容。如果要让业务升级到高版本的库的话,初步排查低版本中使用的某个类而高版本中已废除,单纯的就这一个类涉及100多个文件,工程量太大了,SDK中亦然。所以不能通过简单地更改版本号来解决版本冲突问题,最后经过一系列的尝试,终于解决了该问题。
要对移动端的抽帧,对于 iOS 来说,有 AVFoundation 这样一个神奇的库,开箱即用,已经支持了抽帧并且效率非常的高。而 Android 就不那么乐观了,Android 自带的 MediaMetadataRetriever
也能实现抽帧并将帧数据转化为 Bitmap,但效率非常低,平均抽取一帧需要 200ms-300ms,这当然满足不了我们的需求。无独有偶,Android 还提供了另一个类 MediaCodec
-用于对音视频进行编解码的类,它通过访问底层的 codec 来实现编解码的功能,我们能对解码的数据进行定制化处理,本文也主要讲解利用 MediaCodec 进行抽帧。
最近在Android开发过程中会遇到很多传文件的操作,市面上也有比较多的“文件管理器”,例如锤子的HandShaker,或者谷歌官方的filetransfer,但他们都需要打开“传输文件”这个行为,个人感觉比较繁琐。作为Android开发,使用adb命令行去传输文件是不错的,但每次输入adb push xxx
还是挺麻烦,而且必须打开 Terminal 才能运行。为了让所有操作更简化,我做了一个简单的桌面工具,只需要连上手机,正常打开adb,拖到文件到对应区域,则可以实现文件传输。