NOS富媒体处理介绍
NOS全称是:NetEase Object Storage,是一个Key-Value存储系统。NOS从2012年下半年开始给各个产品提供服务,到现在已经经历了将近4年的时间,经过4年的努力,NOS在网易已经成为了一个不可或缺的模块。到目前为止NOS取得的成就如下:
产品数量:100+
桶的数量:700+
对象数量:9400000000+
物理存储:6800T
常规日增:20T
QPS峰值:16000+
NOS目前主要服务包括:核心存储,上传加速,富媒体处理三大块内容。本文将对用户询问最多、最感兴趣的富媒体处理这个模块从非技术的角度进行详细的介绍。
富媒体处理是NOS推出的对图片、视频、音频进行实时处理的一个模块,支持用户对自己的富媒体文件进行定制化处理。该模块一经推出便受到了广大用户的热烈欢迎(此处应有掌声!!!)。到目前为止有大量的用户在使用该项服务,比如:lofter、漫画、云音乐、云阅读等等。富媒体处理之所以这么受欢迎,是因为它具有以下特征:
接口简单易用
具体表现在屏蔽了富媒体处理的复杂逻辑,用户只需要通过url的一些参数设置就可以得到想要的富媒体文件。
处理高效
富媒体处理在内存、性能方面做了很多优化,处理速度达到了非常高的水平。并且采用了分布式架构,可以很容易进行水平扩充。
可靠性高
富媒体处理将处理复杂耗时的一些请求和简单的请求隔离开来,少量的这种耗时的处理对富媒体整体的处理影响很小。增加了富媒体处理的可靠性和防攻击性。
成本低
由于NOS的存在,不同的业务之间不需要各自再实现富媒体处理的逻辑,降低了公司的成本。
到现在为止富媒体处理的一些相关数据为:
平均处理时间:200ms
缓存命中比例:70+
QPS峰值:10000+
富媒体处理主要包括图片的常见处理,视频截图,音频转码等几个部分,接下来的章节会对每一部分做详细的介绍。
图片处理包括非常丰富的接口,具体的内容如下图:

3.1 图片元信息
EXIF是“可交换图像文件”的缩写,EXIF文件中会记录图片的拍摄参数、图片的宽高、作者等元数据信息。NOS提供了exif关键字供用户获取图片的元信息。比如:
GET http://nos.netease.com/img-sample/test/1.jpg?exif

NOS的接口是非常友好的,不光能够返回json格式的内容,还可以通过HTTP头指定xml格式的返回内容。
3.2 基本图片处理
3.2.1 图片操作
NOS提供的基本图片处理功能异常丰富,基本涵盖了绝大部分的用户需求,主要包括:
图片缩放
缩放功能是用户使用最多的一项功能。用户上传的图片各种尺寸的都有,如果没有图片缩放功能,在前端页面无法很好的展示,不同尺寸的图片会完全打乱前端的显示框架,因此前端迫切的希望收到的图片是固定大小的。而现在只需要告诉NOS希望的图片长宽即可实现这个神奇的功能。NOS不光可以按照长宽做缩放,还可以按照像素做图片缩放。
图片裁剪
顾名思义,裁剪就是按照用户给定的位置和大小对图片进行裁剪。
类型转换
类型转换在NOS使用的也是非常多的功能。目前支持常见的几种图片类型:gif,jpg,jpeg,jng,png,webp。
图片填充
此处的填充指的是背景填充。给定一个图片大小,当原图的实际尺寸小于这个大小时,会使用指定的颜色对图片进行填充。NOS最近开发了自适应图片填充这个新功能。
自适应图片填充: 当用户只给定图片长宽的其中一个值时,NOS会只按照一个长或宽的值进行填充,另一个值采用原图的大小进行自适应。
图片模糊
图片模糊采用的是高斯噪声来对图片进行模糊处理,通常用它来减少图像噪声以及降低细节层次,效果比较明显。
图片旋转
图片旋转是通过修改图片的rotate来对图片进行旋转的。
去除元信息
元信息是嵌入到图片中的注释信息,会增大图片的质量,在实际中为了减少图片质量,往往会将图片的原信息去掉。
图片interlace
interlace是指图片渐进式加载,在网络情况比较差的环境下,使用interlace参数后会根据收到图片的内容渐进式的显示图片。
3.2.2 图片类型——WEBP
NOS目前支持主流的几种图片类型,包括gif,jpg,jpeg,jng,png等。不管是 PC 还是移动端,图片一直是流量大头,以苹果公司 Retina 产品为代表的高 PPI 屏对图片的质量提出了更高的要求,如何保证在图片的精细度不降低的前提下缩小图片体积,成为了一个有价值且值得探索的事情。而如今对于 JPEG、PNG 和 GIF 这些图片格式的优化几乎已经达到了极致。
2010年10月份 Google 宣布了一种新的图片格式WebP,它可以将图片大小减少 40%,目的是替代当前的图片标准 JPEG,2011年11月Google宣布了 WebP 图片格式的一些改进,加入了透明格式支持,所以它同样也想取代掉 PNG 格式。经过测试webp的压缩效果非常好:

和jpeg相比,有损的webp压缩比例更高,图片清晰度也更高,优势是十分明显的。唯一的不足在于webp的浏览器兼容性还有待提高。
3.3 GIF处理
GIF的处理分为两大类,基本图片处理和GIF合成。
3.3.1 基本图片处理
GIF的基本图片处理和3.1介绍的大体相同,稍许的差别是GIF支持生成动图和静图。
GIF生成静图
http://nos.netease.com/126/1.gif?imageView&thumbnail=200×200

GIF生成动图
http://nos.netease.com/126/1.gif?imageView&thumbnail=200×200&tostatic=0

3.3.2 GIF合成
通过指定需要合成GIF的图片的列表,NOS会自动将这些图片合成GIF格式。合成GIF的时候NOS提供的服务很自由,用户可以自己指定GIF的一些相关参数,从而是GIF更符合自己的需求。具体的参数参数有:
| 参数 | 节点描述 |
|---|---|
| 宽度 | 用户可以不关心需要合成GIF图片的大小,只需要给出合成后GIF图片的大小即可 |
| 高度 | 同上 |
| 播放速度 | 用户可以自己指定帧与帧之间的播放时间间隔 |
| 循环间隔 | GIF在循环播放的时候,用户可以控制循环的时间间隔 |
3.4 水印
NOS水印支持图片水印和文字水印两种形式。
3.4.1 图片水印
图片水印是将图片作为水印嵌入到一个新的图片中。图片水印支持多种图片格式:jpg,jng,png,webp,bmp,jpeg。NOS将图片按照九宫格的形式划分为九个区间,先选择区间再在每个区间按照像素的位移选择最终的位置放置logo。

图片水印具有以下特色功能:
支持调节水印透明度,从不透明到完全透明的变化
元数据的去除:元数据往往会占用图片不小的空间,去除元数据后的水印会明显降低图片大小。
3.4.2 文字水印
针对文字水印用户可以自己指定文字的内容、字体大小、字体颜色等参数,至于水印的位置和图片水印设置一样。比如下面这张水印图片:

NOS支持非常丰富的字体类型,常用的有:
| 参数 | 文件 | 字体 |
|---|---|---|
| simfang | simfang.ttf | 仿宋 |
| simhei | simhei.ttf | 黑体 |
| simkai | simkai.ttf | 楷体 |
| simsun | simsun.ttc | 宋体 |
| msyh | msyh.ttf | 微软雅黑 |
| msyhbd | msyhbd.ttf | 微软雅黑(粗体) |
还有其它不太常用的字体,在此就不一一赘述。
NOS对视频的处理相对简单,目前只支持视频信息获取、视频截图两项功能。音频也只支持转码功能
4.1 视频信息获取
和图片基本信息获取有些类似,提供通过关键字获取视频基本信息的功能。主要的视频信息如下:
帧速
视频宽高
视频大小
编码类型
视频比特率
音频比特率
4.2 视频截图
NOS提供了针对视频的截图功能,具体截哪一个帧是通过时间来控制的,用户可以指定时间点(目前只精确到秒)来截取该时间点对应的帧。根据调研,其实大多数用户只关心视频的第一帧,最多的需求也是获取第一帧。所以精确到秒基本满足了用户的需求。
出于方面用户的考虑,NOS还提供了截图的后续处理,在截图完成后可以直接进行部分图片操作。目前支持的图片操作有:
图片裁剪
图片缩放
类型转换
4.3 音频转码
音频转码目前只提供对常见音频进行转码的处理。支持的音频格式有:amr、aac、MP3。在转码的过程中用户可以对音频以下三个参数进行设置:
音量
采样率
比特率
视频音频NOS的服务并不丰富,如果大家有这方面更多的需求,可以联系视频云团队寻求支持。
富媒体处理经过几年的开发维护,目前已经十分的稳定,而且成长到现在这个水平是值得NOS团队每个人为之骄傲的。但我们不会停止不前,富媒体处理仍然有许多内容待开发,比如:域外图片拉取,图片压缩优化等等。NOS团队会继续努力为用户提供更加优质的服务。
推荐阅读





