短视频分享应用与服务器实现

目前比较火热的一个话题是短视频,比如你可能听说过的 Vine, instagram video ,甚至企鹅帝国的微视,国内的玩拍等。

于此同时,之前的很多图片分享类应用/社区非常聪明地在自己的产品里瞬间加入“短视频分享”,打算阻止可能会到来的新一波冲击。

短视频应用?

Vine   web版 http://vine.co  - from twitter 

Instgram video    http://instagram.com/ 

微视  http://weishi.com   - from Tencent/QQ 

玩拍  http://wanpaiapp.com - from AVOS 

啪啪奇   http://papaq.iqiyi.com/ 

weico+ 微可拍   http://pai.weico.com/ 

UTCamera - uniqlo   http://ut.uniqlo.com    - 没错,这确实是优衣库出品的!!!

无论如何,我们还是来关注下这些短视频分享应用背后的服务器技术吧。

注:这里不是讨论java还是c++ 。

1. SNS 还是 IM ?   

其实早在短视频分享出现之前,我们在越来越多的移动应用中间,已经看到了一种非常清晰的模式:

新建一个分享类的UGC移动应用时,有2个基本元素需要考虑: 用户,内容; 

有3个基本关系需要考虑:用户与用户,用户与内容,内容与内容 。

如果我们强调用户,那么这个应用看起来更像是一个IM,有好友列表,有订阅关系,有发送消息,非常典型;

如果我们强调内容,那么这个应用看起来更像是一个SNS,不管是WEB SNS还是Mobile SNS,它都是UGC,然后靠那1%的活跃用户去热情地贡

献,20%的积极用户热情地参与,剩下的大部分用户热情或不热情地围观/点赞 !

如果我们打算选择一种服务器端技术来实现,到底是选择SNS架构还是选择IM架构,完全取决于你的定位和目标!

比如我们强调用户状态,强调实时互动,也许IM比较合适;

如果我们强调内容状态,强调内容推荐,也许SNS比较合适。

这两种风格也是各有优缺点的,比如IM在大用户量时候的技术挑战可能更大一些,而SNS在大用户量时可能更加容易做横向扩展和垂直切分

等;但SNS的消息互动能力较弱,尤其在实时性方面,除非你额外做一个facebook messager !   SNS天生就容易构建WEB端,甚至可以跟

app共用API,而IM则需要额外开发WEB端,基本不太可能复用面向app的API 。 SNS肯定是在HTTP协议上工作,而IM可能是在XMPP或其他TCP

上的私有协议甚至可能二进制协议等。 

2. 视频文件的处理 

主流的8秒视频文件,录制播放,编解码,上传下载,存储方案? 

如果我们放眼去看主流的移动app的服务端架构,大多数服务器端都是选择了云存储!这不只是现象,也是趋势,甚至是必然的。

在移动互联网产品秒生秒死的年代,第一时间抢占先机比其他一切都重要得多;所以大多数产品在初期希望99%的精力都在产品上,而非技

术上; 当拥有几百K的用户时,再增加技术投入也为时不晚;当然这完全没有轻视技术的意思;也有很多移动应用是选择技术创新作为突

破口的。  

所以,只要你构建一套用户及好友关系的系统,然后给他们关联上某种形式的内容,那么你就可以应付绝大多数场合了。

目前的云存储服务商,除了基本的存储功能外,CDN加速,断点续传,格式转换,指定位置截图预览,等等,非常完善,你唯一需要关心的

是选择一种码率,把你的8秒视频文件做到几百k大小即可。 也不要太在意网络流量,4G的速度逐步超过PC上的宽带了。 

3. 似曾相识? 

不管用户在分享什么内容,什么形式,什么类型,什么口味,什么大小,有一个共性是:你首先要识别用户,即需要提供快捷方面的注册

登录功能;  其次,用户是耐不住寂寞的,你需要做订阅关系,允许他们互相关注和拉黑; 最后,对于有些形式的内容,你需要做TAG然

后做关联分析,做聚类分析,做推荐算法,目的是做一个聪明的 app ,做一个懂用户的app !  

模式如此清晰,你是否打算做一套通用的框架出来了? 

也许有一天,有人想到一个好主意,希望在人们通过手机能发布某种形式的内容,然后跟某些人分享和讨论交流 --- 我该如何帮助他们快

速实现这一切? 7天时间足够么?!  

服务器端的技术,我们分两种:一种是高富帅公司,比如像QQ这样的,他们自愿充足,无需担心,另一种是中小企业或者创业公司甚至屌

丝开发者,他们需要考虑从基础设施到协议和开源组件等各个层次的资源! 我们这里主要讨论后者。

如何从0开始快速实现一个产品的IDEA ? 

1. 需求和功能模块定义好以后,你需要做一个技术选型!是选择开源实现,还是选择自己实现? 是选择开源技术栈还是选择微软?是选

择购买还是选择租赁?是选择传统技术设施,还是选择云服务供应商?  

2. 目前来看,选择云服务供应商是比较划算也比较靠谱的前瞻性做法。

3. 那么,现在问题变成:

- 开发一个业务服务器,处理客户端传过来的请求;

- 选择一个云服务供应商,用来部署应用,存储数据 等;

- 设计好你的API,面向app的API,面向WEB的API,甚至面向第三方的open API 

- 测试用例,CI系统和CM/PM工具

4. Just do it ! 

- 评审 test case 1

- 实现 test case 1的功能

- 集成测试通过

- 发布alpha版本 

- 下一个迭代/同时进行多个迭代 

 

数据模型 

     1:n      1:n 

user ->  item  -> comments  

     n:n

user <-> user 

     推荐

     打分推荐  

item   <->  item

#EOF

猜你喜欢

转载自nodex.iteye.com/blog/1999692
今日推荐