0.3 开发集成
Closed this issue · 9 comments
参考资料:
mockup
http://www.mindpin.com/mockups/img4ye/2014-4-9-v2-1/#p=structure
技术调研
旧版本遗留问题
数据迁移方案
图片改为新的云存储后,要保证已经有的旧数据还能正确读取
所以需要给 Image 增加一个字段 is_oss,并把所有现有数据的该字段设置为 true
根据此字段来判断是否是旧数据,从而正确读取旧的图片数据
部署需要的准备
宋亮需要准备一个部署用的七牛云存储账号
开发的话,可以自己申请,或者用李飞以前申请的(我申请的已经通过个人认证,所以可以使用一些高级功能和更大的免费配额,这个认证需要大概一天的时间)
img4ye 0.3 的开发仍然采用,UI设计开发和后台逻辑开发分离的方式
UI设计开发
由宋亮进行设计开发,代码会提提交到 https://github.com/mindpin/ui-design
后台逻辑开发
img4ye 目前使用的是 sinatra,在开发中发现很多繁琐的小问题,所以 img4ye 0.3 改为使用 rails ,所以开发时,需要把旧功能迁移到 rails 结构中在进行新功能的开发
大体上开发任务如下:
1 迁移目前的登陆逻辑到 rails 结构中(微博登陆)
分配给 肖少富
2 核心功能:图片上传到七牛云存储
分配给 李飞
包括:
1 图片的上传
2 图片的显示页
3 图片的删除
几个注意点:
1 旧的OSS数据需要可以读取
2 图片尺寸配置的格式和云存储的实现格式是解耦的,不用担心这个问题
3 上传图片的流程需要改为:浏览器直接上传图片数据到七牛,
而不是像以前那样先传到咱们自己的服务器,再由服务器直接上传到OSS。
这样可以提高效率,减少咱们自己服务器的带宽资源(七牛是支持这种上传流程的)
4 需要支持匿名上传,建议先完整用户上传,在去增加匿名上传,因为逻辑类似,逻辑上唯一的区别就是一个有用户关联,一个没有
5 需要有上传进度条
3 迁移目前的图片尺寸配置逻辑到 rails 结构中,可以对图片尺寸配置进行增加和删除
分配给 陈啸峰
注意点:
每个用户都有自己的图片尺寸配置,全局有一个匿名用户的图片配置,其实就是相当于 user_id 是 nil 的图片尺寸配置
图片尺寸配置不用考虑数据不用考虑旧数据迁移的问题,需要重新设置一个格式,为了和云存储的实现格式解耦,这个需要进一步讨论
4 个人使用情况汇总逻辑(已上传图片数统计,已使用空间统计,尺寸配置数统计)
分配给 陈啸峰
5 其他一些后续小功能需要的逻辑方法封装
分配给 陈啸峰
比如:
获取多个图片指定尺寸的 HTML代码
多个图片打包下载
6 上传的音频和视频的转码(转码的目的是为了继承前段播放插件后,可以在线播放这些视频和音频)
分配给 肖少富
注意点
1 音频需要转码各种码率来给不同的用户使用
2 视频不一定是mp4,标准来说应该是流媒体格式就可以(支持在线播放的格式)
先由李飞创建 0.3-dev 新分支,在新分支中创建一个 rails 空项目
在根目录创建 old_code 文件夹,把所有以前的代码移动到这个目录内
然后大家再去开始后续各个功能的调研和开发工作
导入一些预制数据用来开发调试
1 下载 http://4ye-dev.oss-cn-qingdao.aliyuncs.com/img4ye.tar.gz
2 解压出 img4ye 目录
3 运行命令,导入数据到数据库
mongorestore -h 127.0.0.1 -d img4ye ./img4ye
导入的数据包括
1 3000多条 image 数据
大部分都是匿名上传的,如果需要的话,设置 image 数据关联的 user 就可以指定为 某个用户上传的图片了
image = Image.first
image.user = User.first
image.save
2 六条匿名自定义图片尺寸设置
音频视频转码
关于音频视频的格式
音频视频转出来肯定是需要在线播放的
所以
上传的音频需要转码两个文件
1 mp3 格式 128K 码率
2 mp3 格式 64K 码率
上传的视频需要转码多个文件
我初步了解了在线视频的情况(FLV 格式 加 H.264编码应该是比较好的一个方案,只是初步了解,需要大概转码出一些文件在电脑和移动设备上在线播放看看是否有问题)
1 FLV(H.264编码) 320p
2 FLV(H.264编码) 480P
3 FLV(H.264编码) 720P
img4ye 需要实现这样的功能
1 除了支持图片,还支持上传音频或者视频
2 当文件是音频或者视频时,文件上传成功后,如果 img4ye 判断出文件是音视频时,就发送转码请求到七牛云存储
3 img4ye 通过保存这些转码后的文件的meta 信息或者约定一个默认的规则(确保可以组装出访问 转码后的文件的url)
4 因为转码是需要时间的,所以需要可以查看目前的转码情况(例如已经放入转码队列,正在转码,转码成功,转码失败等)
播放器问题
可以尝试用 http://www.ckplayer.com/ 试试是否可以在电脑浏览器和手机浏览器正常播放
编码测试
手动+脚本进行了
视频转码(MP4封装格式 + H264编码格式)
音频转码(MP3)
并用 ckplayer 播放视频和使用html5 audio 标签播放音频在多个终端使用纯HTML5播放模式进行大概测试
1 pc chrome
2 android chrome
3 ipad safari
有很多情况还没有测试到
1 pc swf 模式
2 pc 其他很多种浏览器
3 android 其他很多种浏览器
4 ipad 其他很多种浏览器
大概得出如下结论
mp4 + h264 是兼容最多种浏览器的方案,几乎通吃
img4ye 编写音视频转码逻辑(队列操作)
比想象中繁琐(参数繁多,体力活比较多),完成了记录音视频 meta 信息的逻辑,下一步继续转码逻辑
关于音频视频转码要求
视频格式方面,需要支持浏览器播放和手机播放。FLV(H.264) 是一个可取的方案;
视频清晰度方面,其实是由分辨率和码率两个因素构成的。
码率就是每秒的数据量
分辨率是视频画幅的大小
这里我建议可以参考优酷的转码标准:
http://www.youku.com/help/view/fid/8#q20
优酷把转码结果分为了 标清 高清 超清 三档(1080p 我们暂时不用)
能达到哪个档位由原始视频的分辨率,码率共同决定
如果七牛能够支持,默认就按照优酷的这个标准即可
(当然优酷的标准下,某些需求,如高清编程视频,不能满足,这个以后再修改)
音频方面,分三档
超品音质:320K
高品音质:128K
中品音质:96K
总体原则:如果原始文件的品质就比较低,达不到某个档位的要求,则就不转换那个档位(如果七牛能做到这种判断的话)
文件上传相关逻辑
上传方式已经完成
1 选择本地文件上传到七牛
2 拖拽文件到浏览器上传到七牛
3 CTRL+V粘贴剪切板图片上传到七牛
后台逻辑已经完成
1 接收匿名上传
2 接收新浪微博登陆用户上传
3 接收图片文件
4 接收其他类型文件
接收 网络URL上传的API
设计如下
url
/api/file_entities/input_from_remote_url_to_quene
method
post
params
url # 文件的网络地址
logic
把 params url 中的文件保存到 qiniu 云存储(该请求只是把任务放入队列)
response
{
token: xxx
}
url
/api/file_entities/get_from_remote_url_status
method
get
params
token # /api/images/input_from_remote_url_to_quene 返回的 token
logic
通过 token 查看上传任务是否成功,如何成功,返回 image 信息
response
{
status: 'processing',
}
{
status: 'fail',
}
{
status: 'success',
data: {
id: id,
is_image: true | false,
url: qiniu_file_url
}
}
部署前需要做的事情
1 服务器上的旧数据需要增加 image.is_oss = true 的迁移
部署注意事项
1 配置 config/application.yml
2 请在 mongodb 里把 images 表名修改成 file_entities
3 运行如下命令
RAILS_ENV=production rake from_0.2_to_0.3:migrate
已经集成并部署完毕。