CoordinatorLayout.Behavior使用指南
getString还是optString?
使用阿里云函数计算部署Wordpress博客系统
阿里外包半年记
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的方式,这种方式优点就是实现简单,缺点就是占用内存大,性能差。
声网2020春季RTC编程挑战赛总结
AIDL使用
“万恶”的马赛克是怎么实现的呢?
最近参加[声网的RTC开发者大赛](https://segmentfault.com/page/rtc-
hackathon-2020)开发了一个陌生人[视频聊天应用](https://github.com/Luomingbear/RTC-
Hackathon/tree/master/SDKChallengeProject/likemosaic),为了降低聊天时的紧张感,对视频画面进行马赛克处理。此文便是对马赛克算法实现的总结。
原理
图片是由一个个像素点组成的,由于间距很小,便形成了图像的效果。将图片变成马赛克样式的本质就是修改像素点,使得一定范围内的像素用相同的颜色值表示。这里的“一定范围”我们暂且称之为马赛克块,马赛克块的大小也就决定了图片马赛克程度的不同。以3x3的像素点大小的马赛克块为例,原始像素点的值为1...9
,修改之后全部为n
,如下图所示。
H5直播方案总结
Python 快速创建服务器
有时候我们没有带数据线,但是又确实需要将电脑上的文件传输到其他设备上面,该怎么办呢?如果你的电脑上面安装了Python,那么一切就很简单了,只需要一个命令就可以将我们的电脑变成服务器。首先在终端里面cd到我们需要分享的文件夹下面,然后执行:
python -m SimpleHTTPServer 9999(自定义端口)
我们也可以用这种方式来进行网页浏览测试,比如新写了一个网页,需要看看在手机上面是啥效果,就可以用python轻松地创建一个服务器。