You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

交互式视频用户分数数据库存储方案求问

实现交互式视频分数存储的可行方案

一、自定义全栈方案(适配精细分数控制)

既然现成工具在分数管控上有局限,自定义开发是最能贴合需求的路径:

  • 前端交互与分数计算
    用HTML5 Video API+原生JS实现视频节点控制、交互触发(比如选择题、拖拽操作),每完成一个交互环节就计算对应分数,把分数、用户标识、交互详情打包成JSON。
    示例代码片段:
    // 处理选择题提交,正确得10分
    function handleQuizSubmit(isCorrect) {
      const scoreData = {
        userId: 'user_123',
        videoId: 'interactive_001',
        eventType: 'quiz_pass',
        score: isCorrect ? 10 : 0,
        time: new Date().toISOString()
      };
      // 发往后端存储
      fetch('/api/save-score', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(scoreData)
      });
    }
    
  • 后端存储逻辑
    用Node.js/Java/Python搭建简单接口,接收前端数据写入数据库。关系型选MySQL(适合结构化分数),非关系型选MongoDB(适合复杂交互事件)。
    示例MySQL表结构:
    CREATE TABLE video_scores (
      id INT AUTO_INCREMENT PRIMARY KEY,
      user_id VARCHAR(50) NOT NULL,
      video_id VARCHAR(50) NOT NULL,
      event_type VARCHAR(50),
      single_score INT,
      total_score INT,
      created_at DATETIME DEFAULT CURRENT_TIMESTAMP
    );
    
    Node.js/Express接口示例:
    app.post('/api/save-score', async (req, res) => {
      const { userId, videoId, eventType, singleScore, time } = req.body;
      // 查询当前累计总分
      const currentTotal = await db.query('SELECT total_score FROM video_scores WHERE user_id = ? AND video_id = ?', [userId, videoId]);
      const newTotal = (currentTotal[0]?.total_score || 0) + singleScore;
      // 插入或更新记录
      await db.query('INSERT INTO video_scores (user_id, video_id, event_type, single_score, total_score) VALUES (?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE total_score = ?, single_score = single_score + ?', [userId, videoId, eventType, singleScore, newTotal, newTotal, singleScore]);
      res.status(200).json({ success: true });
    });
    

二、现有工具的扩展方案(减少开发量)

如果不想从零开发,可以基于你调研过的工具做二次扩展:

  • H5P扩展:H5P支持自定义插件,基于现有交互式视频模板,在JS钩子(比如h5pInstance.trigger('xAPI', event))里捕获交互事件,提取分数后调用自定义后端接口存储。
  • PopcornJS扩展:给PopcornJS加自定义分数跟踪模块,在每个交互节点触发时计算分数,通过AJAX发送到数据库。

三、数据库设计关键要点

  • 区分单次分与累计分:要记录每一步交互细节就存单次分数,只需要最终结果就单独维护累计字段,避免重复计算。
  • 关联用户与视频:必须存用户ID和视频ID,方便后续查询用户在特定视频的得分情况。
  • 记录时间戳:追踪交互时序,方便排查问题或分析用户行为。

四、额外实用建议

  • 前端本地缓存:网络不稳定时把分数存在localStorage,恢复后批量发送,避免数据丢失。
  • 后端数据校验:校验分数上限、用户标识合法性,防止恶意篡改数据。

内容的提问来源于stack exchange,提问作者Ali Amouz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 15:47:10