当前位置: 首页 > news >正文

Java处理视频思路

1.首先实现断点续传功能。

断点续传实现思路:

  1. 前端对文件分块。
  2. 前端使用多线程一块一块上传,上传前给服务端发一个消息校验该分块是否上传,如果已上传则不再上传。如果从该断点处断网了,下次上传时,前面的分块已经存在了,就不会重复上传,会在断点处重新上传。从而实现断点续传。
  3. 等所有分块上传完毕,服务端合并所有分块,校验文件的完整性。
    因为分块全部上传到了服务器,服务器将所有分块按顺序进行合并,就是写每个分块文件内容按顺序依次写入一个文件中。使用字节流去读写文件。
  4. 前端给服务传了一个md5值 (前端根据用户上传文件计算出来的md5值) ,服务端合并文件后计算合并后文件的md5是否和前端传的一样,如果一样则说文件完整,服务端可以删除分块的文件,只保留合并成功的文件。如果不一样说明可能由于网络丢包导致文件不完整,这时上传失败需要重新上传。

2.当视频成功上传到分布式文件系统中 (如Minio、oss),将视频信息保存到数据库的任务表中,表中每一条数据都是一个视频转码任务的处理情况 (包括视频转码状态,完成/未完成)

3.任务调度中心 (如XXL-JOB),按照任务调度策 (注:这里为了最大化的让多个执行器并行执行任务,采用分片广播的路由策略) 开始调度任务,每个执行器会收到两个值,一个代表一共有多少个执行器,一个代表自己是几号执行器。

4.每个执行器收到了两个参数以后,就知道了一共多少个执行器,及自己是几号执行器。就可以去数据库的任务表中,根据任务id%执行器数量 = 取余结果,找到取余结果等于自己序号的任务。这样可以实现所有任务均分给每个执行器!

        这里假设有三个执行器,我要查询执行器1应该执行的任务,未处理和处理失败次数小于3次的任务都可以被作为本次执行器1应该处理的任务,一次最多处理10个任务

5.执行器执行的任务确保都是未进行转码的视频 (通过判断status字段是否为1,比如说1表示待处理),确保幂等性 (某个视频任务被重复调度后,不会导致某个视频被重复转码),如果该视频任务是未处理的,执行器就处理该任务。

6.视频转码的逻辑大概就是,由于数据库中任务表里已经存储了该视频在Minio中的信息,就可以从Minio中把该视频下载下来。再使用视频转码工具,如FFmpeg,对视频进行转码。处理完成以后把转码视频上传回Minio中。

7.最后,把对应视频任务的处理结果修改为已完成,并将该记录插入到一个历史处理表中,当前任务表中该记录可以删除。保证任务表中的记录数尽可能的少,因为每个执行器都是从该表中查询自己要执行的任务。

相关文章:

Java处理视频思路

1.首先实现断点续传功能。 断点续传实现思路: 前端对文件分块。前端使用多线程一块一块上传,上传前给服务端发一个消息校验该分块是否上传,如果已上传则不再上传。如果从该断点处断网了,下次上传时,前面的分块已经存在…...

Python入门:8.Python中的函数

引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始…...

计算机网络 (8)物理层的传输方式

一、串行传输与并行传输 串行传输 定义:串行传输是一种数据传输方式,指的是逐位地按照顺序传输数据。在串行传输中,数据位逐个按照一定的顺序进行传输,可以通过单条线路或信道进行。特点: 逐位传输:串行传输…...

3.微服务灰度发布落地实践(组件灰度增强)

文章目录 前言调用链示图dubbo服务之间的的调链cloud 服务之间的调用链 网关servlet容器: 标签续传1.定义插件2.实现灰度增强拦截 线程池: 标签续传1.拦截Runnable或Callable,接口增强实现标签续传;Callable 插件定义Runnable 插件定义拦载Callabl或Runnable构造(可共用)拦载ru…...

每天40分玩转Django:Django Email

Django Email 一、知识要点总览表 类别知识点基础配置SMTP设置、Email配置项发送方式同步发送、异步发送邮件类型纯文本、HTML邮件、带附件邮件异步任务Celery集成、任务队列高级特性邮件模板、批量发送 二、Email基础配置 1. 配置settings.py # settings.py EMAIL_BACKEN…...

ipad如何直连主机(Moonlight Sunshine)

Windows 被连接主机(Windows) 要使用的话需要固定ip,不然ip会换来换去,固定ip方法本人博客有记载Github下载Sunshine Sunshine下载地址除了安装路径需要改一下,其他一路点安装完成后会打开Sunshine的Web UI&#xff…...

linux 网络安全不完全笔记

一、安装Centos 二、Linux网络网络环境设置 a.配置linux与客户机相连通 b.配置linux上网 三、Yum详解 yum 的基本操作 a.使用 yum 安装新软件 yum install –y Software b.使用 yum 更新软件 yum update –y Software c.使用 yum 移除软件 yum remove –y Software d.使用 yum …...

一、Hadoop概述

文章目录 一、Hadoop是什么二、Hadoop发展历史三、Hadoop三大发行版本1. Apache Hadoop2. Cloudera Hadoop3. Hortonworks Hadoop 四、Hadoop优势1. 高可靠性2. 高扩展性3. 高效性4. 高容错性 五、Hadoop 组成1. Hadoop1.x、2.x、3.x区别2. HDFS 架构概述3. YARN 架构概述4. Ma…...

Android 转场动画合集

项目背景:mvvm组件化,然后由于领导要求,使用MainActivity为主界面,各种业务使用Fragment处理。所以~ 由于单独ActivityN Fragment 的方式,经过十多天的试错,我确认一件事情。再确认过架构方式后一定要了解下…...

STM32 软件I2C读写

单片机学习! 目录 前言 一、软件I2C读写代码框架 二、I2C初始化 三、六个时序基本单元 3.1 引脚操作的封装和改名 3.2 起始条件执行逻辑 3.3 终止条件执行逻辑 3.4 发送一个字节 3.5 接收一个字节 3.5 发送应答&接收应答 3.5.1 发送应答 3.5.2 接…...

MySQL数据导出导出的三种办法(1316)

数据导入导出 基本概述 目前常用的有3中数据导入与导出方法: 使用mysqldump工具: 优点: 简单易用,只需一条命令即可完成数据导出。可以导出表结构和数据,方便完整备份。支持过滤条件,可以选择导出部分数据…...

三层交换机配置

✍作者:柒烨带你飞 💪格言:生活的情况越艰难,我越感到自己更坚强;我这个人走得很慢,但我从不后退。 📜系列专栏:网路安全入门系列 目录 一,三层交换二,实验案…...

odoo中@api.model, @api.depends和@api.onchange 装饰器的区别

文章目录 1. api.model用途特点示例 2. api.depends用途特点示例 3. api.onchange用途特点示例 总结 在 Odoo 中,装饰器(decorators)用于修饰方法,以指定它们的行为和触发条件。api.model、api.depends 和 api.onchange 是三个常用…...

Mysql的事务隔离机制

文章目录 事务基础概念隔离性与隔离机制的重要性四种隔离级别读未提交读已提交可重复读串行化 隔离级别设置与查看 事务基础概念 事务是一组数据库操作,这些操作要么全部成功执行,要么全部不执行。在 MySQL 中,事务通常以START TRANSACTION开…...

鸿蒙项目云捐助第二十八讲云捐助项目首页组件云数据库加载轮播图

鸿蒙项目云捐助第二十八讲云捐助项目首页组件云数据库加载轮播图 在前面的章节中实现了云捐赠项目的底部导航和分类导航,本讲继续使用云技术丰富首页组件中的功能。这里使用云数据库进行首页组件轮播图的加载。 一、云数据库进行首页组件轮播图的加载 在云捐助项…...

vue项目搭建规范

项目搭建规范 一. 代码规范1.1. 集成editorconfig配置1.2. 使用prettier工具1.3. 使用ESLint检测1.4. git Husky和eslint1.5. git commit规范1.5.1. 代码提交风格1.5.2. 代码提交验证 二. 第三方库集成2.1. vue.config.js配置2.2. vue-router集成2.3. vuex集成2.4. element-plu…...

Spring Boot的开发工具(DevTools)模块中的热更新特性导致的问题

问题: java.lang.ClassCastException: class cn.best.scholarflow.framework.system.domain.entity.SysUser cannot be cast to class cn.best.scholarflow.framework.system.domain.entity.SysUser (cn.best.scholarflow.framework.system.domain.…...

Unity Shader TexelSize的意义

TexelSize在制作玻璃折射效果时会用到。 // Get the normal in tangent space fixed3 bump UnpackNormal(tex2D(_BumpMap, i.uv.zw)); // Compute the offset in tangent space float2 offset bump.xy * _Distortion * _RefractionTex_TexelSize.xy; i.scrPos.xy offset * i…...

一个C#开发的APP

开发方式 C#Web、AndroidWebView 系统设计 系统主要分两个部分。一个是内容(文章)发布系统,另一个是预约和支付系统。 内容发布系统 和普通的文章发布系统不一样的地方在于,我们把每篇文章和大师关联起来。在文章的下方会显示…...

C++ 设计模式:原型模式(Prototype Pattern)

链接:C 设计模式 链接:C 设计模式 - 工厂方法 链接:C 设计模式 - 抽象工厂 链接:C 设计模式 - 建造者模式 原型模式(Prototype Pattern)是一种创建型设计模式,它允许一个对象通过复制现有对象来…...

window如何将powershell以管理员身份添加到右键菜单?(按住Shift键显示)

window如何将powershell以管理员身份添加到右键菜单? 在 Windows 中,将 PowerShell 以管理员身份添加到右键菜单,可以让你在需要提升权限的情况下快速打开 PowerShell 窗口。以下是详细的步骤,包括手动编辑注册表和使用注册表脚本…...

python爬虫——爬取全年天气数据并做可视化分析

一、主题页面的结构与特征分析 1.主题页面的结构与特征分析 目标内容界面: 2. Htmls 页面解析 3.节点查找方法与遍历方法 查找方法:find(): 查找第一个匹配到的节点。find_all(): 查找所有匹配到的节点,并返回一个…...

【Unity3D】ECS入门学习(十二)IJob、IJobFor、IJobParallelFor

IJob&#xff1a;开启单个线程进行计算&#xff0c;线程内不允许对同一个数据进行操作&#xff0c;也就是如果你想用多个IJob分别计算&#xff0c;将其结果存储到同一个NativeArray<int>数组是不允许的&#xff0c;所以不要这样做&#xff0c;如下例子就是反面教材&#…...

存储进阶笔记(二):Linux 存储栈:从 Device Mapper、LVM 到文件系统(2024)

记录一些平时接触到的存储知识。由于是笔记而非教程&#xff0c;因此内容不求连贯&#xff0c;有基础的同学可作查漏补缺之用。 存储进阶笔记&#xff08;一&#xff09;&#xff1a;硬件基础&#xff1a;HDD/SDD、JBOD、RAID 等&#xff08;2024&#xff09; 存储进阶笔记&am…...

MySQL——操作

一.库的操作 1.基本操作 创建数据库 create database 数据库名称; 查看数据库 show databases; 删除数据库 drop database 数据库名称; 执行删除之后的结果: 数据库内部看不到对应的数据库对应的数据库文件夹被删除&#xff0c;级联删除&#xff0c;里面的数据表全部被删 所…...

c++表达范围勿用数学符号

目的 遇上了一个C基础问题&#xff0c;一下子陷到里面&#xff0c;不知怎么回事了&#xff0c;知道后&#xff0c;又感觉太可笑。 这也许就是成长的代价。 下面就是细说说所遇上的问题。 关于C逻辑的一些知识点&#xff1a; 定义: 用逻辑运算符将两个表达式链接起来的式子称为…...

SAP PP bom历史导出 ALV 及XLSX 带ECN号

bom总数 104W PS超过XLSX上限 &#xff0c;那就分文件 *&---------------------------------------------------------------------* *& Report ZRPT_PP_BOM_HIS_ECN *&---------------------------------------------------------------------* *& tcode:zpp0…...

【AIGC-ChatGPT职业提示词指令】智能职业规划助手:基于SVG可视化的职业发展指南系统

引言 在当今快速变化的职场环境中,职业发展规划变得越来越复杂和充满挑战。无论是想要转行的技术人员,还是希望突破瓶颈的职场人士,都需要一个清晰的指导方向和可执行的行动计划。基于这种需求,我们设计了一个智能职业规划助手系统,它能够通过数据可视化的方式,为用户提…...

node.js之---单线程异步非阻塞 I/O

单线程模型 1、Node.js 使用 单线程 来处理客户端请求和执行任务 2、如果遇到异步任务&#xff0c;node.js使用事件循环和异步 I/O 模型&#xff0c;使得它能够高效地处理大量并发请求 异步操作有哪些 1、读取文件 2、网络请求 3、数据库操作等等 异步非阻塞 I/O Node.…...

DotnetSpider实现网络爬虫

1. 使用DotnetSpider框架 DotnetSpider是一个开源的、轻量、灵活、高性能、跨平台的分布式网络爬虫框架,适用于.NET平台。它可以帮助开发者快速实现网页数据的抓取功能。 1.1 安装DotnetSpider NuGet包 首先,你需要在你的.NET项目中安装DotnetSpider NuGet包。你可以通过…...

01 Oracle 基本操作

Oracle 基本操作 初使用步骤 1.创建表空间 2.创建用户、设置密码、指定表空间 3.给用户授权 4.切换用户登录 5.创建表 注意点&#xff1a;oracle中管理表的基本单位是用户 文章目录 了解Oracle体系结构 1.创建表空间**2.删除表空间**3.创建用户4.给用户授权5.切换用户登录6.表操…...

纯血鸿蒙ArkUI线性布局详解

线性布局说明 线性布局&#xff08;LinearLayout&#xff09;是开发中最常用的布局&#xff0c;通过线性容器Row和Column构建。线性布局是其他布局的基础&#xff0c;其子元素在线性方向上&#xff08;水平方向和垂直方向&#xff09;依次排列。线性布局的排列方向由所选容器组…...

MySQL root用户密码忘记怎么办(Reset root account password)

在使用MySQL数据库的的过程中&#xff0c;不可避免的会出现忘记密码的现象。普通用户的密码如果忘记&#xff0c;可以用更高权限的用户&#xff08;例如root&#xff09;进行重置。但是如果root用户的密码忘记了&#xff0c;由于root用户本身就是最高权限&#xff0c;那这个方法…...

18.springcloud_openfeign之扩展组件二

文章目录 一、前言二、子容器默认组件FeignClientsConfigurationDecoder的注入Contract约定对注解的支持对类上注解的支持对方法上注解的支持对参数上注解的支持@MatrixVariable@PathVariable@RequestParam@RequestHeader@SpringQueryMap@RequestPart@CookieValueFormattingCon…...

18、【OS】【Nuttx】用gdb调试nuttx os

背景 接之前wiki 14、【OS】【Nuttx】Nsh中运行第一个程序 15、【OS】【Nuttx】OS裁剪&#xff0c;运行指定程序&#xff0c;周期打印当前任务 程序跑起来了&#xff0c;OS也裁剪了&#xff0c;下一步就是调试了 目标 用gdb把nuttx程序跑起来 准备环境 vscode商店里C和C相…...

网络爬虫科普:原理、类型、策略与常用工具

网络爬虫科普&#xff1a;原理、类型、策略与常用工具 网络爬虫在当今互联网时代扮演着极为重要的角色&#xff0c;它能帮助我们从海量的网络信息中提取出有价值的数据。以下将从网络爬虫的基本概念、工作流程、类型、搜索策略以及常用工具等方面进行详细科普介绍。 一、网络…...

SQL 实战:动态表创建与多表更新的高级 SQL

在实际的数据库管理和开发中&#xff0c;经常需要临时存储中间计算结果或对多表数据进行批量更新。SQL 提供了动态表创建和多表更新的能力&#xff0c;使复杂业务逻辑能够通过一条 SQL 语句高效完成。本文将介绍如何动态创建临时表和实现多表联动更新&#xff0c;并通过具体示例…...

RabbitMQ基础篇之快速入门

文章目录 一、目标需求二、RabbitMQ 控制台操作步骤1.创建队列2.交换机概述3.向交换机发送消息4.结果分析5.消息丢失原因 三、绑定交换机与队列四、测试消息发送五、消息查看六、结论 一、目标需求 新建队列&#xff1a;创建 hello.queue1 和 hello.queue2 两个队列。消息发送…...

NLP论文速读(NeurIPS 2024)|BERT作为生成式上下文学习者BERTs are Generative In-Context Learners

论文速读|BERTs are Generative In-Context Learners 论文信息&#xff1a; 简介&#xff1a; 本文探讨了在自然语言处理&#xff08;NLP&#xff09;领域中&#xff0c;上下文学习&#xff08;in-context learning&#xff09;的能力&#xff0c;这通常与因果语言模型&#x…...

LeetCode - Google 校招100题 第7天 序列(数据结构贪心) (15题)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/144744418 相关文章&#xff1a; LeetCode 合计最常见的 112 题&#xff1a; 校招100题 第1天 链表(List) (19题)校招100题 第2天 树(Tree) (21…...

基于Docker基础与操作实战

6.1 Docker容器简介 Docker是一个开源的应用容器引擎&#xff0c;它基于Go语言并遵从Apache2.0 协议开源。 Docker是一个用于开发&#xff0c;交付和运行应用程序的开放平台。Docker能将应用程序与基础架构分开&#xff0c;从而可以快速交付软件。借助Docker&#xff0c;您可…...

高转化的Facebook广告文案的秘诀

Facebook 广告文案是制作有效 Facebook 广告的关键方面。它侧重于伴随广告视觉元素的文本内容。今天我们的博客将深入探讨成功的 Facebook 广告文案的秘密&#xff01; 一、广告文案怎么写&#xff1f; 正文&#xff1a;这是帖子的正文&#xff0c;出现在您姓名的正下方。它可…...

支持向量机入门指南:从原理到实践

目录 1 支持向量机的基本概念 1.2 数学表达 2 间隔与支持向量 2.1 几何间隔 2.2 支持向量的概念 2.3 规范化超平面 2.4 支持向量的深入分析 2.4.1 支持向量的特征 2.4.2 支持向量的作用 2.4.3 支持向量的代数表示 2.5 KKT条件 3 最优化问题 3.1 问题的形成 3.2 规…...

汽车打气泵方案|智能充气泵工作原理

汽车打气泵方案最开始是机械式的开发&#xff0c;后来慢慢地演变成由一个气缸、压力传感器和ADC芯片以及主控芯片&#xff0c;就能够使得打气筒具备智能充气功能&#xff0c;摇身一变变成汽车打气泵方案。它具备精准压力检测以及过充过放等功能&#xff0c;利用ADC芯片和压力传…...

Jenkins入门使用

Jenkins入门使用 1先安装jdk才能运行jenkins yum install -y java-1.8.0-openjdk.x86_64 2 安装jenkins&#xff0c;运行&#xff0c;进行端口绑定&#xff0c;启动jenkins docker search jenkins docker pull jenkins/jenkins docker run -d -u root -p 8080:8080 -p 50000:50…...

iOS Masonry对包体积的影响

01 Masonry介绍 Masonry是iOS在控件布局中经常使用的一个轻量级框架&#xff0c;Masonry让NSLayoutConstraint使用起来更为简洁。Masonry简化了NSLayoutConstraint的使用方式&#xff0c;让我们可以以链式的方式为我们的控件指定约束。 常用接口声明与实现&#xff1a; 使用方式…...

Hive分区再分桶表

在Hive中&#xff0c;数据通常是根据分区&#xff08;partition&#xff09;来组织的&#xff0c;但是对于大数据集&#xff0c;单层分区可能不够用&#xff0c;因此可以进一步细分为桶&#xff08;bucket&#xff09;。桶可以用于提供额外的并行处理和优化查询性能。在这种情况…...

三大行业案例:AI大模型+Agent实践全景

本文将从AI Agent和大模型的发展背景切入&#xff0c;结合51Talk、哈啰出行以及B站三个各具特色的行业案例&#xff0c;带你一窥事件驱动架构、RAG技术、人机协作流程&#xff0c;以及一整套行之有效的实操方法。具体包含内容有&#xff1a;51Talk如何让智能客服“主动进攻”&a…...

国产低代码框架zdppy开发笔记002 标准的接口响应

前言 通过前面的学习, 我们已经知道了zdppy_api和zdppy_req的基本用法, 接下来我们会在学习中多次用到这两个框架. 我们已经知道了该如何响应一个字符串,但是我们该如何响应json数据呢? 在zdppy_api中,我们定义了一组规范的API响应, 我们慢慢来看看. 规范的响应 首先来看…...

关于Nginx

1.Nginx的配置 proxy_pass http: 当你需要将请求分发到多个后端服务器时&#xff0c;需要实现负载均衡功能&#xff0c;可以使用upstream指令定义一组服务器&#xff0c;并在proxy_pass中引用这个服务组名称。。如果不需要负载均衡&#xff0c;只需要将请求转发到单一的后端…...