视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器.
多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。
ffmpeg视频采集功能非常强大,不仅可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器,支持直播应用。
1.能支持的格式
ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)
2.不能支持的格式
对ffmpeg无法解析的文件格式(wmv9,rm,rmvb等),可以先用别的工具(mencoder)转换为avi(ffmpeg能解析的)格式.
实例是将上传视频转码为flv格式,该格式ffmpeg支持,所以我们实例中需要ffmpeg视频处理工具.
数据库 MySQL5.5
实例所需要的数据库脚本
drop database if exists db_mediaplayer;
create database db_mediaplayer;
use db_mediaplayer;
create table tb_media(
id int not null primary key auto_increment comment ' 主键 ' ,
title varchar (50 ) not null comment ' 视频名称 ' ,
src varchar (200 ) not null comment ' 视频存放地址 ' ,
picture varchar (200 ) not null comment ' 视频截图 ' ,
descript varchar (400 ) comment ' 视频描述 ' ,
uptime varchar (40 ) comment ' 上传时间 '
);
desc tb_media;
项目结构图:
上传视频界面设计
在上传文件时,Form表单中 enctype属性值必须为"multipart/form-data".模块界面设计如下图:
enctype属性值说明
application/x-www-form-urlencoded
表单数据被编码为名称/值对,这是标准的编码格式
multipart/form-data
表单数据被编码为一条消息,页面上每个控件对应消息中的一部分
text/plain
表单数据以纯文本形式进行编码,其中不含任何控件格式的字符
业务接口定义
面向接口编程,接口中定义系统功能模块.这样方便理清业务,同时接口的对象必须由实现了该接口的对象来创建.这样就避免编码中的某些业务遗漏等,同时扩展性也增强了.
package com.webapp.dao;
import java.util.List;
import com.webapp.entity.Media;
/**
*
* MediaDao.java
*
* @version : 1.1
*
* @author : 苏若年 发送邮件
*
* @since : 1.0 创建时间: 2013-2-07 上午10:19:54
*
* TODO : interface MediaDao.java is used for ...
*
*/
public interface MediaDao {
/**
* 视频转码
* @param ffmpegPath 转码工具的存放路径
* @param upFilePath 用于指定要转换格式的文件,要截图的视频源文件
* @param codcFilePath 格式转换后的的文件保存路径
* @param mediaPicPath 截图保存路径
* @return
* @throws Exception
*/
public boolean executeCodecs(String ffmpegPath,String upFilePath, String codcFilePath, String mediaPicPath)throws Exception;
/**
* 保存文件
* @param media
* @return
* @throws Exception
*/
public boolean saveMedia(Media media)throws Exception;
/**
* 查询本地库中所有记录的数目
* @return
* @throws Exception
*/
public int getAllMediaCount()throws Exception;
/**
* 带分页的查询
* @param firstResult
* @param maxResult
* @return
*/
public List queryALlMedia(int firstResult, int maxResult)throws Exception;
/**
* 根据Id查询视频
* @param id
* @return
* @throws Exception
*/
public Media queryMediaById(int id)throws Exception;
}
接口的实现,这里列出ffmpeg视频转码与截图模块
/**
* 视频转码
* @param ffmpegPath 转码工具的存放路径
* @param upFilePath 用于指定要转换格式的文件,要截图的视频源文件
* @param codcFilePath 格式转换后的的文件保存路径
* @param mediaPicPath 截图保存路径
* @return
* @throws Exception
*/
public boolean executeCodecs(String ffmpegPath, String upFilePath, String codcFilePath,
String mediaPicPath) throws Exception {
// 创建一个List集合来保存转换视频文件为flv格式的命令
List convert = new ArrayList();
convert.add(ffmpegPath); // 添加转换工具路径
convert.add("-i"); // 添加参数"-i",该参数指定要转换的文件
convert.add(upFilePath); // 添加要转换格式的视频文件的路径
convert.add("-qscale"); // 指定转换的质量
convert.add("6");
convert.add( "-ab"); // 设置音频码率
convert.add("64");
convert.add( "-ac"); // 设置声道数
convert.add("2");
convert.add( "-ar"); // 设置声音的采样频率
convert.add("22050");
convert.add( "-r"); // 设置帧频
convert.add("24");
convert.add( "-y"); // 添加参数"-y",该参数指定将覆盖已存在的文件
convert.add(codcFilePath);
// 创建一个List集合来保存从视频中截取图片的命令
List cutpic = new ArrayList();
cutpic.add(ffmpegPath);
cutpic.add( "-i");
cutpic.add(upFilePath); // 同上(指定的文件即可以是转换为flv格式之前的文件,也可以是转换的flv文件)
cutpic.add("-y");
cutpic.add( "-f");
cutpic.add( "image2");
cutpic.add( "-ss"); // 添加参数"-ss",该参数指定截取的起始时间
cutpic.add("17"); // 添加起始时间为第17秒
cutpic.add("-t"); // 添加参数"-t",该参数指定持续时间
cutpic.add("0.001"); // 添加持续时间为1毫秒
cutpic.add("-s"); // 添加参数"-s",该参数指定截取的图片大小
cutpic.add("800*280"); // 添加截取的图片大小为350*240
cutpic.add(mediaPicPath); // 添加截取的图片的保存路径
boolean mark = true ;
ProcessBuilder builder = new ProcessBuilder();
try {
builder.command(convert);
builder.redirectErrorStream( true );
builder.start();
builder.command(cutpic);
builder.redirectErrorStream( true );
// 如果此属性为 true,则任何由通过此对象的 start() 方法启动的后续子进程生成的错误输出都将与标准输出合并,
// 因此两者均可使用 Process.getInputStream() 方法读取。这使得关联错误消息和相应的输出变得更容易
builder.start();
} catch (Exception e) {
mark = false ;
System.out.println(e);
e.printStackTrace();
}
return mark;
}
系统中可能存在多个模块,这些模块的业务DAO可以通过工厂来管理,需要的时候直接提供即可.
因为如果对象new太多,会不必要的浪费资源.所以工厂,采用单例模式,私有构造,提供对外可访问的方法即可.
package com.webapp.dao;
import com.webapp.dao.impl.MediaDaoImpl;
/**
*
* DaoFactory.java
*
* @version : 1.1
*
* @author : 苏若年 发送邮件
*
* @since : 1.0 创建时间: 2013-2-07 下午02:18:51
*
* TODO : class DaoFactory.java is used for ...
*
*/
public class DaoFactory { // 工厂模式,生产Dao对象,面向接口编程,返回实现业务接口定义的对象
private static DaoFactory daoFactory = new DaoFactory();
// 单例设计模式, 私有构造,对外提供获取创建的对象的唯一接口,
private DaoFactory(){
}
public static DaoFactory getInstance(){
return daoFactory;
}
public static MediaDao getMediaDao(){
return new MediaDaoImpl();
}
}
视图提交请求,给控制器,控制器分析请求参数,进行相应的业务调用处理.servlet控制器相关代码如下
package com.webapp.service;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.webapp.dao.DaoFactory;
import com.webapp.dao.MediaDao;
import com.webapp.entity.Media;
import com.webapp.util.DateTimeUtil;
/**
*
* MediaService.java
*
* @version : 1.1
*
* @author : 苏若年 发送邮件
*
* @since : 1.0 创建时间: 2013-2-08 下午02:24:47
*
* TODO : class MediaService.java is used for ...
*
*/
public class MediaService extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
MediaDao mediaDao = DaoFactory.getMediaDao();
String message = "";
String uri = request.getRequestURI();
String path = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));
if ("/uploadFile".equals(path)){
// 提供解析时的一些缺省配置
DiskFileItemFactory factory = new DiskFileItemFactory();
// 创建一个解析器,分析InputStream,该解析器会将分析的结果封装成一个FileItem对象的集合
// 一个FileItem对象对应一个表单域
ServletFileUpload sfu = new ServletFileUpload(factory);
try {
Media media = new Media();
List items = sfu.parseRequest(request);
boolean flag = false ; // 转码成功与否的标记
for (int i=0; i){
FileItem item = items.get(i);
// 要区分是上传文件还是普通的表单域
if (item.isFormField()){// isFormField()为true,表示这不是文件上传表单域
// 普通表单域
String paramName = item.getFieldName();
/*
String paramValue = item.getString();
System.out.println("参数名称为:" + paramName + ", 对应的参数值为: " + paramValue);
*/
if (paramName.equals("title")){
media.setTitle( new String(item.getString().getBytes("ISO8859-1"),"UTF-8"));
}
if (paramName.equals("descript")){
media.setDescript( new String(item.getString().getBytes("ISO8859-1"),"UTF-8"));
}
} else {
// 上传文件
// System.out.println("上传文件" + item.getName());
ServletContext sctx = this .getServletContext();
// 获得保存文件的路径
String basePath = sctx.getRealPath("videos");
// 获得文件名
String fileUrl= item.getName();
// 在某些操作系统上,item.getName()方法会返回文件的完整名称,即包括路径
String fileType = fileUrl.substring(fileUrl.lastIndexOf(".")); // 截取文件格式
// 自定义方式产生文件名
String serialName = String.valueOf(System.currentTimeMillis());
// 待转码的文件
File uploadFile = new File(basePath+"/temp/"+serialName + fileType);
item.write(uploadFile);
if (item.getSize()>500*1024*1024){
message = "上传失败!您上传的文件太大,系统允许最大文件500M "
;
}
String codcFilePath = basePath + "/" + serialName + ".flv";
// 设置转换为flv格式后文件的保存路径
String mediaPicPath = basePath + "/images" +File.separator+ serialName + ".jpg";
// 设置上传视频截图的保存路径
// 获取配置的转换工具(ffmpeg.exe)的存放路径
String ffmpegPath = getServletContext().getRealPath("/tools/ffmpeg.exe"
);
media.setSrc( "videos/" + serialName + ".flv"
);
media.setPicture( "videos/images/" +serialName + ".jpg"
);
media.setUptime(DateTimeUtil.getYMDHMSFormat());
// 转码
flag =
mediaDao.executeCodecs(ffmpegPath, uploadFile.getAbsolutePath(), codcFilePath, mediaPicPath);
}
}
if (flag){
// 转码成功,向数据表中添加该视频信息
mediaDao.saveMedia(media);
message = "
上传成功! "
;
}
request.setAttribute( "message"
, message);
request.getRequestDispatcher( "media_upload.jsp"
).forward(request,response);
} catch (Exception e) {
e.printStackTrace();
throw new ServletException(e);
}
}
if ("/queryAll"
.equals(path)){
List mediaList;
try {
mediaList = mediaDao.queryALlMedia(0,5);
request.setAttribute( "mediaList", mediaList);
request.getRequestDispatcher( "media_list.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
if ("/play".equals(path)){
String idstr = request.getParameter("id");
int mediaId = -1;
Media media = null ;
if (null !=idstr){
mediaId = Integer.parseInt(idstr);
}
try {
media = mediaDao.queryMediaById(mediaId);
} catch (Exception e) {
e.printStackTrace();
}
request.setAttribute( "media", media);
request.getRequestDispatcher( "media_player.jsp").forward(request, response);
}
}
}
可以通过分页查找,显示最新top5,展示到首页.相应特效可以使用JS实现.
相关代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import ="com.webapp.entity.*"%>
<%@ page import ="java.util.*"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
视频列表
class="wrapper">
最新视频
<%
List mediaList = (List)request.getAttribute("mediaList");
if (mediaList.size()>0&&mediaList!=null ){
for (int i=0; i){
Media media = mediaList.get(i);
%>
<%
}
} else {
%>
没有记录
<%
}
%>
首页展示的图片都是带ID的链接请求.图片为视频转码过程中拉取到的图片.点击图片即可发送播放视频请求,
视频播放页面效果如下图所示.
视频播放页面需要在页面中嵌入Flash播放器
代码如下:
value="<%=basePath%>tools/player.swf?fileName=<%=basePath%><%=media.getSrc()%>" />
<embed
src ="<%=basePath%>tools/player.swf?fileName=<%=basePath%><%=media.getSrc()%>"
width ="98%" height="90%">
相关说明:
元素,加载ActiveX控件,classid属性则指定了浏览器使用的ActiveX空间.因为使用Flash制作的播放器来播放视频文件,所以classid的值必须为”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000”
元素,value属性指定被加载的视频文件.实例中用的是flash制作的视频播放器.在value属性值中向player.swf播放器传递了一个file参数.该参数指定了要播放的视频的路径.
元素,src属性也是用来加载影片,与 标记的value属性值具体相同的功能.
转载请注明出处:[http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html]
你可能感兴趣的:(Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能)
分布式存储--大规模订单架构设计
梦江河
大数据 分布式 订单系统 大数据
架构一:MySQL+HBase+ElasticsearchMySQL存储实时订单,HBase存储历史订单,Elasticsearch实现订单的多维度搜索。架构复杂,运维维护成本高架构二:MySQL+TablestoreTablestore其实是HBase+Elasticsearch,既能存储大量数据,也能全文搜索架构三:分布式数据库TiDB+全文搜索功能参考文章
mysql用函数调用存储过程_mysql 函数 调用 存储过程
weixin_39585974
mysql用函数调用存储过程
Mysql高级之存储过程原文:Mysql高级之存储过程概念类似于函数,就是把一段代码封装起来,当要执行这一段代码的时候,可以通过调用该存储过程来实现.在封装的语句体里面,可以用if/else,case,while等控制结构.可以进行sql编程.在mysql中,存储过程和函数...文章杰克.陈2014-11-14657浏览量Mysql函数(function)|存储过程(procedure)funct
mysql调用存储函数语法_MySQL调用存储过程和函数
weixin_39979332
mysql调用存储函数语法
MySQL调用存储过程和函数用call和你过程名以及一个括号,括号里面根据需要,加入参数,参数包括输入参数、输出参数、输入输出参数。具体的调用方法可以参看上面的例子。1.调用存储过程存储过程是通过CALL语向进行调用的,语法如下:CALLsp_name([parameter[,...]])CALL语句调用一个先前用CREATEPROCEDURE创建的存储过程,其中sp_name为存储过程的参数。【
Redis在京东到家的订单中的使用
weixin_33948416
数据库 java 大数据
背景Redis作为一款性能优异的内存数据库,在互联网公司有着多种应用场景,下面介绍下Redis在京东到家的订单列表中的使用场景。主要从以下几个方面来介绍:订单列表在Redis中的存储结构Redis和DB数据一致性保证Redis中的分布式锁缓存防穿透和雪崩订单列表在Redis中的存储结构订单列表数据在缓存中,是以用户的唯一标识作为键,以一个按下单时间倒序的有序集合为值进行存储的。大家都知道Redis
git的基本操作
NeoFive
git使用 git
教程地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b0001.安装linuxinstallgit:sudoapt-getinstallgitinstallwithsource:先从Git官网下载源码,然后解压,依次输入:./config,make,sudomakeinstall这几
Bengio新作Aaren:探索Transformer性能与RNN效率的融合
AI记忆
深度 学习论文与相关应用 transformer rnn 深度学习 Aaren Bengio
论文链接:https://arxiv.org/pdf/2405.13956一、摘要总结:本文提出了一种新的注意力机制,名为Aaren,它将注意力视为一种特殊的递归神经网络(RNN),能够高效地计算其多对一RNN输出。Aaren不仅能够并行训练,而且能够在推理时高效地更新新令牌,仅需要常数内存。实验表明,Aaren在四个流行的序列问题设置(强化学习、事件预测、时间序列分类和时间序列预测)的38个数据
python原生代码中的列表,元组和数组的区别,一个表格搞明白
涛涛讲AI
AI编程 效率工具 python 开发语言
经常搞混,以备后用。在Python原生代码里,数组一般是指由array模块创建的数组,下面以表格形式呈现列表、元组和array模块数组的区别:在Python原生代码里,数组一般是指由array模块创建的数组,下面以表格形式呈现列表、元组和array模块数组的区别:对比维度列表(list)元组(tuple)数组(array.array)定义语法使用方括号[]定义,元素间用逗号分隔。示例:my_lis
数据结构-链表【chapter1】【c语言版】
躺不平的理查德
数据结构 数据结构 链表 c语言 visual studio 开发语言
目录1链表的优势:2链表的组成:3.一般使用结构体的形式来实现链表:4.单向链表实现(创建,遍历,释放):4.1代码关键点备注:5.查找节点:5.1.按值查找节点5.2.按位置查找节点5.3查找是否存在某个值5.4.查找链表中最后一个节点5.5查找链表中倒数第k个节点6.删除节点6.1删除头节点6.2删除尾节点6.3.删除指定位置的节点6.4.删除指定值的节点6.5.释放整个链表1链表的优势:动态
C++--this关键字
躺不平的理查德
c++ c++ 开发语言 1024程序员节 c语言 学习
目录1.this关键字的解释2.this关键字的使用2.1访问当前对象的成员和解决命名冲突。2.2链式调用3.this关键字总结3.1.常量指针3.2.在静态成员函数中不可用3.3this指向3.1.this在继承关系中的指向3.2.this在派生类中的指向3.3.基类指针或引用访问基类成员1.this关键字的解释在C++中,this关键字是一个指针,指向当前对象的地址。它在类的成员函数中使用,提
git bash常用命令
qq_37457269
git bash elasticsearch
GitBash是一个用于在Windows上执行Git命令的命令行工具,它提供了一个类似于Linux的终端环境,允许用户执行各种Git操作。以下是一些常用的GitBash命令及其说明:配置相关gitconfig--globaluser.name“YourName”:设置全局用户名。gitconfig--globaluser.email“youremail@example.com”:设置全局用户邮箱。
利用Infinity Embeddings创建文本嵌入
qahaj
python
技术背景介绍在自然语言处理(NLP)任务中,文本嵌入是一种将文本数据转换成固定维度向量的技术。这些向量能够捕捉文本之间的语义关系,使得在后续的任务(如文本分类、相似度计算等)中非常实用。Infinity嵌入模型是一种能够方便创建高质量文本嵌入的现代工具。核心原理解析InfinityEmbeddings利用强大的预训练模型,通过对输入的文本数据进行编码,生成具有语义意义的高维向量。这个过程不仅仅是简
Uniswap V3:流动性提取和收集
OpenBuild.xyz
Uniswap 人工智能 智能合约 web3 区块链 去中心化
作者:WongSSH引言本系列文章将带领读者从零实现UniswapV3核心功能,深入解析其设计与实现。主要参考了Constructor|UniswapV3CoreContractExplained系列教程、UniswapV3DevelopmentBook和Paco博客中的相关内容。所有示例代码可在clamm代码库中找到,以便实践和探索。流动性提取和收集进行流动性的提取实际上就是mint函数的反向操
仅用10张图片,AI就能学会识别万物?多模态小样本学习颠覆传统!
沃恩智慧
人工智能 深度学习 人工智能 学习 深度学习
小样本学习与多模态结合是当前人工智能领域的热门研究方向,旨在通过结合多模态数据(如视觉、语言、音频等)来提高模型在数据稀缺情况下的学习效率和性能。例如,ZS-DeconvNet方法在Nature上发表,展示了其在极低训练数据需求下,将图像分辨率提升超过1.5倍衍射极限的能力。此外,CPE-CLIP和MMFL等方法通过利用预训练模型和冻结的大规模视觉语言模型,实现了跨会话的迁移学习和快速适应新样本。
网络工程师 (38)流量和差错控制
IT 青年
软考网络工程师 软考 网络工程师
一、流量控制流量控制是一种协调发送站和接收站工作步调的技术。它的主要目的是防止发送端发送数据过快,导致接收端缓冲区溢出,从而造成数据丢失。流量控制机制通过调整发送速率来匹配接收端的处理能力。基本原理发送站每发出一帧数据,就进入等待状态。接收站收到数据后,进行简单的处理,然后送回一个应答信号(ACK)。发送站收到应答信号后,才能继续发送下一帧数据。常见协议停等协议:发送站发出一帧数据后等待接收站的应
发文新思路!双通道CNN的惊人突破,准确率接近100%!
沃恩智慧
深度学习 人工智能 cnn 人工智能 神经网络
双通道CNN作为一种创新的卷积神经网络架构,正引领深度学习领域的新趋势。其核心优势在于并行卷积层设计,能够同时处理更多特征信息,从而显著提升模型的特征表示能力和识别精度。这种架构不仅提高了计算效率,还有效降低了过拟合风险,使其在复杂视觉任务中表现卓越。例如,最新的研究提出了一种名为DDTransUNet的混合网络,结合了Transformer和CNN的优势,通过双分支编码器和双重注意力机制,有效解
CVPR2024最佳论文出炉!历年CVPR最佳论文盘点(2000 年—2024 年)
沃恩智慧
深度学习 人工智能 CVPR 人工智能 论文阅读 深度学习
cvpr2024最佳论文出炉,本次论文可谓是万里挑一。作为计算机视觉领域的顶级学术会议CVPR,每年评选出的一篇或多篇最佳论文,不仅为计算机视觉领域的顶级学术荣誉,更代表了将对未来技术或行业发展产生重要影响的里程碑式研究成果。为了帮助大家对这批计算机领域的重要论文进行复习,沃恩智慧为大家精心整理了一份从2000年—2024年的CVPR最佳论文盘点。需要的同学关注公众号【沃的顶会】,回复“CVPR”
linux bash数值运算
m0_60635609
2024年程序员学习 运维 linux 面试
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以点击这里获取!一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!方法一:使用declare-itotal=$va
实现python命令行
FLY@CYX
python 服务器 linux
如何在python程序中自定义python命令行输入参数及相关提示呢?让我们来学习一下吧。1.首先明确用到的模块,要导入optparse和sys模块,前者用于解析参数,后者用于获取终端参数。2.其次编写readcommand函数,具体实现如代码所示,大致流程可理解为:编写提示词->添加可选参数项->解析参数,并取得参数->返回处理参数后得到的字典,便于后续调用。importsysdefdefaul
字符串匹配
FLY@CYX
笔记 算法 哈希算法 数据结构
本文章总结一些关于字符串匹配的方法1.普通暴力匹配。设置变量i,j,一个一个比对进行匹配2.字符串Hash流程:1.定义一个hash数组f【mn】2.设置一个质数p=131用于映射3.f[i]=f[i-1]*p+(s[i]-‘a’+1);将字符串进行映射,整数自然溢出4.再预处理一个阶乘数组po【mn】表示p的i次方5.最后就可以取出l,r区间中的字符串,用于比对,ans【l,r】=f[r]-f[
WhisperX:革命性的自动语音识别工具
孔秋宗Mora
WhisperX:革命性的自动语音识别工具项目地址:https://gitcode.com/gh_mirrors/wh/whisperX项目介绍WhisperX是一个开源的自动语音识别(ASR)项目,由m-bain开发。该项目基于OpenAI的Whisper模型,通过引入批量推理、强制音素对齐和语音活动检测等技术,实现了高达70倍的实时转录速度,并提供了准确的单词级时间戳和说话人识别功能。Whis
Bash脚本中计算时间差值
Leon_Jinhai_Sun
python
startTime=`date-d"$START_AT"`"+$s"endTime=`date-d"$END_AT""+%s"`remains=$((endTime-startTime))这段代码是用于计算两个时间点之间的差值的Bash脚本片段。下面是对每一行代码的详细解释:1.`startTime=`date-d"$START_AT"`"+$s"`-这行代码使用`date`命令来计算一个给定时间
博客之星2024年度总评选,期待您的支持!
IT枫斗者
JAVA基础工作中实际总结 编程学习 git java 开发语言 golang 后端
博客之星2024年度总评选,期待您的支持!亲爱的读者朋友们:先投票:https://www.csdn.net/blogstar2024/detail/229大家好!时光荏苒,岁月如梭,转眼间,2024年已接近尾声。这一年,我在博客里的世界不断探索、成长,也收获了无数的感动与回忆。如今,我有幸参与博客之星2024年度总评选,内心满是期待与激动。在此,我想向一直以来陪伴我的每一位读者朋友说一声:感谢有
pd虚拟机 [po] Parallels Desktop 20
甜于酸
虚拟机 服务器 centos
介绍ParallelsDesktop20,是一款Mac虚拟机软件,在搭载AppleM系列芯片的任何Mac上运行Windows,体验不同操作系统之间无缝集成。使用ParallelsDesktop20forMac体验macOS和Windows的双重最优性能,解锁强大性能和无缝交互,全新的ParallelsDesktop20forMac支持苹果macOSSequoia15,提升了应用在该系统效果下载●P
Python-Matplotlib可视化(2)——自定义颜色绘制精美统计图
2401_87373347
python matplotlib 开发语言
使用自定义颜色绘制曲线图使用自定义颜色绘制散点图为所有点使用相同的颜色为每个点定义不同的颜色为散点图中数据点的边使用自定义颜色使用自定义颜色绘制条形图使用自定义颜色绘制饼图使用自定义颜色绘制箱型图使用色彩映射绘制散点图使用色彩映射绘制条形图创建自定义配色方案系列链接前言matplotlib提供的所有绘图都带有默认样式。虽然这可以进行快速绘图,但有时可能需要自定义绘图的颜色和样式,以对绘制更加精美、
C语言4种实现两变量值互换的方法
しかし118114
c语言 算法 开发语言 经验分享
(一)创建临时变量首先最直观最简单实现两变量值互换的方法是创建临时变量,把其中一个值放在临时变量中去,最后再放回来。#define_CRT_SECURE_NO_WARNINGS1#includeintmain(){inta=0;intb=0;intc=0;//创建临时变量c,用于存放a,b中的一个值scanf("%d%d",&a,&b);c=a;//把a赋值给ca=b;//将b赋值给a,此时a的值
在本地使用gitbash实现github项目的克隆、创建新分支、修改、合并、冲突解决
2401_84447149
程序员 github
步骤3:创建新分支步骤4:修改分支文件步骤5:合并分支步骤6:多人协作,解决冲突1.创建分支,修改分支,下载分支2.模拟分支冲突同一个文件内容多人编辑文件被其他人删除步骤1:创建存储库========================================================================一个库通常用于举办单个项目。储存库可以包含文件夹和文件,图像,视频,电子
2024年最新Web应用安全威胁与防护措施(3)
2401_84240129
程序员 前端 安全 网络
许多金融企业会让员工不受限地访问各类文档资源,他们甚至可以访问到本企业内部大约17%的敏感文件(约1100万个文件)。平均而言,只有5%的公司文件夹受到了适当的保护。而且,有超过77%的企业并无事件响应计划。可见,针对上述威胁,我们应采取主动的Web安全策略,以及严格的措施,来确保敏感的数据信息、Web应用、以及信息系统等资产,免受攻击与侵害。下面,我将和您讨论五种最主要的Web应用安全威胁,以及
美团-外卖客户端容器化架构的演进
2401_84048161
程序员 架构
最底层是系统服务,因为我们采用了H5和RN这样跨端的技术栈,使得iOS系统和Android系统成为了最底层。系统服务之上是集团基于Native建设的基建,全公司通用,覆盖了研发工程中方方面面的基础服务。在基建之上是我们定义的容器层。我们尝试用单一技术栈解决所有问题。但经过我们的探索,觉得不太可能实现。好的架构要匹配业务形态,业务的诉求决定了我们不能选择唯一的技术栈去解决所有问题,细分外卖的业务场景
Web应用安全威胁与防护措施
星环之光
网络安全 网络 web安全
本文已收录至《全国计算机等级考试——信息安全技术》专栏由于极其容易出现漏洞、并引发安全事故,因此数据隐私的保护是目前绝大多数企业不可绕过的运维环节。不过,许多中小型企业往往会错误地认为只有大型企业才会成为黑客的目标。而实际统计数字却截然不同:有43%的网络犯罪恰恰是针对小型企业的。而且,无论是系统陈旧且未给漏洞打上安全补丁,还是各种恶意软件,甚至是一些人为的错误,都可以成为系统的受攻击面。如果仔细
git bash在github的库中上传或更新本地文件
misty youth
git bash github
一、将本地文件上传到GitHub仓库1.创建GitHub仓库如果你还没有在GitHub上创建仓库,首先需要创建一个新的仓库:登录到GitHub。点击右上角的+按钮,选择Newrepository。给你的仓库起个名字,并选择Public或Private,然后点击Createrepository。2.初始化本地Git仓库如果你还没有将本地文件夹初始化为Git仓库,可以通过以下命令在本地初始化Git仓库
多线程编程之存钱与取钱
周凡杨
java thread 多线程 存钱 取钱
生活费问题是这样的:学生每月都需要生活费,家长一次预存一段时间的生活费,家长和学生使用统一的一个帐号,在学生每次取帐号中一部分钱,直到帐号中没钱时 通知家长存钱,而家长看到帐户还有钱则不存钱,直到帐户没钱时才存钱。
问题分析:首先问题中有三个实体,学生、家长、银行账户,所以设计程序时就要设计三个类。其中银行账户只有一个,学生和家长操作的是同一个银行账户,学生的行为是
java中数组与List相互转换的方法
征客丶
JavaScript java jsonp
1.List转换成为数组。(这里的List是实体是ArrayList)
调用ArrayList的toArray方法。
toArray
public T[] toArray(T[] a)返回一个按照正确的顺序包含此列表中所有元素的数组;返回数组的运行时类型就是指定数组的运行时类型。如果列表能放入指定的数组,则返回放入此列表元素的数组。否则,将根据指定数组的运行时类型和此列表的大小分
Shell 流程控制
daizj
流程控制 if else while case shell
Shell 流程控制
和Java、PHP等语言不一样,sh的流程控制不可为空,如(以下为PHP流程控制写法):
<?php
if(isset($_GET["q"])){
search(q);}else{// 不做任何事情}
在sh/bash里可不能这么写,如果else分支没有语句执行,就不要写这个else,就像这样 if else if
if 语句语
Linux服务器新手操作之二
周凡杨
Linux 简单 操作
1.利用关键字搜寻Man Pages man -k keyword 其中-k 是选项,keyword是要搜寻的关键字 如果现在想使用whoami命令,但是只记住了前3个字符who,就可以使用 man -k who来搜寻关键字who的man命令 [haself@HA5-DZ26 ~]$ man -k
socket聊天室之服务器搭建
朱辉辉33
socket
因为我们做的是聊天室,所以会有多个客户端,每个客户端我们用一个线程去实现,通过搭建一个服务器来实现从每个客户端来读取信息和发送信息。
我们先写客户端的线程。
public class ChatSocket extends Thread{
Socket socket;
public ChatSocket(Socket socket){
this.sock
利用finereport建设保险公司决策分析系统的思路和方法
老A不折腾
finereport 金融保险 分析系统 报表系统 项目开发
决策分析系统呈现的是数据页面,也就是俗称的报表,报表与报表间、数据与数据间都按照一定的逻辑设定,是业务人员查看、分析数据的平台,更是辅助领导们运营决策的平台。底层数据决定上层分析,所以建设决策分析系统一般包括数据层处理(数据仓库建设)。
项目背景介绍
通常,保险公司信息化程度很高,基本上都有业务处理系统(像集团业务处理系统、老业务处理系统、个人代理人系统等)、数据服务系统(通过
始终要页面在ifream的最顶层
林鹤霄
index.jsp中有ifream,但是session消失后要让login.jsp始终显示到ifream的最顶层。。。始终没搞定,后来反复琢磨之后,得到了解决办法,在这儿给大家分享下。。
index.jsp--->主要是加了颜色的那一句
<html>
<iframe name="top" ></iframe>
<ifram
MySQL binlog恢复数据
aigo
mysql
1,先确保my.ini已经配置了binlog:
# binlog
log_bin = D:/mysql-5.6.21-winx64/log/binlog/mysql-bin.log
log_bin_index = D:/mysql-5.6.21-winx64/log/binlog/mysql-bin.index
log_error = D:/mysql-5.6.21-win
OCX打成CBA包并实现自动安装与自动升级
alxw4616
ocx cab
近来手上有个项目,需要使用ocx控件
(ocx是什么?
http://baike.baidu.com/view/393671.htm)
在生产过程中我遇到了如下问题.
1. 如何让 ocx 自动安装?
a) 如何签名?
b) 如何打包?
c) 如何安装到指定目录?
2.
Hashmap队列和PriorityQueue队列的应用
百合不是茶
Hashmap队列 PriorityQueue队列
HashMap队列已经是学过了的,但是最近在用的时候不是很熟悉,刚刚重新看以一次,
HashMap是K,v键 ,值
put()添加元素
//下面试HashMap去掉重复的
package com.hashMapandPriorityQueue;
import java.util.H
JDK1.5 returnvalue实例
bijian1013
java thread java多线程 returnvalue
Callable接口:
返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。
Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。
ExecutorService接口方
angularjs指令中动态编译的方法(适用于有异步请求的情况) 内嵌指令无效
bijian1013
JavaScript AngularJS
在directive的link中有一个$http请求,当请求完成后根据返回的值动态做element.append('......');这个操作,能显示没问题,可问题是我动态组的HTML里面有ng-click,发现显示出来的内容根本不执行ng-click绑定的方法!
【Java范型二】Java范型详解之extend限定范型参数的类型
bit1129
extend
在第一篇中,定义范型类时,使用如下的方式:
public class Generics<M, S, N> {
//M,S,N是范型参数
}
这种方式定义的范型类有两个基本的问题:
1. 范型参数定义的实例字段,如private M m = null;由于M的类型在运行时才能确定,那么我们在类的方法中,无法使用m,这跟定义pri
【HBase十三】HBase知识点总结
bit1129
hbase
1. 数据从MemStore flush到磁盘的触发条件有哪些?
a.显式调用flush,比如flush 'mytable'
b.MemStore中的数据容量超过flush的指定容量,hbase.hregion.memstore.flush.size,默认值是64M 2. Region的构成是怎么样?
1个Region由若干个Store组成
服务器被DDOS攻击防御的SHELL脚本
ronin47
mkdir /root/bin
vi /root/bin/dropip.sh
#!/bin/bash/bin/netstat -na|grep ESTABLISHED|awk ‘{print $5}’|awk -F:‘{print $1}’|sort|uniq -c|sort -rn|head -10|grep -v -E ’192.168|127.0′|awk ‘{if($2!=null&a
java程序员生存手册-craps 游戏-一个简单的游戏
bylijinnan
java
import java.util.Random;
public class CrapsGame {
/**
*
*一个简单的赌*博游戏,游戏规则如下:
*玩家掷两个骰子,点数为1到6,如果第一次点数和为7或11,则玩家胜,
*如果点数和为2、3或12,则玩家输,
*如果和为其它点数,则记录第一次的点数和,然后继续掷骰,直至点数和等于第一次掷出的点
TOMCAT启动提示NB: JAVA_HOME should point to a JDK not a JRE解决
开窍的石头
JAVA_HOME
当tomcat是解压的时候,用eclipse启动正常,点击startup.bat的时候启动报错;
报错如下:
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME shou
[操作系统内核]操作系统与互联网
comsci
操作系统
我首先申明:我这里所说的问题并不是针对哪个厂商的,仅仅是描述我对操作系统技术的一些看法
操作系统是一种与硬件层关系非常密切的系统软件,按理说,这种系统软件应该是由设计CPU和硬件板卡的厂商开发的,和软件公司没有直接的关系,也就是说,操作系统应该由做硬件的厂商来设计和开发
富文本框ckeditor_4.4.7 文本框的简单使用 支持IE11
cuityang
富文本框
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>知识库内容编辑</tit
Property null not found
darrenzhu
datagrid Flex Advanced propery null
When you got error message like "Property null not found ***", try to fix it by the following way:
1)if you are using AdvancedDatagrid, make sure you only update the data in the data prov
MySQl数据库字符串替换函数使用
dcj3sjt126com
mysql 函数 替换
需求:需要将数据表中一个字段的值里面的所有的 . 替换成 _
原来的数据是 site.title site.keywords ....
替换后要为 site_title site_keywords
使用的SQL语句如下:
updat
mac上终端起动MySQL的方法
dcj3sjt126com
mysql mac
首先去官网下载: http://www.mysql.com/downloads/
我下载了5.6.11的dmg然后安装,安装完成之后..如果要用终端去玩SQL.那么一开始要输入很长的:/usr/local/mysql/bin/mysql
这不方便啊,好想像windows下的cmd里面一样输入mysql -uroot -p1这样...上网查了下..可以实现滴.
打开终端,输入:
1
Gson使用一(Gson)
eksliang
json gson
转载请出自出处:http://eksliang.iteye.com/blog/2175401 一.概述
从结构上看Json,所有的数据(data)最终都可以分解成三种类型:
第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"ickes"这个字符串。
第二种类型是序列(sequence),又叫做数组(array)
android点滴4
gundumw100
android
Android 47个小知识
http://www.open-open.com/lib/view/open1422676091314.html
Android实用代码七段(一)
http://www.cnblogs.com/over140/archive/2012/09/26/2611999.html
http://www.cnblogs.com/over140/arch
JavaWeb之JSP基本语法
ihuning
javaweb
目录
JSP模版元素
JSP表达式
JSP脚本片断
EL表达式
JSP注释
特殊字符序列的转义处理
如何查找JSP页面中的错误
JSP模版元素
JSP页面中的静态HTML内容称之为JSP模版元素,在静态的HTML内容之中可以嵌套JSP
App Extension编程指南(iOS8/OS X v10.10)中文版
啸笑天
ext
当iOS 8.0和OS X v10.10发布后,一个全新的概念出现在我们眼前,那就是应用扩展。顾名思义,应用扩展允许开发者扩展应用的自定义功能和内容,能够让用户在使用其他app时使用该项功能。你可以开发一个应用扩展来执行某些特定的任务,用户使用该扩展后就可以在多个上下文环境中执行该任务。比如说,你提供了一个能让用户把内容分
SQLServer实现无限级树结构
macroli
oracle sql SQL Server
表结构如下:
数据库id path titlesort 排序 1 0 首页 0 2 0,1 新闻 1 3 0,2 JAVA 2 4 0,3 JSP 3 5 0,2,3 业界动态 2 6 0,2,3 国内新闻 1
创建一个存储过程来实现,如果要在页面上使用可以设置一个返回变量将至传过去
create procedure test
as
begin
decla
Css居中div,Css居中img,Css居中文本,Css垂直居中div
qiaolevip
众观千象 学习永无止境 每天进步一点点 css
/**********Css居中Div**********/
div.center {
width: 100px;
margin: 0 auto;
}
/**********Css居中img**********/
img.center {
display: block;
margin-left: auto;
margin-right: auto;
}
Oracle 常用操作(实用)
吃猫的鱼
oracle
SQL>select text from all_source where owner=user and name=upper('&plsql_name');
SQL>select * from user_ind_columns where index_name=upper('&index_name'); 将表记录恢复到指定时间段以前
iOS中使用RSA对数据进行加密解密
witcheryne
ios rsa iPhone objective c
RSA算法是一种非对称加密算法,常被用于加密数据传输.如果配合上数字摘要算法, 也可以用于文件签名.
本文将讨论如何在iOS中使用RSA传输加密数据. 本文环境
mac os
openssl-1.0.1j, openssl需要使用1.x版本, 推荐使用[homebrew](http://brew.sh/)安装.
Java 8
RSA基本原理
RS