关于JMF语音视频捕获Word文档格式.docx
- 文档编号:19803047
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:15
- 大小:21.17KB
关于JMF语音视频捕获Word文档格式.docx
《关于JMF语音视频捕获Word文档格式.docx》由会员分享,可在线阅读,更多相关《关于JMF语音视频捕获Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
处理器(Processor)数据保存需要有人去保存不,所以就叫处理器去做这个工作咯,处理器还有传输数据的功能
好了,大概的也就介绍完毕,废话少说,摆代码了:
这是个方法,如果你自己都不会写GUI的话,那到此打住吧
顺便说一下:
在运行此方法之前,如果是用Eclipse,你需要安装JMF,然后在你建立的工程里面导入jmf.jar包。
怕有些人不懂还是给一下步骤吧:
工程名那里点击右键BuildPathConfigureBuildPathjavaBuildPathLibrariesAddExternalJARs找到你所安装JMF的安装路径里面的lib文件夹里面确定jmf.jar(ProgramFiles/JMF2.1.1e/lib)
publicvoidinitVedio()throwsNoDataSourceException,IOException,IncompatibleSourceException,NoPlayerException,CannotRealizeException{
////////////////////////////////////////////////////////
//由于JMF与win7不兼容缘故,这段话可以避免你在win7里面运行时出现问
//题的解决方案,如果是XP那就免了
Stringname=VFWCapture.capGetDriverDescriptionName(0);
if(name!
=null){
VFWSourceStream.autoDetect(0);
}else{
JOptionPane.showMessageDialog(this,"
无视频驱动"
);
}
//此为截取视频设备,怕你不止一个视频设备,所以用一个泛型接住
Vector<
CaptureDeviceInfo>
video=
CaptureDeviceManager.getDeviceList(newVideoFormat(null));
//此为截取音频设备,这两个截取都给了Format
//音频设备格式是固定给予的
audio=
CaptureDeviceManager.getDeviceList(newAudioFormat(
AudioFormat.LINEAR,44100,16,2
));
//定义数据源
DataSourceaudioDataLocal=null;
DataSourcevideoDataLocal=null;
//如果音频设备捕捉不为空就让定位器(MediaLocator)去定位
if(audio!
=null&
&
audio.size()>
0){
//定位器进行对得到的设备信息进行定位
//这里的get(0)是获取第一个设备,因为只要一个(也许有两个)
MediaLocatoraudioLocator=((CaptureDeviceInfo)audio.get(0)).getLocator();
//管理员通过定位器从定位器里面获取数据源
audioDataLocal=Manager.createDataSource(audioLocator);
//和上面同理
if(video!
video.size()>
MediaLocatorvedioLocator=((CaptureDeviceInfo)video.get(0)).getLocator();
videoDataLocal=Manager.createDataSource(vedioLocator);
//把所得到的数据源用一个数据数组合二为一,以便播放
//当然如果你要分别播放也未尝不可,你一定要用两个播放器就是了
finalDataSource[]dataSources=newDataSource[2];
dataSources[0]=videoDataLocal;
dataSources[1]=audioDataLocal;
//合并数据源
DataSourcedsLocal=Manager.createMergingDataSource(dataSources);
//在一开始需要定义这是一个容器(Panel)
viewSmallPane.setLayout(newBorderLayout());
//这是一个播放器,前面已定义(Player)
player=Manager.createRealizedPlayer(dsLocal);
//这是一个组件,从播放器里面得到一个可视化组件
component=player.getVisualComponent();
//控制组件,从播放器里面得到一个控制组件
component2=player.getControlPanelComponent();
//如果能够获取组件的话,那么把组件加入容器(Panel)里面
if(component!
//viewBigPane.add(component2);
viewBigPane.add(component,BorderLayout.CENTER);
controlPane.add(component2);
}
//一切工作完成之后,就让播放器开始播放吧,呵呵
player.start();
}
如果你觉得有必要学习保存为文件请看下列,如果是你很懒,只想复制运行一下,那你就复制去吧,你也可以一字不落的复制拿去装逼,发表说是你写的,本人绝不过问,哈哈。
/**
*@desc:
关于文件保存的方法
*/
packageaudio;
importjava.awt.BorderLayout;
importjava.awt.Component;
importjava.awt.FlowLayout;
importjava.awt.Graphics;
importjava.awt.Rectangle;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.io.File;
importjava.io.IOException;
importjava.util.Vector;
importjavax.media.CannotRealizeException;
importjavax.media.CaptureDeviceInfo;
importjavax.media.CaptureDeviceManager;
importjavax.media.DataSink;
importjavax.media.Format;
importjavax.media.IncompatibleSourceException;
importjavax.media.Manager;
importjavax.media.MediaLocator;
importjavax.media.NoDataSinkException;
importjavax.media.NoDataSourceException;
importjavax.media.NoPlayerException;
importjavax.media.Player;
importjavax.media.Processor;
importjavax.media.ProcessorModel;
importjavax.media.control.FormatControl;
importjavax.media.format.AudioFormat;
importjavax.media.format.VideoFormat;
importjavax.media.protocol.DataSource;
importjavax.media.protocol.FileTypeDescriptor;
importjavax.media.protocol.SourceCloneable;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFileChooser;
importjavax.swing.JFrame;
importjavax.swing.JOptionPane;
importjavax.swing.JPanel;
importcom.sun.media.protocol.vfw.VFWCapture;
importcom.sun.media.protocol.vfw.VFWSourceStream;
importaudio.VedioFrame.MyPanel;
*@authorshangguanrs
*@version1.0,
*@sincejdk1.7
publicclassDataSinkDemoextendsJFrame{
//定位器
MediaLocatoraudioLocator;
MediaLocatorvedioLocator;
MediaLocatorlocalPath;
//数据源
DataSourceaudioDataLocal=null;
DataSourcevideoDataLocal=null;
DataSourcecloneDataLocal=null;
DataSourcesource;
//处理器
Processorprocessor;
//播放器
Playerplayer;
//////////////////////////////////////////////////////////
//此为数据保存所需类
//保存数据
DataSinkdataSink;
//数据控制格式
FormatControlformatControl;
//文件格式描述器
FileTypeDescriptoroutputType;
//处理器模式
ProcessorModelprocessorModel;
//////////////////////////////////////////////////////////////
//第二代选择器
JFileChooserchooser;
//视频背景图片
privateImageIconvideoReqIcon=newImageIcon("
image/vedio1.jpg"
privateImageIconvideolocalIcon=newImageIcon("
image/vedio2.jpg"
//大小容器和控制容器
privateJPanelviewBigPane;
privateJPanelviewSmallPane;
privateJPanelcontrolPane;
//停止按钮
privateJButtonbtnStop;
//组件
privateComponentcomponent,component2;
//构造方法
publicDataSinkDemo(){
init();
try{
initVedio();
}catch(NoDataSourceExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IncompatibleSourceExceptione){
}catch(NoPlayerExceptione){
}catch(CannotRealizeExceptione){
}catch(IOExceptione){
}catch(NoDataSinkExceptione){
}
//初始化界面
publicvoidinit(){
this.setTitle("
视频"
this.setBounds(newRectangle(481,380));
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
//设置布局
this.setLayout(newBorderLayout());
//初始化容器(加入图片)
viewSmallPane=newMyPanel(videolocalIcon);
viewBigPane=newMyPanel(videoReqIcon);
//加入容器
this.add(viewBigPane,BorderLayout.CENTER);
viewBigPane.setLayout(null);
viewBigPane.add(viewSmallPane);
viewSmallPane.setLayout(newBorderLayout());
viewSmallPane.setBounds(this.getWidth()-130,this.getHeight()-160,122,92);
//初始化控制容器
controlPane=newJPanel();
this.add(controlPane,BorderLayout.SOUTH);
//初始化停止按钮
btnStop=newJButton("
停止"
btnStop.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEventarg0){
//TODOAuto-generatedmethodstub
stop();
}
});
controlPane.setLayout(newFlowLayout(FlowLayout.RIGHT));
controlPane.add(btnStop);
this.setVisible(true);
//解释过的就不注释了
publicvoidinitVedio()
throwsNoDataSourceException,IOException,IncompatibleSourceException,
NoPlayerException,CannotRealizeException,NoDataSinkException{
audioLocator=((CaptureDeviceInfo)audio.get(0)).getLocator();
vedioLocator=((CaptureDeviceInfo)video.get(0)).getLocator();
/*
*也许有人会说cloneDataLocal=dsLocal;
这样不就可以了,但是那样不行
*创建克隆数据是为了数据不单方面流走,如果不创建的话,要么只能播放
*要么只能存储
*/
//创建可克隆数据源
dsLocal=Manager.createCloneableDataSource(dsLocal);
//克隆数据源,用于传输给文件保存
cloneDataLocal=((SourceCloneable)dsLocal).createClone();
//创建播放器
//为保存数据做好准备
formatControl=(FormatControl)player.getControl("
javax.media.control.FormatControl"
FormatdefaultFormat=formatControl.getFormat();
outputType=newFileTypeDescriptor(FileTypeDescriptor.MSVIDEO);
processorModel=newProcessorModel(cloneDataLocal,newFormat[]{defaultFormat},outputType);
processor=Manager.createRealizedProcessor(processorModel);
//如果没有选择数据则无法播放
Stringpath=getPath();
if(path==null){
return;
//从处理器得到输出数据
source=processor.getDataOutput();
//本地路径定位
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关于 JMF 语音 视频 捕获