短视频矩阵系统源码部署开发分享

一、项目工程目录及主要项目说明

这个是我们项目大部分目录,一个短视频矩阵系统主要包括有几个大的模块:文件系统(存储上传)、混剪算法系统、支付模块、消息处理模块、商家管理模块、文件导出(处于带宽考虑,导出单独处理)、后台运营管理;

本系统采用了SaaS架构,前后端分离、前端主要用Vue2.0,后端使用的开发语言是Java8,springBoot框架;Docker做容器管理;

二、重点系统功能模块介绍

2.1 短视频混剪

短视频混剪这是整个系统的灵魂,对于同一组素材,在不同系统处理,能生成高质量视频数量多少决定了整个系统的质量;比如如下3组素材,每组5个短视频,应该是多少条?

很多系统处理的很简单,5*5*5=125条?如果是这样就有点扯了,完全没考虑视频的重复率,对于高重复率的视频发布到各平台,没有流量发出去有啥用?反而会不断降低账号质量,影响账号权重;好的去重视频,要根据视频画面、每个视频片段时长、视频片段所在位置综合计算来组合一个新的视频;经过高度精确计算得到一个新的视频,再结合视频文案、视频标题、视频配音、视频转场等渲染手段提高整个视频质量;详细可看另一篇文章《短视频矩阵系统混剪逻辑设计开发

如下图代码展示(少部分),视频算法需要经过一轮又一轮的计算再计算,最后得到一个不重复各视频片段组合:

2.2 各平台对接

平台对接也是比较繁琐的,需要熟悉各平台接口规则,比如平台的账号Token更新、平台的消息同步机制、平台报表数据同步、平台短视频管理等;Dy这种成熟的平台还好,不成熟的平台还需要时刻关注他们的接口调整变化和升级,有新的能力发布了,及时更新到系统;我们使用了工厂模式设计思路处理各平台对接,对于平台我们把系统需要的核心点都提炼出来,主要是有短视频发布、数据同步、消息同步、用户授权、私信评论同步等这几个主要模块;

如下是获取Dy授权信息:

 @Override
    public void getUserTokenWithOutRedirect(String code, String state) {
        Claims claims = JwtUtil.parse(state);
        Long userId = claims.get("userId", Long.class);
        String openId = claims.get("openId", String.class);
        Integer userType = claims.get("userType", Integer.class);
        Date validityDate = claims.get("validityDate", Date.class);
        String poiId = claims.get("poiId", String.class);
        String poiName = claims.get("poiName", String.class);
        List<Long> groupIds = claims.get("groupIds", List.class);
        Integer provinceCode = claims.get("provinceCode", Integer.class);
        String provinceName = claims.get("provinceName", String.class);
        Integer cityCode = claims.get("cityCode", Integer.class);
        String cityName = claims.get("cityName", String.class);
        Integer countyCode = claims.get("countyCode", Integer.class);
        String countyName = claims.get("countyName", String.class);
        String address = claims.get("address", String.class);
        String location = claims.get("location", String.class);
        log.info("抖音回调state:{},userId:{},openId:{}", state, userId, openId);

        if (validityDate != null && new Date().after(validityDate)) {
            throw exception(INVITE_EXPIRED);
        }
        //1.获取用户token
        AccessTokenRespDTO tokenRespDTO = douYinApiUtils.getAccessToken(code);
        if (tokenRespDTO == null || tokenRespDTO.getError_code() != 0) {
            log.info("【抖音】获取用户token失败,tokenRespDTO:{}", tokenRespDTO);
            throw exception(DOUYIN_TOKEN_ERROR);
        }
        //2.获取用户信息
        UserInfoRespDTO infoRespDTO = douYinApiUtils.getUserInfo(tokenRespDTO.getAccess_token(), tokenRespDTO.getOpen_id());
        if (infoRespDTO == null || infoRespDTO.getError_code() != 0) {
            log.info("【抖音】获取用户信息失败,infoRespDTO:{}", infoRespDTO);
            throw exception(DOUYIN_USER_ERROR);
        }
2.3 文件处理

文件处理是个有点技术含量的事情,处理不好,整个系统都会受影响;分享下设计思路,因为文件上传和下载很会很占用带宽,另外也需要考虑多用户操作的文件,不能用个10M的带宽,这样我们才能支持多少个用户上传和下载?我们是把文件系统抽离了出来,在带宽上使用云的自动伸缩的能力,也不需要固定带宽;这样既能满足用户使用,在费用上也是比较省的;

三、安装部署

我们使用的Docker容器做安装部署,所有比较省事,加上我们自己的Develop平台,一键发布,很省事,不过在这里提醒下,容器部署也不是十全十美,有性能的环节部分还是需要考虑拎出来单独处理,比如数据库,虽然容器自带,但生产环境最好是不要直接用,测试和开发环境没问题;

还有其它的一些技术点,在开发过程中还是有些难度,后面再补充上,有想法的私信联系!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值