| liang's profile阿斯提亚神殿——梦幻天子's skyPhotosBlogLists | Help |
|
March 30 利用JMF进行多媒体编程(转载)您正在看的JAVA教程是:利用JMF进行多媒体编程。 Java媒体框架(JMF)使你能够编写出功能强大的多媒体程序,却不用关心底层复杂的实现细节。JMF API的使用相对比较简单,但是能够满足几乎所有多媒体编程的需求。在这篇文章中,我将向你介绍如何用很少的代码就编写出多媒体程序。 Java多媒体框架(JMF)中包含了许多用于处理多媒体的API。它是一个相当复杂的系统,完全了解这个系统可能需要花上几周的时间,但是这篇文章将主要介绍JMF的几个核心接口和类,然后通过一个简单的例子向你展示如何利用该接口进行编程。 JMF目前的最新版本是2.1,Sun通过它向Java中引入处理多媒体的能力。下面是JMF所支持的功能的一个概述: ● 可以在Java Applet和应用程序中播放各种媒体文件,例如AU、AVI、MIDI、MPEG、QuickTime和WAV等文件。 ● 可以播放从互联网上下载的媒体流。 ● 可以利用麦克风和摄像机一类的设备截取音频和视频,并保存成多媒体文件。 ● 处理多媒体文件,转换文件格式。 ● 向互联网上传音频和视频数据流。 ● 在互联网上广播音频和视频数据。 JMF的结构
您正在看的JAVA教程是:利用JMF进行多媒体编程。 一个JMF例子
Player dualPlayer;
try {
FileDialog fd =
new FileDialog(this, "Select File", FileDialog.LOAD);
fd.show();
String filename = fd.getDirectory() + fd.getFile();
...
}
catch (Exception e) {
System.out.println(e.toString());
}
dualPlayer = Manager.createPlayer
(new MediaLocator("file:///" + filename));
dualPlayer.addControllerListener(this);
dualPlayer.start();
public synchronized void controllerUpdate(ControllerEvent event) {
if (event instanceof RealizeCompleteEvent) {
Component comp;
if ((comp = dualPlayer.getVisualComponent()) != null)
add ("Center", comp);
if ((comp = dualPlayer.getControlPanelComponent()) != null)
add("South", comp);
validate();
}
}
Starting player ...javax.media.TransitionEvent [source=com.sun.media.content.video.mpeg.Handler@71bb78, previous=Unrealized, current=Realizing, target=Started] Open log file: C:\test\Java\JMF\JMF\jmf.log javax.media.DurationUpdateEvent [source=com.sun.media.content.video.mpeg.Handler@71bb78,duration= javax.media.Time@2a37a6 javax.media.RealizeCompleteEvent [source=com.sun.media.content.video.mpeg.Handler@71bb78, previous=Realizing, current=Realized, target=Started] Adding visual component Adding control panel javax.media.TransitionEvent [source=com.sun.media.content.video.mpeg.Handler@71bb78, previous=Realized, current=Prefetching, target=Started] javax.media.PrefetchCompleteEvent [source=com.sun.media.content.video.mpeg.Handler@71bb78, previous=Prefetching, current=Prefetched,target=Started] javax.media.StartEvent [source=com.sun.media.content.video.mpeg.Handler@71bb78, previous=Prefetched, current=Started, target=Started, mediaTime=javax.media.Time@56a05e,timeBaseTime= javax.media.Time@3a8602] javax.media.EndOfMediaEvent [source=com.sun.media.content.video.mpeg.Handler@71bb78, previous=Started, current=Prefetched, target=Prefetched, mediaTime=javax.media.Time@1d332b]
2.注册音频和视频截取设备
devices = CaptureDeviceManager.getDeviceList ( null );
if (devices!=null && devices.size()>0) {
int deviceCount = devices.size();
audioDevices = new Vector();
videoDevices = new Vector();
Format[] formats;
for ( int i = 0; i < deviceCount; i++ ) {
cdi = (CaptureDeviceInfo) devices.elementAt ( i );
formats = cdi.getF您正在看的JAVA教程是:利用JMF进行多媒体编程。ormats(); for ( int j=0; j<formats.length; j++ ) { if ( formats[j] instanceof AudioFormat ) { audioDevices.addElement(cdi); break; } else if (formats[j] instanceof VideoFormat ) { videoDevices.addElement(cdi); break; } } } . . . }利用JMF进行摄像头拍照(转载)我把程序分为两种,有趣的和无趣的,最近做了几个有趣的项目,其中一个,应当就算是摄像头拍照程序了:),用于现场拍照,生成照片,主要用到Java Media Framework(JMF)。 首先到SUN下载最新的JMF,然后安装。http://java.sun.com/products/java-media/jmf/index.jsp 然后,说一下需求 1. 用摄像头拍照 2. 在文本框输入文件名 3. 按下拍照按钮,获取摄像头内的图像 4. 在拍下的照片上有一红框截取固定大小的照片。 5. 保存为本地图像为jpg格式,不得压缩画质
技术关键,相信也是大家最感兴趣的部分也就是如何让一个摄像头工作,并拍下一张照片了。 利用JMF,代码很简单: //利用这三个类分别获取摄像头驱动,和获取摄像头内的图像流,获取到的图像流是一个Swing的Component组件类 public static Player player = null; private CaptureDeviceInfo di = null; private MediaLocator ml = null;
//文档中提供的驱动写法,为何这么写我也不知:) String str1 = "vfw:Logitech USB Video Camera:0"; String str2 = "vfw:Microsoft WDM Image Capture (Win32):0"; di = CaptureDeviceManager.getDevice(str2); ml = di.getLocator(); try { player = Manager.createRealizedPlayer(ml); player.start(); Component comp; if ((comp = player.getVisualComponent()) != null) { add(comp, BorderLayout.NORTH); } } catch (Exception e) { e.printStackTrace(); }
接下来就是点击拍照,获取摄像头内的当前图像。 代码也是很简单: private JButton capture; private Buffer buf = null; private BufferToImage btoi = null; private ImagePanel imgpanel = null; private Image img = null; private ImagePanel imgpanel = null;
JComponent c = (JComponent) e.getSource(); if (c == capture)//如果按下的是拍照按钮 { FrameGrabbingControl fgc = (FrameGrabbingControl) player.getControl( "javax.media.control.FrameGrabbingControl"); buf = fgc.grabFrame(); // 获取当前祯并存入Buffer类 btoi = new BufferToImage((VideoFormat) buf.getFormat()); img = btoi.createImage(buf); // show the image imgpanel.setImage(img); }
保存图像的就不多说了,以下为示例代码 BufferedImage bi = (BufferedImage) createImage(imgWidth, imgHeight); Graphics2D g2 = bi.createGraphics(); g2.drawImage(img, null, null);
FileOutputStream out = null; try { out = new FileOutputStream(s); } catch (java.io.FileNotFoundException io) { System.out.println("File Not Found"); } JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi); param.setQuality(1f, false);//不压缩图像 encoder.setJPEGEncodeParam(param); try { encoder.encode(bi); out.close(); } catch (java.io.IOException io) { System.out.println("IOException"); }
March 09 如何配置JNDI操作记实(转载)在TOMCAT5.0下的JNDI配置记实 -------开发环境:TOMCAT5.0+MS SQL SERVER2000+JDK1.4 一.什么是JNDI: Java Naming and Directory Interface(名字与目录服务).如果你自己建过数据库连接池,就会深刻体会到一个优秀的专门用来处理这个问题的方案的价值所在了。JNDI是 J2EE中一个很重要的标准,通常我们是在EJB编程中用到。通过JNDI可以实现池操作。 二.配置前环境要求: 2.安装 Microsoft SQL Server 2000 Driver for JDBC (该项的配置过程是:将其lib下的msutil.jar、mssqlserver.jar和msbase.jar文件放到 tomcat/common/lib下,然后设置相应的classpath即可) 3.有jtds.jar,并将它放在$TOMCAT5.0_HOME/common/lib目录下(只能是这里)。使用它是因为Microsoft公司的Java SQL Server驱动程序不支持二次查询,目前使用的是jtds-0.6.jar 4.所需要的jar文件:commons-pool.jar, commons-dbcp.jar(后面介绍如何用)
2.进入Data Sources 项 ,在右上角的下拉菜单中选择Create New Data Source ,在其下边的输入框中输入需要的配置信息: JNDI Name:jdbc/XXX(XXX自己命名,jdbc/XXX为建立的jndi实体名称) Data Source URL:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ObjectDataBaseName(目标数据源设置) JDBC Driver Class: com.microsoft.jdbc.sqlserver.SQLServerDriver 即使用的数据库驱动程序 User Name: 连接数据库的用户名 Password: 数据库密码 Max. Active Connections: 最大连接数 Max. Idle Connections: 是最大的空闲连接数 Max. Wait for Connection: 最大等待连接数 3.如果要部署的是个WEB应用程序,则将该应用程序放在 $TOMCAT_HOME/webapps目录下,有两种方式可以引用我们所配置的JNDI数据源 (1)[这种方法可以进行多个项目的建设和发布] <?xml version='1.0' encoding='utf-8'?> <Context debug="1" docBase="$Tomcat 5.0_Home/webapps/JndiTest" path="/JndiTest" reloadable="true" workDir="work\Catalina\localhost\JndiTest"> <Resource name="jdbc/test" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/test"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter> <name>password</name> <value>DataBasePassword</value> </parameter> <parameter> <name>maxActive</name> <value>4</value> </parameter> <parameter> <name>maxWait</name> <value>5000</value> </parameter> <parameter> <name>url</name> <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ObjectDataBaseName</value> </parameter> <parameter> <name>driverClassName</name> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> <parameter> <name>username</name> <value>DataBaseUserName</value> </parameter> <parameter> <name>maxIdle</name> <value>2</value> </parameter> </ResourceParams> </Context> (2)上面的方法只能实现一个项目,建议熟练了以后用(1)中的方法 在<Host></Host>之间加入: <Context path="/JndiTest" docBase="$Tomcat 5.0_Home/webapps/JndiTest" debug="1" reloadable="true"> <Resource name="jdbc/test" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/test"> <parameter> <name>url</name> <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ObjectDataBaseName</value> </parameter> <parameter> <name>driverClassName</name> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> </parameter> <parameter> <name>maxWait</name> <value>5000</value> </parameter> <parameter> <name>maxActive</name> <value>4</value> </parameter> <parameter> <name>password</name> <value>DataBasePassword</value> </parameter> <parameter> <name>maxIdle</name> <value>2</value>
</parameter> <parameter> <name>username</name> <value>DataBaseUserName</value> </parameter> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> </ResourceParams> </Context> 四.测试: (2)在项目的lib文件下部署commons-pool.jar, commons-dbcp.jar <%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%> <%@ page import="javax.naming.*"%> <html> <body> <% Context ctx = new InitialContext(); Connection conn=null; ctx = new InitialContext(); DataSource ds =(DataSource)ctx.lookup("java:comp/env/jdbc/test"); conn = ds.getConnection(); Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); String sql="select * from T_Test"; ResultSet rs=stmt.executeQuery(sql); out.println(rs.getString(1)); out.println(rs.getString(2)); out.println(rs.getString(3)); } <% out.print("数据库操作成功!"); rs.close(); stmt.close(); conn.close(); %> </body> </html> |
|
|