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

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直接执行命令行的方式进行实现。

猜你喜欢

转载自blog.csdn.net/u010312671/article/details/108113720