浏览 2436 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-22
最后修改:2010-08-22
需求场景:
当用户浏览一个网页,看到自己喜欢的视频信息时,就点击改视频信息链接,在线观看视频.如果该用户本机没有安装完整版的暴风影音,网页通过JS脚本判定后,自动为用户提供一个下载连接安装暴风MINI版,用户点击安装后,再次点击刚才网页中的视频信息,暴风影音MINI版播放该视频信息.暴风影音MINI版的调起入口来源主要是网页上的视频连接,很多用户没有安装暴风影音MINI版,为了更好的提高用户感受,降低用户的操作环节,产品人员不希望用户安装完成后,还需要再次点击刚才点击的视频,这种衰减可能会直接导致暴风影音MINI版的报活和VV打折扣. 实现思路: 1)用户点击视频链接后,在某个地方记录点击的视频信息. 记录视频信息有多种方式,但此时还没有客户端存在,所以只能考虑存放在指定的服务器上,或者存放在浏览器的Cookie,flash的共享对象,或者是下载安装包的URL中(由安装脚本负责解析并保存在本地某个文件中). 2)客户端安装完成后,首次启动时去预订地点读取视频信息并播放. 客户端安装完成后,可以通过cookie中标识,读取远程服务器的信息,也可以读取用户系统中的目录(包括IE存放cookie的目录). 方案对比: 其实每个方案都能实现这个需求,只不过每个方案都会有缺点,如何扬长避短才是最重要的.目前没有任何一个方案是完美的. 方案1: 通过记录Cookie的方式将用户点击触发的视频信息保存到本地,客户端安装后通过查找本地cookie调起播放。 缺点: 目前客户端读取WIN7,vista系统的IE cookie有困难,不容易实现。 由于各家合作网站的不同,客户端需要知道那些网站的域名,才能查找cookie,适用于点击后页面跳转到暴风主站的方式。(适用面不是很广) 方案2: 通过修改文件名称的方式,将播放视频的ID写入待安装的MINI暴风名称中,例如:http://*****/storm_13000004455.exe的方式。 缺点: 由于点击后知晓用户点击的那个视频,所以需要动态脚本解析这个ID,并将动态生成下载EXE的软连接,所以就要求下载服务由一台动态服务器提供,就不能使用现在的下载服务集群。 如果采用天津双线的机房作下载,带宽费用较高,南北部署服务器需要新申请服务。 由于原有逻辑中需要将暴风安装包通过软连接的方式进行报数的统计,目前的格式为storm_13.exe,所以格式上会有些冲突,需要调节整个数据统计的服务代码(有些研发成本)。 方案3: 通过flash共享对象的方式,通过flash的方式将播放视频的信息写入共享对象,mini暴风安装后调起通过读取共享对象已存在视频信息并播放视频,读取后直接删除该共享对象中的视频信息。由于使用非客户端开发,代码扩展性比较容易。 缺点: 合作模式不单一,需要合作网站同意载入flash,提高了对外合作的难度。 每次启动暴风后,都会调起flash尝试读取共享对象(目前的后播推荐也是使用flash,如果有播放前启动flash的时机,如:"广告,推荐",就可以使用这个方案了) 方案4: 通过session的方式,用户点击后,访问制定域名的一个URL,并提交点击的影视信息ID,服务器动态生成一个sessionID,并保存这个sessionID对应的影视信息ID,客户端安装完毕后首次启动时访问指定的服务,由于域名相同,请求是会附带刚才请求的sessionID,服务段判定后将刚才保存的影视信息ID返回给客户端,客户端播放。 缺点: 使用sessionID进行识别和保存有时间控制,一般是设定在15分钟左右,对于长时间点击后,不安装会有超期和实效的现象。 由于sessionID需要每次动态生成,并保存影视信息,不能承载太大的并发访问请求。 最终方案的选择,我的个人建议是第四种,相对成本低,扩展性高,客户端不用特别大的改动.不过,每个方案都是建议,因为最终的选择权是带这个项目的技术leader,由他们去决定好了. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-09-07
错别字要改改.
方案4当然是最优选择,改进一下,用cookie保存就行了.可以避免你提到的两个缺点. 写一段js,用iframe跨域把url记录到cookie中. |
|
返回顶楼 | |
发表时间:2010-09-11
多谢,最终的实现方案是用cookie保存的,
不过还有一个难点:就是客户端在不通过IE发送请求时,读取不了WIN7系统下的cookie数据,很是头疼。非win7系统都能实现。 |
|
返回顶楼 | |
发表时间:2010-09-11
用调用IE内核的控件嵌入在客户端也不行吗?
其他我不知道,以前接触过一点delphi的EmbeddedWB控件,似乎可以,当然我没试过WIN7. |
|
返回顶楼 | |