人生如戏,全凭演技!
茫茫视频中,为啥要看你的演技呢!!!

当然要靠一个吸引人的好封面啦!
选对了,是这样滴!

选错了


『牛津计划·Docker在线黑客松』中第一名的获奖作品『Your Special Images』,就是用来给Dubsmash,小咖秀这样的对口型的自拍视频选取一张最好看的截图,设置为封面。
效果就是下面这个样子:



简单说,就是干了下面这点事:

上传视频,嗯,必须上传而不是输入某酷或某奇艺地址
使用 FFMPEG 进行截图
对截图调用牛津计划API (仅用了表情API)
从返回表情结果中选取 非Neutral表情 值比较高的一张
将视频的哈希值和表情数据缓存
用户将获得视频中自己最具特色的图片配以icon(Special Images)&视频中的表情走势图

作品结构设计
参赛的作品只是用于演示,并不需要复杂的处理逻辑;因此没有使用数据库来存储,转而采用文件来存储,这样可以明显降低成本。
作品使用 ASP.NET 作为应用层的编程语言,并将此内容包装到Docker中,用 Windows Azure Storage 中的Blob来存储文件(ASP.NET 5 的 RC1 中已经支持使用 WindowsAzure.Storage 这个包了)。

注解

Docker一般是无状态的,载存储卷才能在其中保持需要持久化的数据。Azure Storage中的Blob是专门用来存储需要可靠存储的文件。

创建Docker
虽然很早就听说过 Docker ,但这次比赛才让我第一次在 Linux 的操作 Docker。Dockerfile如何写,可以参考我的另一篇博客『在Mac OS上创建并运行ASP.NET 5应用』(http://www.cnblogs.com/qin-nz/p/aspnet5-first-app-on-mac-os.html)。

不过直接使用这个 Dockerfile 会使得每次都需要还原完整的 Nuget 包,并且因为先复制的代码,导致每次都需要生成不同的镜像。
我先创建一个已经还原过Nuget包的镜像作为基础镜像 qinnz/aspnetpackage , 随后以此镜像为基础可以大幅缩减每次 Docker Build 的时间。
基础镜像 qinnz/aspnetpackage 的 Dockerfile 如下:
原理是先拷贝项目文件,随后进行 dnu restore ,再删除项目文件,这样在系统里就能下载所需的Nuget包。 把基础镜像发布到 Docker Hub 中,随后可采用下面的 Dockerfile 进行构建就会非常节省时间。
FROM qinnz/aspnetpackage
COPY . /app
WORKDIR /app
RUN ["dnu","restore"]
RUN ["dnu","build"]
EXPOSE 80
ENTRYPOINT ["dnx", "web"]
小贴士
由于伟大的GFW的存在,在本地进行Docker Build有可能会出现某些问题,建议直接使用灵雀云的海外节点进行Build。
灵雀云在这里帮我实现了持续集成,我只需把代码push到Bitbucket,灵雀云就可以自动构建并进行部署。 对于个人开发者而言,比使用 Visual Studio Team Services 可能会方便一点;但对于团队项目而言,如果想要实现一个完整的持续集成的过程,还需要其他平台辅助完成自动化测试等环节。
下面这张图,是我在比赛中创建的不同版本的镜像库:


作品展示地址:http://wintermoon-qinnz.myalauda.cn/
团队介绍
产品部分
白宇(微博 @宇甍残梦),西安外国语大学英语(旅游)专业大四的软妹子一只,因对互联网产品的无限热情义无反顾投身于此,抛头颅,洒热血……
技术部分
胡鼎原(微博 @_勤_),北京邮电大学研一的技术宅男一只,编程高于一切,并将此作为一生最崇高的理想(画外音:666)……
外援
侯振东,南京工业大学计算机专业大四程序猿一枚,带来了棒棒哒前端支持!
网友评论