初始化视频首次加载的时间
This commit is contained in:
@@ -6,9 +6,11 @@ import com.aliyun.vod20170321.Client;
|
||||
import com.aliyun.vod20170321.models.GetVideoPlayAuthRequest;
|
||||
import com.aliyun.vod20170321.models.GetVideoPlayAuthResponse;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
public class SpdbUtil {
|
||||
|
||||
public static String getPlayAuth(String vid) throws Exception {
|
||||
public static GetVideoPlayAuthResponse getPlayAuth(String vid) throws Exception {
|
||||
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
|
||||
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
|
||||
.setAccessKeyId("LTAI5tMKmWhPfnPsz2J3bfxL")
|
||||
@@ -22,14 +24,15 @@ public class SpdbUtil {
|
||||
try {
|
||||
// 复制代码运行请自行打印 API 的返回值
|
||||
GetVideoPlayAuthResponse videoPlayAuthWithOptions = client.getVideoPlayAuthWithOptions(getVideoPlayAuthRequest, runtimeOptions);
|
||||
return videoPlayAuthWithOptions.getBody().getPlayAuth();
|
||||
return videoPlayAuthWithOptions;
|
||||
// return videoPlayAuthWithOptions.getBody().getPlayAuth();
|
||||
} catch (TeaException error) {
|
||||
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
|
||||
// 错误 message
|
||||
System.out.println(error.getMessage());
|
||||
// 诊断地址
|
||||
System.out.println(error.getData().get("Recommend"));
|
||||
return "error";
|
||||
return null;
|
||||
|
||||
} catch (Exception _error) {
|
||||
TeaException error = new TeaException(_error.getMessage(), _error);
|
||||
@@ -38,7 +41,7 @@ public class SpdbUtil {
|
||||
System.out.println(error.getMessage());
|
||||
// 诊断地址
|
||||
System.out.println(error.getData().get("Recommend"));
|
||||
return "error";
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.peanut.modules.common.dao;
|
||||
|
||||
import com.github.yulichang.base.MPJBaseMapper;
|
||||
import com.peanut.modules.common.entity.UserCourseVideoPositionEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface UserCourseVideoPositionDao extends MPJBaseMapper<UserCourseVideoPositionEntity> {
|
||||
}
|
||||
@@ -30,4 +30,6 @@ public class CourseCatalogueChapterVideoEntity {
|
||||
|
||||
@TableField(exist = false)
|
||||
private String playAuth;
|
||||
@TableField(exist = false)
|
||||
private UserCourseVideoPositionEntity userCourseVideoPositionEntity;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.peanut.modules.common.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Data
|
||||
@TableName("user_course_video_position")
|
||||
public class UserCourseVideoPositionEntity {
|
||||
|
||||
@TableId
|
||||
private Integer id;
|
||||
|
||||
private Integer userId;
|
||||
|
||||
private Integer videoId;
|
||||
|
||||
private Integer position;
|
||||
|
||||
private Integer duration;
|
||||
|
||||
private Date createTime;
|
||||
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
}
|
||||
@@ -1,18 +1,13 @@
|
||||
package com.peanut.modules.master.service.impl;
|
||||
|
||||
import com.aliyun.vod20170321.models.GetVideoPlayAuthResponse;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.peanut.common.utils.ShiroUtils;
|
||||
import com.peanut.common.utils.SpdbUtil;
|
||||
import com.peanut.modules.common.dao.CourseCatalogueChapterDao;
|
||||
import com.peanut.modules.common.dao.CourseCatalogueChapterVideoDao;
|
||||
import com.peanut.modules.common.dao.CourseCatalogueDao;
|
||||
import com.peanut.modules.common.dao.UserToCourseDao;
|
||||
import com.peanut.modules.common.entity.CourseCatalogueChapterEntity;
|
||||
import com.peanut.modules.common.entity.CourseCatalogueChapterVideoEntity;
|
||||
import com.peanut.modules.common.entity.CourseCatalogueEntity;
|
||||
import com.peanut.modules.common.entity.UserToCourseEntity;
|
||||
import com.peanut.modules.common.dao.*;
|
||||
import com.peanut.modules.common.entity.*;
|
||||
import com.peanut.modules.common.to.ParamTo;
|
||||
import com.peanut.modules.master.service.CourseCatalogueChapterVideoService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -22,6 +17,7 @@ import org.springframework.stereotype.Service;
|
||||
import javax.xml.ws.soap.Addressing;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@Service("masterCourseCatalogueChapterVideoService")
|
||||
@@ -32,6 +28,9 @@ public class CourseCatalogueChapterVideoServiceImpl extends ServiceImpl<CourseCa
|
||||
private CourseCatalogueDao courseCatalogueDao;
|
||||
@Autowired
|
||||
private UserToCourseDao userToCourseDao;
|
||||
@Autowired
|
||||
private UserCourseVideoPositionDao userCourseVideoPositionDao;
|
||||
|
||||
@Override
|
||||
public Page getCourseCatalogueChapterVideoList(ParamTo param) {
|
||||
LambdaQueryWrapper<CourseCatalogueChapterVideoEntity> wrapper = new LambdaQueryWrapper<>();
|
||||
@@ -63,9 +62,44 @@ public class CourseCatalogueChapterVideoServiceImpl extends ServiceImpl<CourseCa
|
||||
}
|
||||
//加密视频组装playauth
|
||||
if(video.getType()==1){
|
||||
String playAuth = SpdbUtil.getPlayAuth(video.getVideo());
|
||||
GetVideoPlayAuthResponse p = SpdbUtil.getPlayAuth(video.getVideo());
|
||||
String playAuth = p.getBody().getPlayAuth();
|
||||
video.setPlayAuth(playAuth);
|
||||
//获取播放记录
|
||||
UserCourseVideoPositionEntity videoPosition = getVideoPosition(video, uId, p.getBody().getVideoMeta().getDuration().intValue());
|
||||
video.setUserCourseVideoPositionEntity(videoPosition);
|
||||
}else{
|
||||
UserCourseVideoPositionEntity videoPosition = getVideoPosition(video, uId, 0);
|
||||
video.setUserCourseVideoPositionEntity(videoPosition);
|
||||
}
|
||||
return video;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private UserCourseVideoPositionEntity getVideoPosition(CourseCatalogueChapterVideoEntity video,int userId,int duration){
|
||||
List<UserCourseVideoPositionEntity> userCourseVideoPositionEntities = userCourseVideoPositionDao.selectList(new LambdaQueryWrapper<UserCourseVideoPositionEntity>().eq(UserCourseVideoPositionEntity::getUserId, userId).eq(UserCourseVideoPositionEntity::getVideoId, video.getId()));
|
||||
if(video.getType()==0){
|
||||
if(userCourseVideoPositionEntities.size()>0){
|
||||
return userCourseVideoPositionEntities.get(0);
|
||||
}else{
|
||||
UserCourseVideoPositionEntity userCourseVideoPositionEntity = new UserCourseVideoPositionEntity();
|
||||
userCourseVideoPositionEntity.setUserId(userId);
|
||||
userCourseVideoPositionEntity.setVideoId(video.getId());
|
||||
userCourseVideoPositionDao.insert(userCourseVideoPositionEntity);
|
||||
return userCourseVideoPositionEntity;
|
||||
}
|
||||
}else{//加密视频
|
||||
if(userCourseVideoPositionEntities.size()>0){
|
||||
return userCourseVideoPositionEntities.get(0);
|
||||
}else{
|
||||
UserCourseVideoPositionEntity userCourseVideoPositionEntity = new UserCourseVideoPositionEntity();
|
||||
userCourseVideoPositionEntity.setUserId(userId);
|
||||
userCourseVideoPositionEntity.setVideoId(video.getId());
|
||||
userCourseVideoPositionEntity.setDuration(duration);
|
||||
userCourseVideoPositionDao.insert(userCourseVideoPositionEntity);
|
||||
return userCourseVideoPositionEntity;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,7 +107,8 @@ public class CourseController {
|
||||
|
||||
@RequestMapping("/getPlayAuth")
|
||||
public R getPlayAuth(@RequestBody Map<String,String> map) throws Exception {
|
||||
String playAuth = SpdbUtil.getPlayAuth(map.get("vid"));
|
||||
GetVideoPlayAuthResponse vid = SpdbUtil.getPlayAuth(map.get("vid"));
|
||||
String playAuth = vid.getBody().getPlayAuth();
|
||||
return R.ok().put("playAuth",playAuth);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user