`

用JMF实现音频、视频的采集并播放(源码)

阅读更多
关于JMF的基础,我这里就不多说了。请看:
http://hi.baidu.com/max%5Fzeng/blog/category/Jmf


import java.awt.*;
import java.io.*;
import java.util.*;
import javax.media.*;
import javax.media.format.*;
import javax.swing.*;

public class CaptureAndPlay implements ControllerListener {

    Vector audioCapDevList = null;
    Vector videoCapDevList = null;
    CaptureDeviceInfo audioCapDevInfo = null;
    CaptureDeviceInfo videoCapDevInfo = null;
    MediaLocator audioCapDevLoc = null;
    MediaLocator videoCapDevLoc = null;

    Player audioPlayer;
    Player videoPlayer;

    public void initAudioCapDevLoc() {
        //这里可以填写其它的音频编码格式,具体请看AudioFormat类
        audioCapDevList = CaptureDeviceManager.getDeviceList(new AudioFormat(
                AudioFormat.LINEAR));

        if ((audioCapDevList.size() > 0)) {
            //或许有几个CaptureDevice,这里取第一个
            audioCapDevInfo = (CaptureDeviceInfo) audioCapDevList.elementAt(0);
            audioCapDevLoc = audioCapDevInfo.getLocator();
        } else {
            System.out.println("找不到音频采集设备");
            System.exit(0);
        }

    }

    public void initVideoCapDevLoc() {
        //这里可以填写其它的编码视频格式,具体请看VideoFormat类
        videoCapDevList = CaptureDeviceManager.getDeviceList(new VideoFormat(
                VideoFormat.YUV));

        if ((videoCapDevList.size() > 0)) {
            //或许有几个CaptureDevice,这里取第一个
            videoCapDevInfo = (CaptureDeviceInfo) videoCapDevList.elementAt(0);
            videoCapDevLoc = videoCapDevInfo.getLocator();
        } else {
            System.out.println("找不到视频采集设备");
            System.exit(0);
        }

    }

    public void initAudioPlayer() {

        try {
            audioPlayer = Manager.createPlayer(audioCapDevLoc);
        } catch (NoPlayerException ex) {
        } catch (IOException ex) {
        }        
        //增加一个侦听器,侦听player状态的改变
        audioPlayer.addControllerListener(this);
        audioPlayer.realize();
    }

    public void initVideoPlayer() {
        try {
            videoPlayer = Manager.createPlayer(videoCapDevLoc);
        } catch (NoPlayerException ex) {
        } catch (IOException ex) {
        }
        //增加一个侦听器,侦听player状态的改变
        videoPlayer.addControllerListener(this);
        videoPlayer.realize();
    }

    public void stopAndClosePlayer(){
        audioPlayer.stop();
        audioPlayer.close();
        videoPlayer.stop();
        videoPlayer.close();
    }

    public synchronized void controllerUpdate(ControllerEvent ce) {
        Player p = (Player) ce.getSourceController();

        JFrame jFrame = new JFrame();
        Component com;

        if (p == null) {
            return;
        }

        //如果player的状态变为Realized
        if (ce instanceof RealizeCompleteEvent) {

            if ((com = p.getControlPanelComponent()) != null) {
                jFrame.add(com, BorderLayout.SOUTH);
            }

            if ((com = p.getVisualComponent()) != null) {
                jFrame.add(com, BorderLayout.NORTH);
            }

            jFrame.setVisible(true);
            jFrame.pack();
            jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            p.start();
        }
    }

    public static void main(String args[]) {
        CaptureAndPlay cap = new CaptureAndPlay();
        cap.initAudioCapDevLoc();
        cap.initVideoCapDevLoc();
        cap.initAudioPlayer();
        cap.initVideoPlayer();

        try {
            Thread.currentThread().sleep(20000);//20秒后停止并关闭播放器
        } catch (InterruptedException ex) {
        }
        cap.stopAndClosePlayer();
    }
}

 

分享到:
评论
1 楼 qp7711 2010-12-05  
楼主,你太棒了。
太谢谢你的无私了。
我的问题你帮我解决了。

以后多向楼主学习学习。

相关推荐

    基于Java视频会议系统的设计与实现 的毕业设计,它可以实现多人视频会议、视频聊天等功能

    该系统采用Java语言进行开发,使用Java Media Framework(JMF)进行视频和音频处理,使用Socket进行网络通信。通过合理的模块设计,实现了视频会议系统的高扩展性和灵活性。实验结果表明,该系统可以实现流畅的多人视频...

    JAVA 使用JMF调用摄像头

    JMF是Java平台上的多媒体处理框架,它允许开发者处理音频、视频等多媒体数据,包括捕获、播放、编码和解码等操作。 首先,要理解JMF的基本概念。JMF是一种服务提供者接口(SPI),它定义了处理多媒体数据的一系列...

    java视频会议客户端(源码)

    1. 音视频采集:源码可能包含使用Java Media Framework (JMF) 或 OpenCV 进行摄像头和麦克风的音视频采集代码,这些代码负责获取设备的原始数据。 2. 编码:采集到的数据需要经过编码才能在网络上传输,可能使用了H....

    视频会议系统源码

    Java中的开源库如JMF(Java Media Framework)或VLCJ可以用来处理这些任务,但现代的实现更多地依赖WebRTC(Web Real-Time Communication),它提供端到端的实时通信能力,可以在浏览器中实现音视频通信。...

    JAVA源码基于Java的远程视频会议系统(系统+论文)

    - **音视频采集与传输**:利用Java Media Framework (JMF) 或者 Xuggler 库来捕获音视频数据,并通过RTSP协议或者自定义协议进行传输。 - **数据同步与优化**:为了提高用户体验,需要在服务器端进行数据同步处理,...

    Java实现网络摄像头,视频的变化

    本篇将深入探讨如何利用Java实现网络摄像头的监控,并进行图像变化采集。 首先,我们需要了解Java Media Framework (JMF)。JMF是Java平台上的多媒体处理框架,它允许开发者捕获、播放、处理音频和视频流。在这个...

    基于Java的视频会议系统实现(程序+论文)

    基于JMF的基本功能特点,可以实现视频会议过程中视频与音频信号的捕捉采集、分析处理以及最终的输出与播放等。它还能与很多类型的应用程序进行有效对接,从而增加网络视频会议中的其他功能。 4基于JAVA的网络视频...

    安卓Android源码——手机的VoIP客户端 Sipdroid.zip

    Sipdroid采用了Android的AudioRecord和AudioTrack类进行音频的采集和播放,通过Java Media Framework(JMF)或OpenSL ES进行音频编解码。在源码中,可以看到如何设置音频输入输出流,如何选择合适的编解码器,以及...

    JAVA源码基于Java的视频会议系统(程序+论文)

    2. **视频传输**:利用Java Media Framework (JMF) 或其他多媒体框架实现实时音视频数据的采集与传输。 3. **音频处理**:集成噪声抑制、回声消除等音频优化技术,提升通话质量。 4. **屏幕共享**:允许用户在会议中...

    基于Java的远程视频会议系统(系统+论文).zip

    通常,这类系统会采用开源的音视频库,例如OpenCV用于视频捕获和处理,Java Media Framework (JMF) 或Xuggler用于媒体播放和流处理。这些库能帮助处理视频压缩、解压缩标准,如H.264,以及音频编解码格式如AAC或G....

    Java毕业设计_视频会议系统.zip

    5. **音视频编解码**:H.264或VP8等视频编码标准以及AAC或Opus等音频编码标准用于压缩和解压缩音视频数据,以减少带宽需求并保持画质。 6. **RTSP/RTP/RTCP协议**:实时流传输协议(RTSP)用于控制音视频流的播放,...

Global site tag (gtag.js) - Google Analytics