五分钟JAVA代码教会你:FFmpeg实现视频试看

  • 1. 业务场景
  • 2. 实现思路
  • 3. FFmpeg开源框架介绍
  • 4. Centos7环境实现
    • 4.1 官网下载并上传Linux
    • 4.2 解压安装
    • 4.2 Java调用ffmpeg视频截图
    • 4.3 效果展示
    • 4.4 整合到项目中
  • 5. 技术点分析

1. 业务场景

随着知识付费时代的到来,现在在线学习平台如雨后春笋般到来,各种大大小小的公司都在开发在线学习平台,因此会产生如下需求:课程视频试看功能

windows版本请点击这里:
五分钟代码教会你:JAVA实现视频试看功能(window版本)

PS:(本博客使用到的代码,ffmpeg安装包,cmd命令行工具都会打包放在↓↓↓↓下面附件中,供大家下载参考。)

点击下载FFmpegDemo

2. 实现思路

当平台用户上传自己的课程后,服务器对该课程视频进行截取一小段进行存储(例如截取开头30秒视频内容作为试看内容)。因此,用户上传视频后,经过服务器的处理产生了2个视频(1.原视频 2.试看视频)。普通用户访问该视频则播放试看视频,付费用户访问该视频则播放原视频。

3. FFmpeg开源框架介绍

此处使用Java调用FFmpeg处理视频音频,通过在系统中手动安装FFmpeg,然后执行命令进行调用的方式来进行实现。

FFmpeg官网:http://ffmpeg.org/
(FFmpeg自述:转换视频音频变得如此简单!)

4. Centos7环境实现

4.1 官网下载并上传Linux

在http://ffmpeg.org/download.html#releases下载linux版本的压缩包ffmpeg-4.2.4.tar.bz2,如下图:

使用工具把下载的FFmpeg压缩包上传打linux,此处我使用SecureCRT进行上传:

4.2 解压安装

1.进入安装目录/usr/ffmpeg,如下图:

解压压缩包,使用tar -jxvf ffmpeg-4.2.4.tar.bz2,如果报错,如下图:

2.出现上图问题,则安装bzip2即可
提示:bzip2:无法exec:没有那个文件或目录
原因:需要安装bzip2包
解决:yum install -y bzip2

3.安装成功后,则可以成功执行tar -jxvf ffmpeg-4.2.4.tar.bz2,如下图:

4.进入到解压目录下,安装yasm,如下图:

如果遇到提示,则选"y",如下图:

5.安装完毕后执行命令:

./configure --enable-shared --prefix=/usr/ffmpeg


6.执行make命令,此处我等了半个钟(耐心等待,,,,)

7.执行make install命令(安装),如下图

8.修改文件/etc/ld.so.conf

[root@vmsp ffmpeg-4.2.4]# vi /etc/ld.so.conf

添加 /usr/ffmpeg/lib/,如下图:

9.执行ldconfig使其生效

[root@vmsp ffmpeg-4.2.4]# ldconfig

10.配置环境变量

使用vi /etc/profile 命令打开profile文件,在文件末添加环境变量:

PATH=$PATH:/usr/ffmpeg/bin
export PATH

执行source /etc/profile使其生效

11. 查看配置是否成功

4.2 Java调用ffmpeg视频截图

此处我提供了一个demo,大家可自行封装成工具方法,在项目中进行调用。

/*** @Author : zhangS* @Date :2020-08-18*/
public class ExeclLinuxCMD {/*** 根据名称截取目标视频,生成试看视频* @param timeLength 截取时长* @param oldVideoName 原视频名* @param newVideoName 试看视频名称* @return*/public static Object exec(Integer timeLength,String oldVideoName,String newVideoName) {String cmd = "ffmpeg -ss 0:0:0 -t 0:0:"+timeLength+" -i  /usr/ffmpeg/"+oldVideoName+" -vcodec copy -acodec copy /usr/ffmpeg/"+newVideoName;try {String[] cmdA = { "/bin/sh", "-c", cmd };Process process = Runtime.getRuntime().exec(cmdA);LineNumberReader br = new LineNumberReader(new InputStreamReader(process.getInputStream()));StringBuffer sb = new StringBuffer();String line;while ((line = br.readLine()) != null) {System.out.println(line);sb.append(line).append("\n");}return sb.toString();} catch (Exception e) {e.printStackTrace();}return null;}public static void main(String[] args) {//String netsString = exec("netstat -nat|grep -i 80").toString();exec(50,"test.mp4","test2.mp4");System.out.println("==========execute success=============");}}

4.3 效果展示

当用户上传视频后,服务器通过调用ffmpeg进行视频截取生成试看视频,如下图:

4.4 整合到项目中

用户通过后台上传视频,然后通过FFmpeg生成2份。页面只需对用户进行业务判断,然后播放对应视频:

播放试看视频:

播放完整视频:

5. 技术点分析

本博客主要针对视频试看功能进行dem编写,我也会提供windows下的视频截取操作,方便其他开发者遇到视频试看的开发场景时,可以用来参考的一种解决方案。
FFmpeg框架还有许多其他的流媒体处理功能,此处重点介绍对视频的截取方式的实现。本博客采用在系统中手动安装FFmpeg,然后Java直接执行命令行的方式进行实现。

五分钟JAVA代码教会你:FFmpeg实现视频试看(Centos7版本)相关推荐

  1. 五分钟JAVA代码教会你:FFmpeg实现视频试看(window版本)

    五分钟JAVA代码教会你:FFmpeg实现视频试看 1. 业务场景 2. 实现思路 3.FFmpeg开源框架介绍 4. windows环境实现 4.1 windows安装FFmpeg 4.1.1 下载 ...

  2. phantomjs的使用+Java代码+依赖js(兼容Linux和windows版本)

    1.  在使用phantomjs的时候需要下载phantomjs,网上有window版本和Linux版本.将phantomjs放在Linux上的指定位置之后(如下面的/home/tpl/phantom ...

  3. java调用ffmepg_java调用ffmpeg施行视频转换

    java调用ffmpeg执行视频转换 用java小例题说明更直观:(可以直接编译运行) 环境我在windows平台下测试的... 需要在e:\下有ffmpeg.exe;mencoder.exe;drv ...

  4. Java代码获取网络和本地视频时长等信息

    目标 最近项目中需要对上传的本地视频和从其他服务器拷贝的视频进行校验功能,校验主要包括视频的时长,大小,格式等信息,那么如何获取这些信息呢? 思路 本地视频,从过文件流读取,再通过FFMpeg.exe ...

  5. 五分钟学Java:为什么不应该使用Java的原始类型?

    在逛 Stack Overflow 的时候,发现了一些访问量像熊耳山一样高的问题,比如说这个:为什么不应该使用Java的原始类型?访问量足足有 205K+,这不得了啊!说明有很多很多的程序员被这个问题 ...

  6. 【机器学习】K近邻算法(K-NearestNeighbors , KNN)详解 + Java代码实现

    文章目录 一.KNN 基本介绍 二.KNN 核心思想 三.KNN 算法流程 四.KNN 优缺点 五.Java 代码实现 KNN 六.KNN 改进策略 一.KNN 基本介绍 邻近算法,或者说K最邻近(K ...

  7. javaweb 图书管理系统完整代码_看一名Java开发人员以红队思维五分钟审计一套代码(续)...

    前言 上篇文章的发布引起了很多读者的浏览,有很多读者也催更希望读到续集,作者也收获到读者的鼓励,说明这条路线对大家有帮助,是有意义的.所以,今天作者将继续阐述在审计Java代码时的思路. 概述 上篇文 ...

  8. Java菜鸟起飞日记-每天五分钟(Hello World)

    Today,沈叔的Java菜鸟起飞日记-每天五分钟就正式开博了 其实本来是没有打算写这样一个东西的,不过就近来发现自己的学习状态存在很大的问题,很多东西都开始遗忘,于是乎,为了证明自己学过,还是用这样 ...

  9. 如何用java代码调用ffmpeg进行视频转码

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/lushizhuo9655/articl ...

最新文章

  1. R.drawable 转 bitmap
  2. Leangoo看板工具做单团队敏捷开发
  3. Delphi 的绘图功能[10] - TFONT 类
  4. SQL 数据库远程备份 语句
  5. 计算机结构优化,计算机结构与程序优化.ppt
  6. 【CodeForces - 1042B】Vitamins(去重方法,二进制或stlmap,水题)
  7. 查看硬件配置的Linux命令,LINUX 查看硬件配置命令的教程
  8. android tv的冷启动,YunOS智能电视操作系统——10秒快速冷启动开机
  9. 分享20佳移动应用程序开发框架
  10. Android opencv 检测屏幕是否有坏点/检测一个颜色是否有杂点
  11. 012 外接功放喇叭模块
  12. direction和unicode-bidi
  13. 消费者心声:我手机的镜头已经够好了,什么时候给我防防水?
  14. OpenGL(5)Texture - 两张图片
  15. 中国人民大学与加拿大女王大学金融硕士-作为金融人你深知,投资学习是一本万利的
  16. 自己做项目时整理的上传Excel表格
  17. (第六天)学习Python的元组,字典,集合,公共操作
  18. 高灵敏度全级霍尔开关AH462替代霍尼韦尔HAL248应用于便携式果汁机
  19. 如何在Visio中插入公式的两种方法(WPS+Mathtype插入)
  20. 强大的Java前台后台开发工具

热门文章

  1. 转换并压缩视频的小技巧
  2. CAD绘图技巧:快速测量CAD图纸中图形的面积与周长
  3. 百度2012年新进本科技术类员工培训教材ajax篇
  4. RobotFramework自动化测试各类库关键字整理
  5. 智能合约BSC添加流动性
  6. 耳机接口pin脚定义
  7. 有转正机会!阿里达摩院多模态理解组招收研究型实习生
  8. 2位数码管秒表c语言程序,利用定时器实现2位数码管秒表0到99循环
  9. 绝对值不等式6个基本公式
  10. ios中三种随机数方法