ffmpeg系列

Java使用FFmpeg(自定义cmd)
Java使用FFmpeg(自定义cmd)系列之获取视频/音频时长
Java使用FFmpeg(自定义cmd)系列之官方API获取视频/音频信息(File方式)
Java使用FFmpeg(自定义cmd)系列之官方API获取视频/音频信息(URL方式)
Java使用FFmpeg(自定义cmd)系列之获取视频/音频时长(File文件方式)
Java使用FFmpeg(自定义cmd)系列之mp4转hsl编码m3u8
Java使用FFmpeg(自定义cmd)系列之MP4 转码 HLS m3u8 AES128 加密

使用ffmpeg 自定义的cmd命令MP4 转码 HLS m3u8 AES128 加密,废话不多说,代码说话:
不用我们安装FFmpeg,项目自动依赖ffmpeg,已经有开源实现:https://github.com/a-schild/jave2

下面的代码基于:3.1.1 version

maven坐标:

<dependency><groupId>ws.schild</groupId><artifactId>jave-all-deps</artifactId><version>3.1.1</version>
</dependency>

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;/*** 优点:各种浏览器,手机,小程序都能兼容,通用性很好。缺点:公开的算法,还原也十分简单,有很多影音嗅探工具能直接下载还原,加密效果很弱,防小白可以。①新建一个记事本,取名enc.key(名字可以随便取),添加16个字节的自定义的AES128加密的密匙,如:hsjissmart123456②新建一个文件,enc.keyinfo,添加如下内容(注意:enc.keyinfo里面的enc.key路径绝对路径)http://localhost:8080/enc.keyxxx\enc.key③这里需要把enc.key和enc.keyinfo放在同一目录下* @Description:(MP4 转码 HLS m3u8 AES128 加密)   * @author: HeShengjin* @date:   2021年6月28日 上午11:00:26    * @Copyright:*/
public class FfmpegCmdHls4M3u8EncTest { //加密文件路径,如:enc.key、enc.keyinfo、m3u8文件、ts文件等private static String ENC_DIRECTORY = "I:\\test-ffmpeg\\enc";//执行成功0,失败1private static int CODE_SUCCESS = 0;private static int CODE_FAIL = 1;//将荣耀视频测试.MP4 --> HLS m3u8 AES128 加密(//注意绝对路径///)//视频路径:I:\\test-ffmpeg\\荣耀视频测试.mp4//$encInfoPath、$encPath是需要替换的ENC_DIRECTORY文件路径private static String cmd_enc = " -y -i I:\\test-ffmpeg\\荣耀视频测试.mp4 -hls_time 12 -hls_key_info_file $encInfoPath -hls_playlist_type vod -hls_segment_filename $encPath\\encfile_12s_%3d.ts $encPath\\荣耀视频测试_HLS.m3u8 ";/*** 第一步:创建enc.keyinfo文件* 第二步:HLS m3u8 AES128 加密* @param: @param args      * @return: void      * @throws*/public static void main(String[] args) {//异步执行//第一步:创建enc.keyinfo文件等CompletableFuture<String> completableFutureTask = CompletableFuture.supplyAsync(() ->{  //创建enc.keyinfo文件,返回文件地址String encKeyInfoFilePath = null;//目录encFile encFilePathDir = new File(ENC_DIRECTORY);if (!encFilePathDir.exists()) {// 判断目录是否存在     encFilePathDir.mkdir();   }//写入文件内容enc.keyBufferedWriter bwkey = null;//写入文件内容enc.keyinfoBufferedWriter bwkeyInfo = null;try{//文件String encKeyFilePath = ENC_DIRECTORY + "\\enc.key";encKeyInfoFilePath = ENC_DIRECTORY + "\\enc.keyinfo";File fileKey = new File(encKeyFilePath);File fileKeyInfo = new File(encKeyInfoFilePath);//初始化存在删除if(fileKey.exists()) {fileKey.delete();}if(fileKeyInfo.exists()) {fileKeyInfo.delete();}bwkey = new BufferedWriter(new FileWriter(fileKey));bwkeyInfo = new BufferedWriter(new FileWriter(fileKeyInfo));//写入key--自定义的AES128加密的密匙bwkey.write("hsjissmart123456");//写入keyInfo//密匙URL地址,可以对该URL鉴权bwkeyInfo.write("http://localhost:8000/enc.key");bwkeyInfo.newLine();//全路径,绝对路径bwkeyInfo.write(encKeyFilePath);bwkey.flush();bwkeyInfo.flush();}catch(IOException e){e.printStackTrace();//恢复默认encKeyInfoFilePath = null;} finally{try {//一定要关闭文件bwkey.close();bwkeyInfo.close();} catch (IOException e) {e.printStackTrace();}}return encKeyInfoFilePath;}, ThreadPoolExecutorUtils.pool);//异步执行//第二步:HLS m3u8 AES128 加密CompletableFuture<Integer> completableFutureTaskHls = completableFutureTask.thenApplyAsync((String encKeyInfoFilePath)->{if(encKeyInfoFilePath == null || encKeyInfoFilePath.length() == 0) {return CODE_FAIL;}System.out.println("第一步:创建enc.keyinfo文件,成功!");Integer codeTmp =  cmdExecut(cmd_enc.replace("$encInfoPath", encKeyInfoFilePath).replace("$encPath", ENC_DIRECTORY));if(CODE_SUCCESS != codeTmp) {return CODE_FAIL;}System.out.println("第二步:HLS m3u8 AES128 加密,成功!");return codeTmp;}, ThreadPoolExecutorUtils.pool);//获取执行结果//code=0表示正常try {System.out.println(String.format("获取最终执行结果:%s", completableFutureTaskHls.get() == CODE_SUCCESS ? "成功!" : "失败!"));} catch (InterruptedException e) {Thread.currentThread().interrupt();e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}/*** * @Description: (执行ffmpeg自定义命令)   * @param: @param cmdStr* @param: @return      * @return: Integer      * @throws*/public static Integer cmdExecut(String cmdStr) {//code=0表示正常Integer code  = null;      FfmpegCmd ffmpegCmd = new FfmpegCmd();                        /*** 错误流*/InputStream errorStream = null;        try {//destroyOnRuntimeShutdown表示是否立即关闭Runtime//如果ffmpeg命令需要长时间执行,destroyOnRuntimeShutdown = false//openIOStreams表示是不是需要打开输入输出流://         inputStream = processWrapper.getInputStream();//           outputStream = processWrapper.getOutputStream();//         errorStream = processWrapper.getErrorStream();ffmpegCmd.execute(false, true, cmdStr);errorStream = ffmpegCmd.getErrorStream();        //打印过程int len = 0;while ((len=errorStream.read())!=-1){System.out.print((char)len);}//code=0表示正常code = ffmpegCmd.getProcessExitCode();} catch (IOException e) {e.printStackTrace();} finally {//关闭资源ffmpegCmd.close();}//返回return code;}}



效果:

播放:

gitee:https://gitee.com/hsjjsh123/test-ffmpeg

Java使用FFmpeg(自定义cmd)系列之MP4 转码 HLS m3u8 AES128 加密相关推荐

  1. java计算机毕业设计课堂互动应答系统mp4源码+mysql数据库+系统+lw文档+部署

    java计算机毕业设计课堂互动应答系统mp4源码+mysql数据库+系统+lw文档+部署 java计算机毕业设计课堂互动应答系统mp4源码+mysql数据库+系统+lw文档+部署 本源码技术栈: 项目 ...

  2. cmd合并多个ts文件,ffmpeg快速转ts为mp4文件,通过m3u8合并文件

    1.如何合并多个ts文件 进入目录执行如下cmd命令即可 copy /b *.ts new.ts 2.如何将ts转为mp4 ffmpeg下载 官网:https://ffmpeg.org/ github ...

  3. Java使用FFmpeg(自定义cmd)系列之获取视频/音频时长(File文件方式)

    ffmpeg系列 Java使用FFmpeg(自定义cmd) Java使用FFmpeg(自定义cmd)系列之获取视频/音频时长 Java使用FFmpeg(自定义cmd)系列之官方API获取视频/音频信息 ...

  4. Java 利用ffmpeg工具实现视频MP4转m3u8

    Java 利用ffmpeg工具实现视频MP4转m3u8(一) 前言 (一)ffmpeg工具转码 1.如何安装ffmpeg工具 2.如何使用ffmpeg工具进行视频转码 (二)播放m3u8文件 1.vi ...

  5. java调用ffmpeg把rtsp视频流保存为MP4文件

    前言:最近需要把rtsp的视频流保存为MP4文件(就是录制直播流).刚开始用的javacv的FFmpegFrameGrabber和FFmpegFrameRecorder,但是声音流和视频流无法调整,声 ...

  6. Java使用FFmpeg实现mp4转m3u8

    Java使用FFmpeg实现mp4转m3u8 前言 FFmpeg M3U8 一.需求及思路分析 二.安装FFmpeg 1.windows下安装FFmpeg 2.linux下安装FFmpeg Ubunt ...

  7. ffmpeg系列之mp4与ts格式转换

    ffmpeg系列之mp4与ts格式转换 1. M3U 协议解析 1.1.Tag说明 2.HLS 与 M3U8 3.通过ffmpeg进行转换 3.1. mp4格式转换为ts格式 3.2. ts格式拼接命 ...

  8. 流媒体方案,技术开源项目,包含Java调用FFMpeg(FFCH4J),推拉流服务器,nginx-http-flv-module,ckplayer,Flv.js,EasyPlayer.js集成

    文章目录 streaming_media 介绍 ckplayer拉流播放 软件介绍 功能介绍 软件架构 安装教程 使用说明 EasyPlayer.js拉流播放 简介 功能说明 集成使用示例 普通集成 ...

  9. ffmpeg入门及java操作ffmpeg对视频进行处理

    一.ffmpeg 1.简介 FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非 ...

  10. mysql+视频文件转成流_详解java调用ffmpeg转换视频格式为flv

    详解java调用ffmpeg转换视频格式为flv 注意:下面的程序是在Linux下运行的,如果在windows下rmvb转换成avi会出现问题,想成功需要下载下个drv43260.dll东西放到C:W ...

最新文章

  1. Vim as Python IDE on windows(转)
  2. maven overlay 扩展
  3. 头插法、尾插法的理解
  4. Open3D编译安装
  5. 盘点三个JavaScript案例——实现限时秒杀、定时跳转、改变盒子大小
  6. 使不安全变得更加安全
  7. vb怎么判断整数_VB数学函数大全
  8. python类2继承-抽象-多态
  9. JAVA锁之可重入锁和递归锁及示例代码
  10. ATAC-seq以及相关技术(DNase-seq,MNase-seq,NOMe-seq)的发展
  11. 如何成都报计算机考试,成都学院2017上半年计算机考试报名通知
  12. SDOI2018 旧试题
  13. 最新消息!Cloudera 全球发行版正式集成 Apache Flink
  14. MySQL出现Waiting for table metadata lock的场景浅析
  15. java 多线程 银行排队_3.采用多线程模拟银行排队叫号
  16. java调用录像_java调用摄像头拍照录像
  17. 提问的智慧 | 推荐好文
  18. 【图形学】【笔记】凹多边形
  19. 2019南昌网络赛 H. The Nth Item(广义斐波那契数列求通项公式模板)(二次剩余+分块)
  20. Unity3D人物角色描边、模型描边

热门文章

  1. 设计模式七大原则——单一职责原则
  2. 流媒体/流媒体文件格式详解
  3. 数据结构与算法的重要性
  4. 港科夜闻|香港科技大学(HKUST)及香港科大智能建造实验室(HKUST BIM Lab)荣获CIC建造数码化大奖组织类最高奖项...
  5. 陕西副市长猝死,其“豪宅”爆光震惊国人
  6. Lookup Table 应用
  7. 让zheng支持activiti工作流
  8. 【书评】多姿态诗意生活--读《十四堂人生创意课》有感
  9. 使用hexo+gitee免费搭建个人博客全网最详细
  10. 主机服务器信息控制台,服务器的监控控制台