import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Component;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.media.ConfigureCompleteEvent;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.DataSink;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoDataSourceException;
import javax.media.NoProcessorException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.Processor;
import javax.media.RealizeCompleteEvent;
import javax.media.protocol.DataSource;
import javax.media.protocol.FileTypeDescriptor;
public class VideoCapturer extends Frame implements ControllerListener {
Button videoCapturer;
boolean isInCapturing = false;
String url = DeviceConfig.VIDEO_DEVICE_URL;
DataSource source;
Player player = null;
DataSink datasink;
Processor processor=null;
public VideoCapturer() {
setBounds(100, 100, 300, 400);
/** 数据源 */
try {
source = Manager.createDataSource(new MediaLocator(url));
/** 处理器 */
player = Manager.createPlayer(source);
player.addControllerListener(this);
player.realize();
} catch (NoDataSourceException e2) {
e2.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
/** 录像按钮 */
videoCapturer = new Button("video capture");
videoCapturer.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
DataSource outsource = Manager.createCloneableDataSource(source);
processor = Manager.createProcessor(outsource);
processor.addControllerListener(new ControllerListener() {
@Override
public void controllerUpdate(ControllerEvent event) {
System.out.println(event.getClass());
if (event instanceof ConfigureCompleteEvent){
// 设置视频输出格式
processor.setContentDescriptor(new FileTypeDescriptor(
FileTypeDescriptor.QUICKTIME));
processor.realize();
} else if (event instanceof RealizeCompleteEvent) {
processor.prefetch();
} else if (event instanceof PrefetchCompleteEvent) {
processor.start();
String luxiangsavepath = "C:/capture/";
String luxiangsavename = "flv.quickname";
MediaLocator dest = new MediaLocator(new java.lang.String(
"file:///" + luxiangsavepath + luxiangsavename));
try {
datasink = Manager.createDataSink(processor.getDataOutput(), dest);
datasink.open();
datasink.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
processor.configure();
} catch (SecurityException e1) {
} catch (IOException e1) {
} catch (NoProcessorException e1) {
}
}
});
/** 停止录像按钮 **/
Button stopButton = new Button("stop capture");
add(stopButton, BorderLayout.NORTH);
stopButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
System.out.println("close");
processor.close();
processor.deallocate();
datasink.stop();
datasink.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
Panel northPanel = new Panel();
add(northPanel, BorderLayout.NORTH);
northPanel.add(videoCapturer, BorderLayout.EAST);
northPanel.add(stopButton, BorderLayout.WEST);
}
public static void main(String[] args) {
VideoCapturer capturer = new VideoCapturer();
}
@Override
public void controllerUpdate(ControllerEvent event) {
System.out.println(event.getClass());
if (event instanceof RealizeCompleteEvent) {
player.prefetch();
} else if (event instanceof PrefetchCompleteEvent) {
player.start();
/** 显示player */
Component visualComponent = player.getVisualComponent();
add(visualComponent, BorderLayout.CENTER);
setVisible(true);
} else {
}
}
}
分享到:
相关推荐
在"jmf 设置声音和视频选项,并实现录像功能"这个主题中,我们将深入探讨如何利用JMF来设置声音和视频参数,并实现录像功能。 1. **JMF安装与配置**: 在使用JMF之前,首先需要下载并安装JMF的库文件。这通常涉及...
在Java程序中,我们可以通过JMF接口来访问摄像头,进行图像采集。 在使用JMF之前,需要先在系统上安装JMF的对应版本,比如提供的"jmf-2_1_1e-windows-i586.exe"是一个适用于Windows系统的JMF安装包。安装完成后,...
程序描述:用JMF2.0做的调用摄像头 进行视屏录制,是 医学上“内镜”影像学录像和截图的简单DEMO。 ... 要求:JDK1.4.2以上版本,JMF2.0以上版本。 前提:安装JMF_framework,也可以...希望对学习JMF录像的同行们 有帮助。
### JAVA读取摄像头(JMF)的关键知识点 #### JMF (Java Media Framework) 概述 JMF 是 Java 平台上用于处理实时音频、视频和其他形式的流媒体的标准框架。它提供了一种简单的方法来捕获、播放、处理、存储以及传输...
2. **多媒体设备控制**:程序能控制摄像头,意味着它使用了JMF提供的接口来获取摄像头输入,启动和停止录像,以及捕获静态图像。 3. **图像捕捉与保存**:通过JMF,程序可以捕获摄像头的实时画面,将其保存为图像...
Java客户端可能使用了开源库如JMF(Java Media Framework)或VLCj来解码和显示来自录像机的RTSP(实时流协议)视频流。这些库能够处理H.264等编码格式,将视频数据转化为可以在Java应用中显示的图像。 4. **云台...
压缩包内的“智微系列”文件可能包含了与这些芯片组相关的详细资料,如数据手册、开发者指南、驱动程序和固件更新等。这些文档对于开发者和系统集成商来说非常宝贵,他们可以通过这些资料了解如何充分利用这些芯片组...
描述中提到“此处签出并支持我最新的Android项目”,这暗示了开发者Deepak PK创建了一个Android应用程序,该应用可能利用了JMF的录像功能。尽管JMF主要是为Java桌面环境设计的,但通过一些适配和调整,它也可能被...
3. **监控系统**:在安防监控领域,JMF可以帮助实现远程视频监控和录像功能。 4. **多媒体播放器**:开发Java版的媒体播放器,利用JMF进行多媒体文件的播放。 需要注意的是,JMF虽然功能强大,但在后续的版本中,...
2. **易于使用**:JMF提供了一套简洁的API接口,使得开发者可以轻松地集成音频和视频功能到他们的应用程序中。 3. **灵活性**:用户可以根据需要选择不同的编解码器和插件来扩展JMF的功能。 4. **高级特性**:包括...
- **个人电脑**:用于提升台式机或笔记本电脑的启动速度和应用程序加载速度。 - **服务器存储**:适用于服务器环境,提供快速的数据访问速度,提高系统整体性能。 - **工业应用**:适合于工业级存储设备,如监控录像...
Java Applet是一种基于Java的小程序,它可以在支持Java的Web浏览器中运行,为用户提供丰富的交互体验。 标题中的"纯Java applet编写屏幕录像,播放,压缩"意味着我们将使用纯Java代码来开发一个Applet,该Applet...
它包括对OpenCV、FFmpeg、Poco、JMF、Xuggler等库的Java绑定。其中,OpenCV是一个强大的计算机视觉库,适用于图像处理和分析;FFmpeg则是一个多媒体处理工具,用于音频和视频的编码、解码、转换等。 在Android上...
2. **Java Media Framework (JMF)**:虽然JMF主要是一个Java平台的多媒体框架,但在Android中可能被用作特定的视频处理组件。开发者需要自行配置和集成,以便实现特定的视频功能,如流媒体处理或特殊编码格式的支持...
在Java项目中,需要将JMF的库文件添加到类路径,这样程序才能访问JMF的API。 接下来,我们需要创建一个MediaLocator对象来指定摄像头的输入源。MediaLocator允许我们定位媒体设备,例如"vfw://0"表示第一个可用的...
Java SWT(Standard Widget Toolkit)是Java平台上的一种图形用户界面(GUI)工具包,它允许开发者创建与本机操作系统深度融合的应用程序。在Java中,SWT提供了丰富的控件和功能,可以用于构建美观且高效的桌面应用...
在Java编程语言中,操作摄像头并获取视频流是一项复杂但重要的任务,特别是在开发与多媒体相关的应用程序时。这篇博客“java摄像头操作代码”可能提供了一些实用的示例代码,帮助开发者了解如何在Java环境下与摄像头...