关于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();
}
}
分享到:
相关推荐
该系统采用Java语言进行开发,使用Java Media Framework(JMF)进行视频和音频处理,使用Socket进行网络通信。通过合理的模块设计,实现了视频会议系统的高扩展性和灵活性。实验结果表明,该系统可以实现流畅的多人视频...
JMF是Java平台上的多媒体处理框架,它允许开发者处理音频、视频等多媒体数据,包括捕获、播放、编码和解码等操作。 首先,要理解JMF的基本概念。JMF是一种服务提供者接口(SPI),它定义了处理多媒体数据的一系列...
1. 音视频采集:源码可能包含使用Java Media Framework (JMF) 或 OpenCV 进行摄像头和麦克风的音视频采集代码,这些代码负责获取设备的原始数据。 2. 编码:采集到的数据需要经过编码才能在网络上传输,可能使用了H....
Java中的开源库如JMF(Java Media Framework)或VLCJ可以用来处理这些任务,但现代的实现更多地依赖WebRTC(Web Real-Time Communication),它提供端到端的实时通信能力,可以在浏览器中实现音视频通信。...
- **音视频采集与传输**:利用Java Media Framework (JMF) 或者 Xuggler 库来捕获音视频数据,并通过RTSP协议或者自定义协议进行传输。 - **数据同步与优化**:为了提高用户体验,需要在服务器端进行数据同步处理,...
本篇将深入探讨如何利用Java实现网络摄像头的监控,并进行图像变化采集。 首先,我们需要了解Java Media Framework (JMF)。JMF是Java平台上的多媒体处理框架,它允许开发者捕获、播放、处理音频和视频流。在这个...
基于JMF的基本功能特点,可以实现视频会议过程中视频与音频信号的捕捉采集、分析处理以及最终的输出与播放等。它还能与很多类型的应用程序进行有效对接,从而增加网络视频会议中的其他功能。 4基于JAVA的网络视频...
Sipdroid采用了Android的AudioRecord和AudioTrack类进行音频的采集和播放,通过Java Media Framework(JMF)或OpenSL ES进行音频编解码。在源码中,可以看到如何设置音频输入输出流,如何选择合适的编解码器,以及...
2. **视频传输**:利用Java Media Framework (JMF) 或其他多媒体框架实现实时音视频数据的采集与传输。 3. **音频处理**:集成噪声抑制、回声消除等音频优化技术,提升通话质量。 4. **屏幕共享**:允许用户在会议中...
通常,这类系统会采用开源的音视频库,例如OpenCV用于视频捕获和处理,Java Media Framework (JMF) 或Xuggler用于媒体播放和流处理。这些库能帮助处理视频压缩、解压缩标准,如H.264,以及音频编解码格式如AAC或G....
5. **音视频编解码**:H.264或VP8等视频编码标准以及AAC或Opus等音频编码标准用于压缩和解压缩音视频数据,以减少带宽需求并保持画质。 6. **RTSP/RTP/RTCP协议**:实时流传输协议(RTSP)用于控制音视频流的播放,...