一、大致步骤:

  1. 准备三个视频文件作为推流的素材,例如 video1.mp4, video2.mp4, video3.mp4。

  1. 安装 JDK 和 Maven,如果你还没有的话。

  1. 使用 Maven 创建一个 java 项目,并添加 ffmpeg-cli-wrapper 这个依赖,用于调用 ffmpeg 命令。例如,在 pom.xml 文件中添加:

<dependency><groupId>net.bramp.ffmpeg</groupId><artifactId>ffmpeg-cli-wrapper</artifactId><version>0.6.2</version></dependency>
  1. 编写一个 java 类,使用 FFmpegExecutor 类来执行 ffmpeg 命令将视频文件推流到 B 站直播间的 rtmp 地址。为了实现无缝循环推流,需要使用 concat 协议来合并视频文件,并使用 stream_loop 参数来设置循环次数。例如:

import net.bramp.ffmpeg.FFmpeg;
import net.bramp.ffmpeg.FFmpegExecutor;
import net.bramp.ffmpeg.builder.FFmpegBuilder;publicclassPushStream {publicstaticvoidmain(String[] args)throws Exception {// 获取三个视频文件名Stringvideo1="video1.mp4";Stringvideo2="video2.mp4";Stringvideo3="video3.mp4";// 获取B站直播间的rtmp地址和密钥Stringrtmp_url="rtmp://txy.live-send.acg.tv/live-txy/";Stringrtmp_key="xxxxxx";// 创建FFmpeg对象FFmpegffmpeg=newFFmpeg("ffmpeg");// 创建FFmpegBuilder对象,设置推流参数FFmpegBuilderbuilder=newFFmpegBuilder().setInput("concat:" + video1 + "|" + video2 + "|" + video3) // 输入文件(合并).overrideOutputFiles(true) // 覆盖输出文件.addOutput(rtmp_url + rtmp_key) // 输出地址.setFormat("flv") // 输出格式.setVideoCodec("copy") // 视频编码器.setAudioCodec("copy") // 音频编码器.addExtraArgs("-stream_loop", "-1") // 设置循环次数(-1表示无限).done();// 创建FFmpegExecutor对象,执行命令FFmpegExecutorexecutor=newFFmpegExecutor(ffmpeg);executor.createJob(builder).run();}
}
  1. 使用定时任务工具,如 Quartz 或 ScheduledExecutorService ,来定时启动 java 程序。例如,在 java 类中添加:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;publicclassPushStream {publicstaticvoidmain(String[] args)throws Exception {// 创建一个定时任务线程池ScheduledExecutorServiceservice= Executors.newScheduledThreadPool(1);// 定义一个推流任务类classPushTaskimplementsRunnable {@Overridepublicvoidrun() {try {// 执行推流逻辑(省略)System.out.println("Pushing stream...");} catch (Exception e) {e.printStackTrace();}}}// 每隔24小时执行一次推流任务(第一次延迟10秒)service.scheduleAtFixedRate(newPushTask(), 10, 24 * 60 * 60, TimeUnit.SECONDS);}

二、ffmpeg-cli-wrapper

是一个 java 库,用于在 java 程序中调用 ffmpeg 命令。它提供了一些类和方法,让你可以方便地构建和执行 ffmpeg 命令,而不需要直接操作字符串或进程。它还支持异步执行和进度监听。

要使用这个库,你需要先安装 ffmpeg 在你的系统上,并确保它在你的 PATH 环境变量中。然后,你可以使用 Maven 或 Gradle 来添加这个库的依赖到你的 java 项目中。例如,在 pom.xml 文件中添加:

<dependency><groupId>net.bramp.ffmpeg</groupId><artifactId>ffmpeg-cli-wrapper</artifactId><version>0.6.2</version></dependency>

接下来,你可以使用 FFmpeg 类来创建一个 ffmpeg 对象,并指定 ffmpeg 的路径(如果不指定,默认为 “ffmpeg”)。例如:

FFmpegffmpeg=newFFmpeg("/path/to/ffmpeg");

然后,你可以使用 FFmpegBuilder 类来构建一个 ffmpeg 命令,设置输入文件、输出文件、格式、编码器、过滤器等参数。例如:

FFmpegBuilderbuilder=newFFmpegBuilder().setInput("input.mp4")     // 输入文件.overrideOutputFiles(true) // 覆盖输出文件.addOutput("output.avi")   // 输出文件.setFormat("avi")        // 输出格式.setVideoCodec("libxvid")     // 视频编码器.setVideoFrameRate(24, 1)     // 视频帧率.setVideoResolution(640, 480) // 视频分辨率.setAudioCodec("libmp3lame")   // 音频编码器.setAudioChannels(2)          // 音频声道数.setAudioSampleRate(44100)    // 音频采样率.done();

最后,你可以使用 FFmpegExecutor 类来执行这个命令,并获取返回值或异常。例如:

FFmpegExecutorexecutor=newFFmpegExecutor(ffmpeg);// 同步执行命令并等待完成(阻塞)
executor.createJob(builder).run();// 异步执行命令并返回 Future(非阻塞)
Future<?> future = executor.createJob(builder).runAsync();// 异步执行命令并添加监听器(非阻塞)
executor.createJob(builder).addListener(newProgressListener() {@Overridepublicvoidprogress(Progress progress) {System.out.println(progress);}}).runAsync();

java实现24小时无人直播相关推荐

  1. 如何基于ChatGPT+Avatar搭建24小时无人直播间

    0 前言 最近朋友圈以及身边很多朋友都在研究GPT开发,做了各种各样的小工具小Demo,AI工具用起来是真的香!在他们的影响下,我也继续捣鼓GPT Demo,希望更多的开发者加入一起多多交流. 上一篇 ...

  2. 秘笈分享! 24 小时无人自习室为什么这么火?

    01 内卷升级,无人自习室需求蓝海 "预计2020中国付费自习室市场规模将达167.47亿元,2022年将接近400亿元." 数据来源:艾媒数据中心 data.iimedia.cn ...

  3. Java获取24小时之前的时间点

    Java 获取24小时之前的时间点 直接上代码 import java.text.DateFormat; import java.text.SimpleDateFormat; import java. ...

  4. 阿里社交软件“点点虫”推“24小时”视频直播功能

    月6日消息,主打阅后即焚的阿里社交软件"点点虫"发布新版本,推出"24小时"视频直播功能,提供朋友间及达人圈的图片和视频共享服务,所有内容只能在24小时内重复播 ...

  5. AI应用说 | 「虫口夺粮」的害虫识别还是牛场24小时无人监控,AI+农业话题咱们唠一唠...

    关注公众号,发现CV技术之美 写在篇头:是时候,关注智慧农业这条"难且正确"的道路了. 在不断变化.机遇与危机并存的商业社会中,农业一直算不上"热点".但伴随国 ...

  6. 如何实现害虫识别和牛场24小时无人监控?AI+农业话题咱们唠一唠

    写在篇头:是时候,关注智慧农业这条"难且正确"的路了. 在不断变化.机遇与危机并存的商业社会中,农业一直算不上"热点".但伴随国务院下发的关于农业的一号文件,及 ...

  7. java获取24小时制时间格式_java 日期格式时间24小时制

    按指定格式获取时间 import java.util.*; import java.text.*; public class TestDate { public static void main(St ...

  8. Java Date 24小时制和12小时制

    /*** 关于日期的使用*/ package javaReview;import java.text.DateFormat; import java.text.ParseException; impo ...

  9. 使用树莓派进行24小时视频直播

    概述 其实做这个就是为了可以24小时去推街舞视频,如果喜欢大家可以关注下我的直播间 https://live.bilibili.com/2773758 https://www.panda.tv/984 ...

最新文章

  1. [单反八]人像三平原则
  2. 前端node 和vue开发之环境搭建
  3. bootstrap table入门例子
  4. Intellj IDEA 注册码 2018
  5. pdol链接mysql_MySQL5.7.11免安装版的安装和配置:解决MYSQL服务无法启动问题
  6. BCS冬奥主题活动日:奥运网络安全成全球关注焦点
  7. Linux网络设备驱动程序
  8. mPaas集成项目、新建mPaaS项目
  9. CCNA学习指南(第五版)下载地址
  10. cad工具箱详细讲解_AutoCAD学院派工具箱(XCAD)使用教程(图文解说)
  11. java jsonproperty_将多个JSON字段映射到单个Java字段
  12. isPostback 的原理及作用(非常简单)
  13. 如何使用多种方法在 Mac 上截屏?
  14. mac关闭谷歌自动更新
  15. FPGA作为电力电子设备控制器的实践
  16. 计算机在保险的应用,浅谈计算机信息系统在医疗保险中的应用
  17. google-services简介
  18. android 生成bks_Android 添加 证书(pem,crt,p12,bks,jks)到 keystore.bks
  19. 2023 新版 微信公众号无限回调系统源码
  20. win10右键 发送到 选项消失解决办法

热门文章

  1. 专业英语(一) · NIIT教材中文总结系列①
  2. Latex参考文献格式记录
  3. 悬浮窗天气插件html,简单易懂的天气插件(代码分享)
  4. 最近使用抢土狗机器人被杀了 bot killed,过程分析,及解决办法。
  5. 极限、可导、可微的关系梳理
  6. 仿网易新闻客户端UI界面小Demo
  7. 金雅拓在洛杉矶国际机场进行生物识别登机试验
  8. win10远程ubuntu18.04.6 LTS
  9. 怎么开启MIUI9系统的Root权限
  10. linux+取当天日期文件夹,Linux shell脚本:创建一个包含当前日期名称的文件夹