java实现24小时无人直播

news/2024/11/30 0:40:04/

一、大致步骤:

  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();


http://www.ppmy.cn/news/363593.html

相关文章

【h5 video】 播放与暂停 静音与取消静音

我尝试用jQuery控制HTML5视频&#xff0c;两个视频分别在两个tab中&#xff0c;我希望点中tab后&#xff0c;该tab里的视频可以立即播放&#xff0c;而另外tab里的视频能够停止。我的代码是这样的&#xff1a; $(#playMovie1).click(function(){ $(#movie1).play(); }); 但发现…

直播平台开发过程中关于谷歌fcm推送介绍

在直播平台开发中要集成谷歌fcm,首先需要满足一下条件&#xff1a; 1、设备必须是android4.0以上&#xff0c;Google Play Services 必须是 11.2.0以上版本 2、Android SDK Manager 必须有Google Play services SDK 3、Android Studio必须是1.5以上版本 4、用户手机必须可以连得…

直播预告|谷歌 2020 校园空宣(技术类)报名正当时!

2020 上半年最值得期待的 谷歌技术类校园空宣 持续开放报名中。 跟随我们的脚步&#xff0c; 让你提前了解 谷歌中国校园人才的筛选流程与技术期望&#xff0c; 走入谷歌丰富的技术生态社群&#xff0c; 提升实力&#xff0c;稳步向前&#xff01; 线上直播 5 月 15 日 19 时 限…

webrtc直播音频无法静音

现在直播越来越火&#xff0c;然而好的直播框架代码是很重要的&#xff0c;webrtc是谷歌开源的一个直播框架&#xff0c;集成简单功能较全&#xff0c;是一个较好的选择。 然而在直播开发过程中发现一个问题&#xff0c;就是webrtc直播的声音无法静音。在调节音量的的时候就能…

Google I/O 2021 中文直播全攻略,即刻收藏

5 月 19 日凌晨 00:40 (明天晚上) Google I/O 2021 将正式开幕 今年大会以 "全线上" 形式强势回归 让您足不出户&#xff0c;享受科技盛宴 更有实时中文翻译&#xff0c;为您第一时间带来 创新科技灵感和前沿产品资讯 精彩内容不容错过 赶紧调好闹钟 准时和全球开发…

VideoJS 网页直播实现默认静音

在开发 LiveQing高性能流媒体服务器 网页直播多分屏的时候, 产品提出议建说, 能不能在多分屏的时候, 默认静音状态. 因为多分屏界面, 如果声音打开, 好多个直播画面同时发出声音太过嘈杂, 体验不好. 我表示赞同. 心想, 这个应该不难处理吧, 结果踩到一个 video-js-swf 的坑, 在…

统信操作系统 摄像头驱动程序

ubuntu: 安装 摄像头驱动 UVC 购买摄像头的时候知道了大部分摄像头不支持Linux系统。经过陶大佬的指点&#xff0c;发现可以通过安装cheese来激活Ubuntu自带的摄像头驱动&#xff08;UVC&#xff09;。 Tutorial 首先&#xff0c;查看自己要购买的摄像头是否支持 UVC驱动 。 如…

电脑用什么软件可以测试网速吗,在电脑上怎么测试网速_两种快速测试网速的方法介绍 - 驱动管家...

如果电脑安装的是最新的Windows 10系统&#xff0c;要如何测试电脑网速呢&#xff1f;Win10网速测试的问题&#xff0c;今天小编就为大家带来了2种Win10电脑网速测试方法&#xff0c;希望对电脑爱好者朋友有所参考&#xff0c;此方法同样适合XP/Win7/Win8等系统。 一、在线网速…