- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用数据库中名为Viewings
的表来跟踪每个用户的视频观看次数。它既属于用户又属于视频,记录观看时长和视频完成的百分比。
当单击播放按钮时,我想根据 id 查找现有的观看,该 id 存储在 30 分钟持久 cookie 中(如果 cookie 不存在,则在首次单击播放按钮时创建该 cookie)已经存在)。然后,我想使用 timeupdate
事件监听器,在用户观看视频的每 10 秒定期更新此 Viewing
的 length
属性。
我有一个 JavaScript 函数,它以整数形式返回 lengthWatched
,它表示视频当前有多少秒。
我已经测试过以确保它适用于以下功能:
video.addEventListener 'timeupdate', ((e) ->
console.log(lengthWatched(e));
return
), false
所以现在我所要做的就是每当此函数返回可被 10 整除的整数时更新 length
。
我很确定我必须在这里使用 AJAX。但我不太确定继续下一步的最佳方法,或者即使有更好的方法来记录这些数据。
有什么建议吗?
编辑:
根据 agmcleod 的建议和我自己的一些建议,我最终添加了这些有效的 JS:
#global variables
videoId = location['pathname'].split('/').pop()
viewingCookieName = "Video "+videoId.toString()
#taken from http://www.quirksmode.org/js/cookies.html for easy reading of cookies
readCookie = (name) ->
nameEQ = name + '='
ca = document.cookie.split(';')
i = 0
while i < ca.length
c = ca[i]
while c.charAt(0) == ' '
c = c.substring(1, c.length)
if c.indexOf(nameEQ) == 0
return c.substring(nameEQ.length, c.length)
i++
null
video.addEventListener 'timeupdate', ((e) ->
duration = lengthWatched(e)
if (duration % 5 == 0)
currentLength = 0
$.get "/viewings/" + readCookie(viewingCookieName), (data) ->
currentLength = data['length']
return
$.ajax(
url: "/viewings/" + readCookie(viewingCookieName) + ".json"
type: 'PUT'
data: { viewing: {length: currentLength + 5}}
dataType: 'json').success ->
console.log('put')
return
), false
#only including relevant code, took out other video play functionality
video.onplay = (e) ->
unless readCookie(viewingCookieName)
$.ajax(
url: "/viewings.json"
type: 'POST'
data: { viewing: { video_id: videoId, user_id: gon.current_user_id } },
dataType: 'json').success (data) ->
viewingId = data['id']
time = new Date(Date.now() + 1800000).toUTCString()
document.cookie = viewingCookieName+"="+ data['id']+"; expires="+time
return
基本上使用了agmcleod提供的相同 Controller 。我仍在努力将 timeupdate
修复为每 1 秒一次,但我确信这会相当简单。还可以添加 max_duration_reached
。
最佳答案
Ajax 正是您所需要的。鉴于您使用的是 Rails,我认为您已经使用了 jquery。你可以这样做:
video.addEventListener 'timeupdate', ((e) ->
duration = lengthWatched(e);
console.log(duration);
if (duration % 10 === 0)
$.ajax({
url: "/viewings/" + viewingsId + ".json",
type: "PUT",
data: { viewing: { length: duration } },
dataType: "json"
}).done(() -> {
// callback
});
return
), false
抱歉,如果我的 CoffeeScript 关闭了,已经有一段时间了。无论如何,使用 PUT 将长度属性的 json 主体发布到 Controller 端点(因为我们正在更新记录)。请务必从您的 cookie 中填充viewingsId。
在路线方面,您可以在此处拥有标准资源:
resources :viewings
然后在 Controller 中:
class ViewingsController < ApplicationController
def update
viewing = Viewing.find(params[:id])
if viewing.update_attributes viewing_attributes
respond_to do |format|
format.html
format.json { render json: viewing }
end
else
respond_to do |format|
format.html { redirect_to viewing }
format.json { render errors: viewing.errors, status: 422 }
end
end
end
private
def viewing_attributes
params.require(:viewing).permit(:length)
end
end
强参数位是可选的,只是为了保持良好的实践。更新您可能需要的任何其他参数的许可。我编写了更新操作,因此它也可以处理 html 请求(表单更新)。希望对您有帮助。
关于javascript - 通过 JavaScript 跟踪 "video duration watched"分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31964697/
你能解释一下两者之间的区别吗 和 ? 最佳答案 通过使用 .您可以添加多个源元素。多个源元素可以链接到不同的视频文件。浏览器将使用第一个识别的格式。
我正在使用 ImagePickerController 处理 iPhone 视频捕获。我已经设置了图像选择器 Controller 的属性。我用它来将视频的最大长度设置为 60 秒。 imagePic
我正在制作一个进行基本视频处理的应用程序。我成功地合并到视频(视频上的视频)。 如何将左上角的小视频裁剪成一个圆圈? 最佳答案 如果您想导出该视频,您需要: 创建 CALayer,它将成为您的视频层的
我正在使用 SVT-AV1 和 FFMPEG 将视频编码为 AV1 视频和 opus 音频编解码器(.webm),它工作正常,除了视频搜索不起作用(非常糟糕)。当我寻找时,CPU 使用率会上升,并且需
在 Adobe Muse 中使用 VIDEO.JS 目前我已将海报图像配置为在视频开头显示, 当视频结束时,我希望海报图像重新出现。谢谢你的帮助! 最佳答案 将来最好的方法是通过 css。我只是a
我目前正在尝试从单张图片 (1980*1024) 生成视频 这是我的命令: ffmpeg -threads 8 -r 1 -loop 1 -i "C:\Library\Titling\__Resour
我想从 HTML 获取框架 javascript 中的组件,以便我可以处理它们然后输出到 Canvas 最佳答案 看看这个代码笔:Demo var videoId = 'video'; va
我已经使用 video.js 一段时间了,正在寻找响应式解决方案。我看到 4.6 声称是这样,但无法开始工作。我在文档中找不到任何关于使其响应的内容。我基本上只需要它保持在容器的 100% 并保持其纵
我正在寻找任何用于设置视频流服务器的现代资源。最好是开源解决方案。 我对此的搜索导致了很多死胡同。我也确实需要构建自己的服务而不是支付服务费用。 最佳答案 要设置您自己的视频流服务器,您应该从以下组件
如何在处理流媒体或网络视频时拦截“无法播放视频”对话框? 我尝试了以下操作并能够显示我的自定义错误消息。但最重要的是,我仍然收到 Android MediaPlayer 错误对话框“无法播放视频”。
它使我的视频居中并将控件放置在 div 底部但视频流出。在 css 样式表中,css 似乎无法识别。样式表中的 cos 颜色为黑色。我使用 Chrome 。 div.video_div{ width:
在 HTML5 video 元素中,您定义 type 属性的值始终以 video 开头。从元素是视频不是已经很明显,它是视频类型吗?为什么需要这样的视频:type="video/mp4",不应该只是t
我想通过 jQuery 或 Javascript 检测 html5 标签内的特定视频何时已完全加载(我的意思是,下载到浏览器的缓存中)。视频具有 preload = "auto"属性。 我尽我所能做到
HTML5 带来或将带来和 标签等等。自从我听说了他们,读了之后更是如此Why do we have an img element?特别是Jay C. Weber's message back fro
我正在制定一个 Web 应用程序的详细信息,该应用程序涉及顺序加载一长串(非常短的)视频剪辑,一个接一个,用户偶尔会输入建立新的视频剪辑加载方向. 我希望能够让浏览器一次预加载五个视频剪辑。然而,我们
我想知道 HTML5 标签现在支持.avi 格式视频文件的播放。 最佳答案 简短回答:否。改用 WebM 或 Ogg。 This article几乎涵盖了您需要了解的有关 的所有信息元素,包括哪些浏
尽管它似乎处于某种危险之中,但开放视频标准是一个好主意。我看到了一些关于运动跟踪的演示——只是概念验证,但仍然很有趣。现在,我要说的是,如果可以访问用户的网络摄像头,像这样的概念真的会是一个收获……想
我正在尝试使用 php-facebook-sdk 并借助 curl Facebook API 创建广告。 我已经使用 curl 上传了我的视频,它返回了一个 ID。现在,该视频 ID 将用于添加广告,
我正在使用 Video.js在我的网站上显示视频的插件。 我想删除画中画图标。我已经尝试了几个小时,但没有成功。 我做错了什么? 最佳答案 它应该是 data-setup='{"cont
使用 MediaRecorder 从 SurfaceView 录制视频 录音机 recorderProfile = CamcorderProfile.get( CamcorderProfile.QUA
我是一名优秀的程序员,十分优秀!