`
陈修恒
  • 浏览: 205687 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JMF 录像程序

    博客分类:
  • java
阅读更多
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 设置声音和视频选项,并实现录像功能"这个主题中,我们将深入探讨如何利用JMF来设置声音和视频参数,并实现录像功能。 1. **JMF安装与配置**: 在使用JMF之前,首先需要下载并安装JMF的库文件。这通常涉及...

    JAVA 使用JMF调用摄像头

    在Java程序中,我们可以通过JMF接口来访问摄像头,进行图像采集。 在使用JMF之前,需要先在系统上安装JMF的对应版本,比如提供的"jmf-2_1_1e-windows-i586.exe"是一个适用于Windows系统的JMF安装包。安装完成后,...

    jmf 视屏录制 JMF 影像录制

    程序描述:用JMF2.0做的调用摄像头 进行视屏录制,是 医学上“内镜”影像学录像和截图的简单DEMO。 ... 要求:JDK1.4.2以上版本,JMF2.0以上版本。 前提:安装JMF_framework,也可以...希望对学习JMF录像的同行们 有帮助。

    JAVA读取摄像头(JMF)

    ### JAVA读取摄像头(JMF)的关键知识点 #### JMF (Java Media Framework) 概述 JMF 是 Java 平台上用于处理实时音频、视频和其他形式的流媒体的标准框架。它提供了一种简单的方法来捕获、播放、处理、存储以及传输...

    基于JMF的一个手机摄像,拍照程序

    2. **多媒体设备控制**:程序能控制摄像头,意味着它使用了JMF提供的接口来获取摄像头输入,启动和停止录像,以及捕获静态图像。 3. **图像捕捉与保存**:通过JMF,程序可以捕获摄像头的实时画面,将其保存为图像...

    海康录像机java客户端程序源码

    Java客户端可能使用了开源库如JMF(Java Media Framework)或VLCj来解码和显示来自录像机的RTSP(实时流协议)视频流。这些库能够处理H.264等编码格式,将视频数据转化为可以在Java应用中显示的图像。 4. **云台...

    智微系列JMF60X JMF602 JMF606-607

    压缩包内的“智微系列”文件可能包含了与这些芯片组相关的详细资料,如数据手册、开发者指南、驱动程序和固件更新等。这些文档对于开发者和系统集成商来说非常宝贵,他们可以通过这些资料了解如何充分利用这些芯片组...

    video recorder:使用jmf的录像机模块-开源

    描述中提到“此处签出并支持我最新的Android项目”,这暗示了开发者Deepak PK创建了一个Android应用程序,该应用可能利用了JMF的录像功能。尽管JMF主要是为Java桌面环境设计的,但通过一些适配和调整,它也可能被...

    jmf-2_1_1e.rar

    3. **监控系统**:在安防监控领域,JMF可以帮助实现远程视频监控和录像功能。 4. **多媒体播放器**:开发Java版的媒体播放器,利用JMF进行多媒体文件的播放。 需要注意的是,JMF虽然功能强大,但在后续的版本中,...

    jmf guide很不错

    2. **易于使用**:JMF提供了一套简洁的API接口,使得开发者可以轻松地集成音频和视频功能到他们的应用程序中。 3. **灵活性**:用户可以根据需要选择不同的编解码器和插件来扩展JMF的功能。 4. **高级特性**:包括...

    JMF667H Data Sheet V1.7.pdf

    - **个人电脑**:用于提升台式机或笔记本电脑的启动速度和应用程序加载速度。 - **服务器存储**:适用于服务器环境,提供快速的数据访问速度,提高系统整体性能。 - **工业应用**:适合于工业级存储设备,如监控录像...

    纯java applet编写屏幕录像,播放,压缩

    Java Applet是一种基于Java的小程序,它可以在支持Java的Web浏览器中运行,为用户提供丰富的交互体验。 标题中的"纯Java applet编写屏幕录像,播放,压缩"意味着我们将使用纯Java代码来开发一个Applet,该Applet...

    android 使用javacv进行录像[模仿vine]_android源码.zip

    它包括对OpenCV、FFmpeg、Poco、JMF、Xuggler等库的Java绑定。其中,OpenCV是一个强大的计算机视觉库,适用于图像处理和分析;FFmpeg则是一个多媒体处理工具,用于音频和视频的编码、解码、转换等。 在Android上...

    android视频开发项目源码

    2. **Java Media Framework (JMF)**:虽然JMF主要是一个Java平台的多媒体框架,但在Android中可能被用作特定的视频处理组件。开发者需要自行配置和集成,以便实现特定的视频功能,如流媒体处理或特殊编码格式的支持...

    视频捕捉java实现

    在Java项目中,需要将JMF的库文件添加到类路径,这样程序才能访问JMF的API。 接下来,我们需要创建一个MediaLocator对象来指定摄像头的输入源。MediaLocator允许我们定位媒体设备,例如"vfw://0"表示第一个可用的...

    java SWT连接视频设备DVR-DVS

    Java SWT(Standard Widget Toolkit)是Java平台上的一种图形用户界面(GUI)工具包,它允许开发者创建与本机操作系统深度融合的应用程序。在Java中,SWT提供了丰富的控件和功能,可以用于构建美观且高效的桌面应用...

    java摄像头操作代码

    在Java编程语言中,操作摄像头并获取视频流是一项复杂但重要的任务,特别是在开发与多媒体相关的应用程序时。这篇博客“java摄像头操作代码”可能提供了一些实用的示例代码,帮助开发者了解如何在Java环境下与摄像头...

Global site tag (gtag.js) - Google Analytics