在项目中,有个需求是分享视频链接地址到微信、qq或者朋友圈,只能试看两分钟,本想着通过h5界面就能控制实现效果,代码如下,但是前端终究不是安全的,其次监听事件,如果拉播放进度条,中途停顿多次,就会出现多次弹框,对用户体验终究不是好的,因此,后面想着后端截取原视频部分视频,然后让用户播放,只要监听用户播放结束,弹框显示即可。

var audio = document.getElementById("chqrpzkgzjulberajk"); //获取视频元素id
audio.loop = false;//视频不循环播放
var time = 0;//初始化播放时间
audio.addEventListener('timeupdate', timeupdate);//设置监听事件function timeupdate(){//因为当前的格式是带毫秒的float类型的如:12.231233,所以把他转成String了便于后面分割取秒var time = audio.currentTime+"";console.log('当前播放时长'+time);    if(time > 60){if(audio.paused){alert("观看完整视频,请下载APP!");audio.pause();}}
}

查了很多资料,眼睛都要瞎了,但是没一个微博写的很详细,作为初学者基本上都不可能操作完成,经过我一个礼拜的努力,有两种实施方案。

1.通过截取视频流的方式:读取流的时候只读取一部分,但是这样就会有个问题,视频时长还是原视频时长,其次有个重要的问题,有些视频截取之后播放不了,破坏了原本的视频流。

2.通过ffmpeg工具进行截取,功能还是很强大,具体可以百度下。

ffmpeg下载(也可以去官网上下载):

windows:链接:https://pan.baidu.com/s/1EAQDkEUmh5WnaF9_qKJgcA  提取码:3v31

linux:链接:https://pan.baidu.com/s/16c7krsFOP29lj6wOMxL5mQ 提取码:x1y3

Windows 下使用代码:

 /*** 视频剪辑* @param file 源文件* @param outFilePath 输出文件路径* @return* @throws Exception*/public static String getPartVideoForWindows(File file ,String outFilePath){String filePaths = PathUtil.getFilePath(outFilePath);//获取输出视频绝对地址String fileName = DateUtil.getRanddom() + ".mp4";//生成输出视频文件格式,也可以用源文件的格式String fileFinalPath = filePaths + fileName;//完整的输出视频绝对路径// 创建一个List集合来保存转换视频文件为flv格式的命令List<String> convert = new ArrayList<String>();convert.add(PathUtil.getFilePath("/tools/ffmpeg.exe")); // 添加转换工具路径convert.add("-ss");//起始时间convert.add("00:00:10.0");convert.add("-i"); // 添加参数"-i",该参数指定要转换的文件convert.add(file.getAbsolutePath()); // 添加要转换格式的视频文件的路径convert.add("-to");//结束时间convert.add("00:02:00");//convert.add("-c");//操作方式convert.add("copy");convert.add(fileFinalPath);convert.add("-y"); // 添加参数"-y",该参数指定将覆盖已存在的文件ProcessBuilder builder = new ProcessBuilder();try {builder.command(convert);builder.start();return outFilePath+fileName;} catch (Exception e) {System.out.println(e);return null ;}}

linux 下使用代码:

/*** 执行linux 系统的ffpemg* @param file 视频源文件* @param outFilePath 输出视频地址*/
public static String linuxCommend(File file ,String outFilePath) {String filePaths = PathUtil.getFilePath(outFilePath);//获取输出视频绝对地址String fileName = DateUtil.getRanddom() + ".mp4";//生成输出视频文件格式,也可以用源文件的格式String fileFinalPath = filePaths + fileName;//完整的输出视频绝对路径String command = "ffmpeg -ss 00:00:10.0 -i "+file.getAbsolutePath()+" -to 00:02:00 -c copy "+fileFinalPath+" -y";//剪辑命令try {Runtime rt = Runtime.getRuntime();Process proc = rt.exec(command);InputStream stderr = proc.getErrorStream();InputStreamReader isr = new InputStreamReader(stderr);BufferedReader br = new BufferedReader(isr);String line = null;while ((line = br.readLine()) != null){System.out.println(line);}int exitVal = proc.waitFor();System.out.println("Process exitValue: " + exitVal);return outFilePath+fileName;} catch (IOException e) {System.out.println(e.getMessage());} catch (InterruptedException e) {System.out.println(e.getMessage());}return null ;
}

但是linux 系统下,是使用不了ffmpeg.exe,必须要安装之后才能使用 ffmpeg 这个命令,文章如下

linux 系统下安装ffmpeg

使用ffmpeg进行简单的视频编辑命令

java项目中使用ffmpeg剪辑部分视频相关推荐

  1. Java项目中利用钉钉机器人Webhook向钉钉群推送告警通知

    今天来讲一下 Java项目中利用钉钉机器人Webhook向钉钉群推送告警通知 一.配置钉钉群 1.新建一个接收通知的钉钉群 如下图,创建一个接收通知的钉钉群 选择项目群,点创建 输入群名称,右侧选择群 ...

  2. Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决...

    问题描述: mac笔记本本身会自带几个python版本,比如python2.7版本,我没有改动mac默认的python版本,只是安装了python3.7版本. 使用Pycharm开发Python项目没 ...

  3. java聊天室小程序论文_在Java项目中利用continue与break制作一个聊天室小程序

    在Java项目中利用continue与break制作一个聊天室小程序 发布时间:2020-12-08 16:03:27 来源:亿速云 阅读:98 作者:Leah 在Java项目中利用continue与 ...

  4. java项目怎么定义异常_在Java项目中如何实现自定义异常

    在Java项目中如何实现自定义异常 发布时间:2020-11-11 15:41:32 来源:亿速云 阅读:77 作者:Leah 这篇文章将为大家详细讲解有关在Java项目中如何实现自定义异常,文章内容 ...

  5. XML在JAVA项目中的作用

    java项目中,xml文件一般都是用来存储一些配置信息 一般的编程, 多数用来存储配置信息 . 拿JDBC来说,可以把数据库连接字符串写到xml,如果要修改数据源,只需要改xml就可以了,没必要再去重 ...

  6. Redis学习笔记之二 :在Java项目中使用Redis

    成功配置redis之后,便来学习使用redis.首先了解下redis的数据类型. Redis的数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set( ...

  7. redis java驱动_Redis学习笔记之二 :在Java项目中使用Redis

    成功配置redis之后,便来学习使用redis.首先了解下redis的数据类型. Redis的数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set( ...

  8. Ant在Java项目中的使用(一眼就看会)

    参考:http://www.cnblogs.com/zhengqiang/p/5557155.html Ant是跨平台的构建工具,它可以实现项目的自动构建和部署等功能.在本文中,主要让读者熟悉怎样将A ...

  9. 在Java项目中整合Scala

    Scala是一个运行在Java JVM上的面向对象的语言.它支持函数编程,在语法上比Java更加灵活,同时通过Akka库,Scala支持强大的基于Actor的多线程编程.具有这些优势,使得我最近很想在 ...

最新文章

  1. tensorflow.python.framework.errors_impl.InvalidArgumentError: 2 root error(s) found.
  2. 转换营销阵地 特步的世界杯身影
  3. 关于a标签的 href 与 onlick
  4. 高等数学下-赵立军-北京大学出版社-题解-练习8.3
  5. SpringBoot在自定义类中调用service层等Spring其他层
  6. cad万能字体_CAD图纸问号“?”的处理
  7. pb string 接收dll按值返回_JavaScript 是如何工作的:JavaScript 的共享传递和按值传递...
  8. Android开发笔记(十七)GIF动画的实现GifAnimation
  9. Alien Skin Exposure7滤镜软件功能作用
  10. tp3.2 开发规范(命名规范)
  11. Smobiler字节小程序开发指南
  12. CUDA驱动版本与运行版本不匹配问题详解
  13. python音频分析(一)绘制wav的时域频域图
  14. 深度学习笔记----拓扑结构动态变化网络(Dropout,Drop Connect, Stochastic Depth, BranchyNet,Blockdrop,SkipNet)
  15. “大众摄影”“北外亚非学院”等网站被挂马
  16. 信用,在中国究竟值多少钱?
  17. Dingo Api请求接口404?
  18. 毕业设计大全——毕业设计参考选题(Jsp+Servlet+SSM+SpringBoot)(持续更新)
  19. 建模教程_Zbrush沼泽猎人角色制作教程
  20. springmvc页面跳转错误404/找不到页面/拒绝访问

热门文章

  1. redirect重定向
  2. Python「PIL」:调整图片大小
  3. 【大数据入门核心技术-HBase】(九)Hbase协处理器coprocessor
  4. 现代电子计算机音乐制作,现代电子音乐制作利器——Alesis VI61 MIDI键盘
  5. Object.assign()的详解和用法
  6. pythonxpath判断元素是否存在_Python Lxml(objectify):检查标签是否存在
  7. Fama三因子和Carhat 四因子的介绍和计算
  8. 图像质量评价和人脸素描合成
  9. 【NLP】NLP领域的国内外专家(Greedy_AI)
  10. python Selenium爬取数据代码学习 冲!!!