2020年终总结

计划中的事

又到了一年一度的总结时刻,按照惯例,还是先做年初立的Flag写一个总结。今年整体计划完成情况在75%,有很多计划没有完成。其中【出国旅游】因为疫情被迫终止,【账单小程序】则是因为没有用户便主动停止更新了。其余未完成的事则是因为懒惰没有完成,来年务必补上。

下面从兴趣爱好、专业技能、个人成长以及娱乐活动四个方面详细聊聊。

兴趣爱好

Read More

CoordinatorLayout.Behavior使用指南

1. Behavior 介绍

Behavior是CoordinatorLayout的子类,用于处理各个子view之间的行为(
这就意味着需要联动的View得用CoordinatorLayout包起来 ),例如:手指向下滑动的时候是View A下移,还是View
B下移,亦或者给View C来一个旋转?一个例子就是Bilibili客户端视频播放页的滑动效果,如图1所示:

图1.
Bilinili客户端的滑动效果

图1. Bilibili客户端视频页滑动效果

Read More

getString还是optString?

使用Java的JSONObject解析Json数据时经常会遇到需要解析字符串的情况,那是该使用getString还是optString或者其他呢?

Json

假设现在有这样一个Json字符串,现在要获取k的值,要怎么做呢?

{
Read More

使用阿里云函数计算部署Wordpress博客系统

阿里云函数计算部署Wordpress

0.起因

这篇文章是对周末折腾的一个记录,一切都源于阿里云客服说我的服务器马上到期了。之前购买的阿里云的ECS,三年下来需要两千多块钱,但是平时用的多的就一个博客系统和账单接口在跑,CPU使用率仅有4%。然后无意间看到阿里的语雀团队使用函数计算大大的减少了服务器的维护成本,也避免了CPU使用率一直很低的情况。受此启发决定将我的博客转移到阿里云函数计算上面,幸运的是官方也给了wordpress搭建教程(仅仅是能用)。
附上官方的函数计算与传统ECS价格对比:

ITEM 成本 稳定性
基于 VM 方案 使用 ecs.t5-lc1m1.small, 22.8元/月 服务器和数据库在同一台VM,
Read More

阿里外包半年记

阿里巴巴西溪园区2019年11月阴差阳错进入了阿里巴巴视频基础实验室做外包,至今已有半年,收获挺多。本文即是对个人收获的记录,主要分为技术与工作方式两个方面。

技术

如果说要总结自己这段时间技术方面具体的收获的话,那就主要有Android、C/C++和Python三个方面:对Android平台的视频编解码有了一定了解,可以快速的进行视频数据采集和编码;C/C++使用更加熟练,终于不再担心被指针气哭;Python使用也更加熟练了,能够使用Python快速的开发一些工具脚本及跨平台的GUI程序开发。

Android

由于我是在视频基础实验室做外包,所以工作内容都是和视频相关的。入职之后做的第一个项目就是一个视频算法可视化Android软件开发,应用需要调用摄像头获取实时数据,然后使用JNI技术对流进行处理,处理之后的结果需要及时的显示在屏幕上面。处理摄像头数据的时候需要注意视频的帧率,因为CPU处理算法的时间比较长,所以需要判断手机硬件支持的帧率,设置合适的值,甚至是使用人为丢弃部分帧减少计算量。除了帧率还需要考虑到视频的颜色空间,常见的有I420、NV12等,需要根据算法支持情况进行选择或则转换。摄像头读取到的是裸流数据,如果要保存到本地,可能还需要使用编码器进行编码,主要有MediacCodec和FFmpeg两种方案。MediaCodec是Android
4.1加入的API,其通过调用手机硬件实现快速的视频编解码,效率非常高,但是不同的手机设备支持的编解码算法不一样,需要根据具体机型判断做优化处理。FFmpeg是一个十分优秀的视频处理库,使用软件算法实现视频的编解码,所以支持的格式十分多,不过效率不及MeidaCodec,需要根据实际情况判断使用。另外视频的绘制也是一个比较复杂的地方,常见的方案有通过OpenGLES或者自己利用Canvas直接绘制。使用OpenGLES渲染效率很高,不过由于项目赶时间,之前对OpenGLES也不熟,所以没有用这个方案。我使用的是利用SurfaceView控件,获取其Canvas对象,然后将视频数据转成Bitmap的方式,这种方式优点就是实现简单,缺点就是占用内存大,性能差。

Read More

声网2020春季RTC编程挑战赛总结

项目简介

概述

2020年3月参加了声网RTC春季编程挑战赛,为此开发了一款Android视频聊天应用。该应用用于陌生人视频聊天,通过动态马赛克特效、话题匹配等功能减少视频聊天的紧张感和为用户提供聊天话题避免尴尬。

效果图

|
|

Read More

AIDL使用

Android的IPC(跨进程通信)方式有Binder、AIDL、Messenger、文件共享等,AIDL是最常用的方案。但是由于项目中用的不多,所以不熟悉,特意将AIDL的使用过程记录一下,供日后查看。

AIDL接口支持的格式

AIDL的语法与Java接口的语法是一致的,但是不支持定义接口常量 ,并且对于数据的类型是有要求的,仅支持以下几种格式:

  • Java的原语类型:intlongcharbolean等。
  • String
  • CharSequence
  • 实现Parcelable接口的数据类型
Read More

“万恶”的马赛克是怎么实现的呢?

最近参加[声网的RTC开发者大赛](https://segmentfault.com/page/rtc-
hackathon-2020)开发了一个陌生人[视频聊天应用](https://github.com/Luomingbear/RTC-
Hackathon/tree/master/SDKChallengeProject/likemosaic),为了降低聊天时的紧张感,对视频画面进行马赛克处理。此文便是对马赛克算法实现的总结。

原理

图片是由一个个像素点组成的,由于间距很小,便形成了图像的效果。将图片变成马赛克样式的本质就是修改像素点,使得一定范围内的像素用相同的颜色值表示。这里的“一定范围”我们暂且称之为马赛克块,马赛克块的大小也就决定了图片马赛克程度的不同。以3x3的像素点大小的马赛克块为例,原始像素点的值为1...9,修改之后全部为n,如下图所示。

Read More

H5直播方案总结

背景

最近因为工作原因对H5直播方案进行了调研,也算是有所收获,特将此记录下来,如有不对还请指正。此文写于2020年3月,开发与测试环境如下:

平台 版本
MacBook macOS 10.15.1
iPhone iOS13.3.1
Android 9.0
Read More

Python 快速创建服务器

有时候我们没有带数据线,但是又确实需要将电脑上的文件传输到其他设备上面,该怎么办呢?如果你的电脑上面安装了Python,那么一切就很简单了,只需要一个命令就可以将我们的电脑变成服务器。首先在终端里面cd到我们需要分享的文件夹下面,然后执行:

python  -m  SimpleHTTPServer   9999(自定义端口)

我们也可以用这种方式来进行网页浏览测试,比如新写了一个网页,需要看看在手机上面是啥效果,就可以用python轻松地创建一个服务器。

Search by:GoogleBingBaidu