视频是用于记录,复制和广播移动视觉图像的电子媒体。在相关时使用更具体的标签,例如[视频编辑]用于修剪和修改视频的问题,[视频编码]用于将视频编辑为任何格式的问题,以及[视频处理]用于处理视频的相关问题过滤视频帧。
如何使用最新的MonteMedia ScreenRecorder在Java中录制屏幕?
我正在尝试使用最新的 MonteMedia ScreenRecorder 在 Java 中录制屏幕: ch.兰德斯霍费尔 org.monte.media 我正在尝试使用最新的 MonteMedia ScreenRecorder 在 Java 中录制屏幕: <dependency> <groupId>ch.randelshofer</groupId> <artifactId>org.monte.media</artifactId> <version>17.1</version> </dependency> 我的代码与我可以找到的库的使用示例类似 - 但是旧版本,因为我没有找到新版本的示例 - 所以包是不同的: import org.monte.media.math.Rational; import org.monte.media.screenrecorder.ScreenRecorder; import org.monte.media.av.Format; import org.monte.media.av.FormatKeys.MediaType; import static org.monte.media.av.codec.video.VideoFormatKeys.*; import java.awt.*; import java.io.File; import java.io.IOException; public class Screencorder { private Screencorder() {} public static ScreenRecorder startRecording(String fileName) throws IOException, AWTException { GraphicsConfiguration gc = GraphicsEnvironment .getLocalGraphicsEnvironment() .getDefaultScreenDevice() .getDefaultConfiguration(); Format fileFormat = new Format(MediaTypeKey, MediaType.FILE, MimeTypeKey, MIME_AVI); Format screenFormat = new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE, CompressorNameKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE, DepthKey, 24, FrameRateKey, Rational.valueOf(15), QualityKey, 1.0f, KeyFrameIntervalKey, (15 * 60)); Format mouseFormat = new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, ScreenRecorder.ENCODING_BLACK_CURSOR, FrameRateKey, Rational.valueOf(30)); ScreenRecorder screenRecorder = new ScreenRecorder(gc, null, fileFormat, screenFormat, mouseFormat, null, new File(fileName)); screenRecorder.start(); return screenRecorder; } public static void stopRecording(ScreenRecorder screenRecorder) throws IOException { screenRecorder.stop(); } } 运行测试: import org.junit.jupiter.api.Test; import org.monte.media.screenrecorder.ScreenRecorder; import java.time.Duration; import static org.awaitility.Awaitility.await; class ScreenRecordingTest { @Test void recordingTest() throws Exception { ScreenRecorder recorder = Screencorder.startRecording("/tmp/"); Thread.sleep(2000) Screencorder.stopRecording(recorder); } } 给我: java.io.IOException: Error no writer found for file format: Format{mimeType:video/avi,mediaType:FILE}. 我尝试了各种 JDK - 17、20 - 但没有成功。 尝试将目录更改为文件,同样的错误。 尝试了不同的 MIME 类型 - 不管怎样,都是同样的错误。 有人可以帮助如何运行它,以便它记录一个.avi吗?或其他类似电影的格式。 我希望我犯了一些明显的错误。 添加 module-info.java 并按照此处所述彻底清理 IntelliJ,使其正常工作。 here 显示了一个简单的工作示例。 总结: 您的机器上需要 Java >= 17 maven 模块的 pom.xml 有 3 个主要的 MonteMedia 依赖项: <dependencies> <dependency> <groupId>ch.randelshofer</groupId> <artifactId>org.monte.media.screenrecorder</artifactId> <version>17.1</version> </dependency> <dependency> <groupId>ch.randelshofer</groupId> <artifactId>org.monte.media</artifactId> <version>17.1</version> </dependency> <dependency> <groupId>ch.randelshofer</groupId> <artifactId>org.monte.media.swing</artifactId> <version>17.1</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.9.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest-all</artifactId> <version>1.3</version> <scope>test</scope> </dependency> </dependencies> src/main/java需要一个module.info,其中包含这些依赖项以及它们所需的一些附加依赖项+导出以在测试中使用该模块: module com.your.path.util.screen { //<= this is the maven module name too requires java.desktop; requires java.prefs; requires org.monte.media; requires org.monte.media.swing; requires org.monte.media.screenrecorder; exports com.your.path.util.screen; } 在包com.your.path.util.screen中有一个类Screencorder,它将录制电影,其中包含在start和stop方法中开始全屏录制所需的一切: package com.your.path.util.screen; import org.monte.media.av.Format; import org.monte.media.math.Rational; import org.monte.media.screenrecorder.ScreenRecorder; import java.awt.*; import java.io.File; import java.io.IOException; import java.time.Duration; import static org.monte.media.av.FormatKeys.*; import static org.monte.media.av.codec.video.VideoFormatKeys.*; public class Screencorder { private ScreenRecorder screenRecorder; public final String movieFolder; public void start() throws IOException, AWTException { GraphicsConfiguration gc = GraphicsEnvironment .getLocalGraphicsEnvironment() .getDefaultScreenDevice() .getDefaultConfiguration(); Format fileFormat = new Format(MediaTypeKey, MediaType.FILE, MimeTypeKey, MIME_AVI); Format screenFormat = new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE, CompressorNameKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE, DepthKey, 24, FrameRateKey, Rational.valueOf(15), QualityKey, 1.0f, KeyFrameIntervalKey, (15 * 60)); Format mouseFormat = new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, ScreenRecorder.ENCODING_BLACK_CURSOR, FrameRateKey, Rational.valueOf(30)); screenRecorder = new ScreenRecorder(gc, null, fileFormat, screenFormat, mouseFormat, null, new File(movieFolder)); screenRecorder.start(); } public void stop() throws IOException { screenRecorder.stop(); } public static void main(String[] args) throws IOException, AWTException, InterruptedException { Screencorder recorder = new Screencorder(); recorder.start(); Thread.sleep(Duration.ofSeconds(7).toMillis()); recorder.stop(); } public Screencorder() { if (System.getProperty("os.name").toLowerCase().startsWith("windows")) { movieFolder = System.getProperty("user.home") + File.separator + "Videos"; } else { movieFolder = System.getProperty("user.home") + File.separator + "Movies"; } File movieDir = new File(movieFolder); if (!movieDir.exists()) { movieDir.mkdirs(); } } public String getMovieFolder() { return movieFolder; } } src/test/java也需要一个module.info - 它将需要上述模块和测试库+它将打开自身以反射到junit: module com.your.path.util.screen.test { requires com.your.path.util.screen; requires org.junit.jupiter.api; requires hamcrest.all; opens com.your.path.util.screen.test to org.junit.platform.commons; } 测试包需要与主代码不同,例如com.your.path.util.screen.test,测试类放在这里 如果 IntelliJ 出现问题:按照上述方式进行清理后,模块com.your.path.util.screen需要在 模块设置 > com.your.path.util.screen > 依赖项 > check 3 MonteMedia 依赖项中选择 MonteMedia 依赖项(与pom.xml)相同 现在您可以在 IntelliJ 中运行 main() 方法以及测试。 如果需要的话,有一个非模块化的解决方案:手动编写服务文件。例如在 gradle 中: tasks { compileJava { doLast { val servicesDir = File(destinationDirectory.get().asFile, "META-INF/services") servicesDir.mkdirs() File(servicesDir, "org.monte.media.av.MovieWriterSpi").apply { writeText(listOf( "org.monte.media.avi.AVIWriterSpi", "org.monte.media.quicktime.QuickTimeWriterSpi" ).joinToString("") { "$it\n"}) } File(servicesDir, "org.monte.media.av.CodecSpi").apply { writeText(listOf( "org.monte.media.avi.codec.audio.AVIPCMAudioCodecSpi", "org.monte.media.av.codec.video.TechSmithCodecSpi" ).joinToString("") { "$it\n"}) } } } } 提供商可能需要更新以满足您的需求。
我的 Flutter 应用程序出现问题。我想以与 TikTok 的 Reels 部分相同的方式显示视频。这是我的应用程序的屏幕截图。 问题: 它包含视频卷轴,但每个视频...
在我的应用程序中,我录制了一个视频,我想将我公司的网址覆盖在该视频的右下角。我用MediaRecorder录制视频,录制没有问题,但是为了添加...
我有三个视频,我正在用 ffmpeg 连接。我想在它们之间添加一些黑框。尽管我在网上找到了一些提示,但它对我来说还没有用。我有尝试...
我正在开发一个屏幕录制应用程序,它允许用户录制他们的屏幕,我使用 websocket 将他们的字节数据实时发送到我的 FastAPI Python 服务器。字节已发送...
我想打开 .avi 文件(最好是任何视频文件),将该视频作为位图(数组)序列处理,然后将其显示在屏幕上或将其保存到文件中。 我有什么选择......
Playwright 测试成功运行,但未生成视频记录 我正在为我的 Web 应用程序运行 Playwright 测试。测试执行成功,但没有生成视频记录......
如何在前端将 Laravel Voyager 中存储的视频作为文件显示?
我想在前端显示 Laravel Voyager 存储的多个视频, 我试图通过以下方式提取通过管理员上传的视频: @foreach($videos 作为 $video) 我想在前端显示 Laravel Voyager 存储的多个视频, 我正在尝试使用以下命令提取通过管理员上传的视频: @foreach ($videos as $video) <video width="320" height="240" controls> <source src="{{ Voyager::image( $video->file) }}" type="video/mp4"> </video> @endforeach 但是不行,有人可以帮忙吗? 您可以像这样直接从存储中调用它: @foreach ($videos as $video) <video width="320" height="240" controls> <source src="{{ Storage::url($video->file) }}" type="video/mp4"> // Or <source src="{{ asset("storage/$video->file") }}" type="video/mp4"> </video> @endforeach @php // 解码 JSON 字段 $fileInfo = json_decode($model->file_column, true); @endphp @if ($fileInfo && isset($fileInfo[0]['download_link'])) 您的浏览器不支持视频标签。 @endif
我有一个带有装饰性自动播放视频的网站,发现它可以防止播放时屏幕锁定。虽然这在大多数情况下可能是可取的,但在这种特殊情况下,我希望屏幕锁定......
如何禁用 html5 视频自动播放? 我尝试过的: 如何禁用 html5 视频自动播放? 我尝试过的: <video width="640" height="480" controls="controls" type="video/mp4" autoplay="false" preload="none"><source src="http://mydomain.com/mytestfile.mp4">Your browser does not support the video tag.</video> 我会删除 autoplay 属性,因为如果浏览器遇到它,它会自动播放! autoplay 是一个 HTML 布尔属性,但请注意,不允许使用值 true 和 false。要表示 false 值,您必须省略该属性。 布尔属性不允许使用“true”和“false”值。要表示假值,必须完全省略该属性。 此外,类型位于源代码内部,如下所示: <video width="640" height="480" controls preload="none"> <source src="http://example.com/mytestfile.mp4" type="video/mp4"> Your browser does not support the video tag. </video> 参考资料: http://www.w3.org/TR/html-markup/video.html HTML 规范(布尔属性) 删除视频标签中的自动播放。使用这样的代码 <video class="embed-responsive-item" controls> <source src="http://example.com/video.mp4"> Your browser does not support the video tag. </video> 100% 正常工作 尝试将 autostart="false" 添加到您的源标签。 <video width="640" height="480" controls="controls" type="video/mp4" preload="none"> <source src="http://example.com/mytestfile.mp4" autostart="false"> Your browser does not support the video tag. </video> JSFiddle 示例 要禁用自动播放,您必须完全删除autoplay属性。 否则会被解释为autoplay=true。很不明显! 只需在视频标签中使用 preload="none",页面加载时视频就会停止自动播放。 事实上,将 autoplay 设置为 false 并不能帮助某些视频正常播放。请参阅小提琴中的此案例。 如果您想暂停所有视频,您可能需要通过代码执行以下操作: videos = document.querySelectorAll("video"); for(video of videos) { video.pause(); } 当然,如果 video 标签位于影子根元素中,则上述情况将不起作用,但几乎没有任何通用解决方案适用于影子根元素。在那里,您将需要一种自定义方法并首先扩展影子根。 删除所有标有 autoplay 的属性,因为它在标签中的存在是 true 的布尔简写。 此外,请确保始终使用 video 或 audio 元素。不要使用 object 或 embed,因为这些元素默认使用第三部分插件自动播放,并且如果不更改浏览器中的设置就无法停止。 <video class="embed-responsive-item" controls> <source src="http://example.com/video.mp4" autostart="false"> Your browser does not support the video tag. </video> 我希望在编辑模式下 autoplay="false" 但在查看器模式下 autoplay="true" 并通过仅在查看器模式下通过 jQuery 添加属性来解决它: <video id="vid" class="my-vid" poster="https://poster-url/poster.jpg" loop="loop" controls="controls" width="100%" height="100%"> <source src="https://video-url/vision.mp4" type= "video/mp4" /> </video> <script type="text/javascript"> if (document.location.href.indexOf('domain') > -1 || document.location.href.indexOf('test') > -1) { $(document).ready(function() { $('video').attr('autoplay','autoplay') }); } </script> 2024 年什么在起作用? 要阻止页面上的任何嵌入视频在下载期间播放,即“自动播放”,使用 autoplay="none" 或 autoplay="0"、删除单词“autoplay”或 preload="none" 不起作用。 为什么这么难? 可以设置autoplay="" <video width="640" height="480" controls="controls" type="video/mp4" autoplay=""> <source src="http://example.com/mytestfile.mp4"> Your browser does not support the video tag. </video> ps。要启用您可以使用 autoplay 或 autoplay="autoplay" 只需将 autoplay="false" 放在源标签上..:)
如何找到视频文件中包含的不同分辨率的视频。 实际上我正在开发一个反应应用程序来创建一个多分辨率视频播放器,它将从用户那里获取视频......
我正在尝试从图像创建视频,但该视频未在 google colab 中显示。但是同一个视频,当我下载并在本地计算机上播放时,它工作正常。我有
我正在开发一个应用程序,该应用程序托管来自主要的视频(.mp4) 安卓设备。 说在http://192.168.43.88:8080/*.mp4和辅助设备 使用 wifi 连接将能够传输视频(...
React Native Expo 移动应用程序中的 HLS m3u8 直播
我需要在 Expo React 本机应用程序中显示实时流视频。我尝试了 expo-video,但如果我没记错的话,它只能播放 mp4 视频而不是实时流。 我不想退出世博会。有没有什么展会...
我正在尝试下载第60届金马奖放映的电影《石门》。我发现了一个流媒体链接: https://www.fofoyy.com/dianying/96937 我无法...
我的 html 中间有一个视频。正如你一开始看到的,我没有任何来源 我的 html 中间有一个视频。正如你一开始看到的,我没有任何来源 <video id="videoPrincipal" src="" width="640" height="360" controls preload></video> 当我单击按钮时,我会触发一个函数,该函数会: myVid = document.getElementById('videoPrincipal'); myVid.src = 'video.mp4'; myVid.play(); myVid.currentTime ='5'; 视频开始正确播放,但我无法设置当前时间(我所做的与我们在http://www.w3schools.com/tags/av_prop_currenttime.asp中看到的相同) 如果我在调用播放函数之前设置 currentTime ,它会给我同样的错误。 控制台中显示的错误如下:“未捕获 InvalidStateError:尝试使用不可用或不再可用的对象。” (在当前时间线中)但是当我搜索这个问题时,我无法与视频关联,只能与画布关联。 提前致谢 您不必等待它开始播放,但它必须准备好播放。有 canplay 事件可以做到这一点,所以类似这样的事情应该可以工作: myVid.play(); myVid.addEventListener('canplay', function() { this.currentTime = 5; }); 如上所述,当视频不可搜索时,您尝试设置 currentTime。因此,作为替代用例(例如,当用户单击按钮时将时间重置为 0),您可以执行以下操作: function resetVideo() { myVid.pause(); if (myVid.seekable.length > 0) { myVid.currentTime = 0; } } 或者,您也可以仅在之前播放过视频的情况下尝试重置。 function resetVideo() { myVid.pause(); if (myVid.currentTime !== 0) { myVid.currentTime = 0; } } video = document.getElementById('video'); begin_play = 50; play_video_first = true; //if you want to run only first time video.addEventListener("play", capture, false); function capture(event) { if (event.type == "play"){ if(play_video_first){ play_video_first = false; video.currentTime = begin_play; } } } 你必须等到它准备好才能玩, 即不要期望 play 是一个阻塞函数 按如下方式更改您的代码: myVid.play(); myVid.media.addEventListener('playing', function(){ myVid.setCurrentTime(5); });
我正在尝试编写一个Android应用程序,它可以获取给定的视频并将其分辨率更改为给定的大小、比特率和音频采样率。我正在使用内置 MediaCodec 和 MediaMuxer 类
Wordpress 页面上的视频可以在桌面上加载,但不能在移动设备上加载
我在 WordPress 博客文章中添加了几个视频。当我在桌面上加载页面时,一切似乎都正常运行。当我在我的 Android 手机上加载相同的页面时...
此网站有一些问题... 除了 Opera 之外,所有浏览器都可以播放 HTML5 视频。它以前玩过,但我在最近的更新中看不到任何会影响它的东西...... 有什么想法吗?
我想在我的网站上代表视频测试,并且我的网站上有很多图像,但我想快速加载这些视频和图像,我该怎么做? 我看到有很多网站都在使用...