- 浏览: 151068 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
jinianjun:
请问加的那个函数是什么意思呢?
Linux下DHCP不能自动获取IP问题解决 -
liujiaoshui:
看来你们都没玩过《天龙八部》,那才真 叫一个坑,MB的,有个3 ...
淘宝,真的好烦啊。 -
云中苍月:
呃。。这位仁兄忘性真不小。别怪TB了,自己找个小本本把账号/密 ...
淘宝,真的好烦啊。 -
finallygo:
这也是我不用支付宝的原因
淘宝,真的好烦啊。 -
三单联咖啡色:
涉及到个人财产,还是复杂点的好,自己修改密码都那么麻烦,那其他 ...
淘宝,真的好烦啊。
Java术语
术语名称:Java媒体框架(JMF)
术语解释:该核心框架支持不同媒体(如:音频输出和视频输出)间的时钟同步。它是一个标准的扩展框架,允许用户制作纯音频流和视频流。
JMF实际上是Java的一个类包。JMF 2.1.1技术提供了先进的媒体处理能力,从而扩展了Java平台的功能。这些功能包括:媒体捕获、压缩、流转、回放,以及对各种主要媒体形式和编码的支 持,如M-JPEG、H.263、MP3、RTP/RTSP (实时传送协议和实时流转协议)、Macromedias Flash、IBM的HotMedia和Beatniks的Rich Media Format (RMF)等。JMF 2.1.1还支持广受欢迎的媒体类型,如Quicktime、Microsofts AVI和MPEG-1等。此外,JMF 2.1.1软件中包括了一个开放的媒体架构,可使开发人员灵活采用各种媒体回放、捕获组件,或采用他们自己的定制的内插组件。
Sun以四种不同的专用版本提供JMF 2.1.1技术,满足专业开发人员的各类需求,第一个是一个轻便型版本,它完全采用Java语言编写,适用于任何Java兼容系统。此外,开发人员还可选 择分别适用于Solaris、Windows或Linux等操作系统的性能最优化软件包,以提高性能和能力。
JMF 2.1.1软件也是Java Media系列软件的一部分。Java Media系列软件包括Java 3D、Java 2D、Java Sound和Java Advanced Imaging等API。采用各种Java Media API,软件开发商人员就能容易、快速地为他们已有的各种应用程序和客户端Java小程序增添丰富的媒体功能,如流式视频、3D图像和影像处理等。就是 说,各种Java Media API发挥了Java平台的固有优势,将"编写一次,到处运行"的能力扩展到了图像、影像和数字媒体等各种应用领域,从而大大缩减了开发时间和降低了开发 成本。
JMF系统介绍
[ Adigan 发表于 2005-10-2 17:25:15 ]
一.简介
1.1JMF 体系结构简介
在开发JMF 应用程序之前要完全理解JMF 的体系架构、接口和类。就拿我们的家用摄像机系统作个例子。首先用摄像机拍摄内容,拍摄下来的内容录制在DV带中。DV带可以放在放像机里播放、放像机提供视频信号给电视机,提供音频信号给音箱,这样我们就可以在电视机上看到画面,从音箱里听到声音。JMF API 提供的也是同样的模型。
JMF 提供的模型可大致分为七类
* 数据源(Data source)
* 截取设备(Capture Device,包括视频和音频截取设备)
* 播放器(Player)
* 处理器(Processor)
* 数据池(DataSink)
* 数据格式(Format)
* 管理器(Manager)
1.2 如何应用JMF捕获媒体数据
可以应用JMF从摄像头和麦克风中采集数据,采集后的数据可以被处理、保存、渲染为以后应用。
捕获媒体数据需要做以下工作。1.定位所需要用的捕获设备,可以通过查询CaptureDeviceManager来定位。2.获取这个捕获设备的信息CaptureDeviceInfo对象。3.从CaptureDeviceInfo对象中获取捕获设备的位置Medialocator。4.利用MediaLocator创建DataSource。5.使用DataSource创建Player或是Processor。6.然后启动Player就开始了媒体的捕获。
如果只是想观看捕获的内容,只需要使用捕获数据源创建播放器Player即可。如果想把捕获的数据发送到网络或者保存起来,就需要创建处理器Processor。
可以从CaptureDeviceManager中获取捕获设备的信息。CaptureDeviceManager是可在JMF中使用的全部捕获设备的注册中心。可以通过调用CaptureDeviceManager的getDeviceList方法获取可用的捕获设备列表。
每个捕获设备都由CaptureDeviceInfo对象代表,要获取一个特定的设备只需要调用CaptureDeviceManager的getDevice方法。
从特定的设备捕获媒体数据,需要从它的CaptureDeviceInfo对象中获取这个设备的位置信息MediaLocator。可以用MediaLocator直接构建一个Player或者Processor。还可以用MediaLocator构建一个DataSource作为Player的输入。当Play开始的播放的时候,就开始捕获过程。
一个捕获设备通常有一系列属性可以进行配置。通常控制分为2种,一种是端口控制PortControl,另一种是监视MonitorControl。可以通过调用捕获DataSource的getControl方法,来获取这两种控制对象。
和其他的控制对象一样,对于PortControl或者MonitorControl都可以通过调用getControlCompent方法来得到它们的可视化组件。这些组件可以添加到Applet中或者应用程序中,这样用户可以和这些控制对象交互。
处理显示控制组件,还可以显示标准的Player控制组件。
1.3如何使用RTP接收和发送流媒体数据
JMF Player 和 Processor 可以提供显示、获取、转换RTP 数据流的机制。
可以按照标准的方式通过Manger为RTP数据流创建Player。使用包含RTP Session的MediaLocator作为参数,调用Manager的createPlayer(MediaLocator)来创建Player。也可以用某个接收数据流的DataSource作为参数来创建Player。
如果用MediaLocator作为参数来创建Player, Player 只会显示Session中检测到的第一个RTP 数据流。如果想播放Session中的所有视频流,则需要调用SessionManager为每个接收数据流创建一个Player。
当使用MediaLocator为RTP Session 创建Player,Manager为Session中的第一个数据流创建Player。当检测到数据时,Player发出RealizeCompleteEvent。
通过监听RealizeCompleteEvent,可以确定数据是否到了以及Player是否可以播放任何数据。一旦Player发出这个事件,就可以获取Player的可视组件和控制组件。
要注意的是,如果在没有检测到Session中数据时,Player 是不会结束Realizing状态的。对于Rtp 媒体流Player 不能试图调用Manager的CreateRealizedPlayer。如果调用,会引起死锁。
1.4如何在网络发送流媒体数据
在发送RTP数据流之前,需要应用Processor产生RTP编码的数据源。通过构建一个SessionManager或者是DataSink来控制传输过程。
Processor处理器的输入可以是现有的媒体文件,也可以是实时捕获的数据。对于现有的媒体数据,可以使用MediaLocaotr来代表媒体文件。并根据MediaLocator来创建Processor。对于捕获的媒体数据,一个捕获数据源Capture DataSource 会用作Processor的输入。
有两种方式来发送RTP数据流,一种是用MediaLocator作为RTP session的参数,调用Manager的createDataSink方法来创建一个RTP DataSink。另一种方式是利用session manager 来创建发送数据流,并控制传输过程。
当利用MediaLocator来构建RTP DataSink的时候,你只能发送DataSource中的第一个数据流。如果需要在一个进程中发送多个RTP数据流或者需要监控进程的统计状态,就需要直接使用SessionManager。
无论采用哪种方式传输RTP数据流,都需要做如下工作:
1、使用DataSource创建Processor,这个DataSource代表你要传输的数据
2、设置Processor的输出为RTP 编码的数据
3、取得Processor的输出作为DataSource
二.具体的试验-应用JMF开发视频应用
2.1配置开发环境
需要J2SDK,JRE1.42, JMF Windows Performance Pack,JMF 的 下载地址:http://java.sun.com/products/java-media/jmf/2.1.1/setup.html 针对WINDOWS 用户,可下载Windows Performance Pack。只有安装Windows Performance Pack才支持视频、音频捕获。下载后会自动安装,自动配置路径。安装后需去测试一下是否安装成功。测试地址:http://java.sun.com/products/java-media/jmf/2.1.1/jmfdiagnostics.html
2.2用APPLET在浏览器中播放视频短片
在浏览器中实现APPLET 视频播放中用到了两个基本概念 manager ,和player。JMF APPLET 是播放视频文件的过程是这样的。首先,提供媒体文件的位置作为创建PLAYER的参数。Player创建后会根据媒体文件的格式寻找解码器,并且进行初始化。然后为PLAYER 添加一个ControllerListener,用来监听PLAYER的状态。通过监听player 的状态采取不同的措施。在Player 发出RealizeCompleteEvent的时候,可以获取player 的VisualComponent 宽度,高度,VisualControllpane的宽度,高度。最后一步调用player的start方法,就可以显示媒体文件的内容了。如果不使用PLUGIN,JMF 只支持标准的AVI,MOV,WAV 文件。对于流行的MPEG4视频文件,MP3并不支持。通过安装解码器,可以播放这些文件。
2.3采集摄像头数据
采集摄像头数据,需要两步工作。连接视频设备,然后获取视频设备的数据。视频,音频设备在Jmf Performance Pack 安装时会在JMF Registry中注册自己的设备名。需要连接摄像头时,可以通过查找摄像头的设备名来连接摄像头。具体的实现步骤,首先要得到Device的名字,有两种方法可以办到,
方法一
通过菜单,把系统支持的Device都列出来,根据客户的选择来确定。
方法二
用程序来判断。在第二种方法中,通过传递一个Format 对象到CaptureDeviceManager的getDeviceList 方法中,获得Device的名字。得到Device 的名字以后,可以获得CaptureDeviceInfo,从而得到MediaLocator。第一部分连接摄像头的工作就完成了。下一步工作是捕获摄像头视频,并显示出来。有视频设备构成的数据源可分为2种,例如照相机这种设备,属于Pull DataSource,用的时候才使用。类似于摄像头这种设备构成的数据源属于Push Datasource,源源不断的发送视频数据。以获取的MediaLocator 作为参数构建Player,就可以播放摄像头内容了。
2.4获取摄像头视频数据和麦克风音频数据
基本步骤是首先获取视频、音频捕获设备的信息,然后再根据取得的设备信息确定设备的位置。找到设备的位置以后,调用Manager的CreatePlayer方法创建Player,当Player开始播放的时候,就开始了捕获的过程。
有多种方法获得捕获设备信息,可以通过查询指定的格式,也可以查询特定的设备名字。具体步骤如下:
1. 先把所有的捕获设备调出来
2. 所有的视频捕获设备的名字都是以vfw开头的,所以取得捕获设备列表中以vfw 开头的设备名字就是视频捕获设备
3. 获取设备的medialocator地址
4. 创建Player,当Play开始的时候,就开始了视频捕获的过程
2.5保存摄像头数据为视频文件
首先是找到捕获设备,然后取的捕获设备的位置信息。如果要保存所采集的数据,就要创建一个处理器。然后将处理器的输出作为数据池的输入。当启动数据池的时候,就可以把捕获的数据保存成文件了。具体步骤如下:
1. 获取视频捕获设备的medialocator地址
2. 以获取的medialocator为参数,创建Processor
3. 设置Processor,输出类型为AVI格式
4. 以Processor的输出为参数,创建数据源
5. 建立一个保存文件位置的MediaLocator
6. 以输入数据源和输出数据源为参数,建立一个DATASINK
7. 调用Processor的StreamWriterControl,设置Processor控制生成文件的大小
8. 设置完毕,可以启动Processor和DataSink来保存捕获数据了
2.6 捕获音频、视频数据为QuickTime格式的文件
使用处理器模型来捕获实时的视频、音频数据并且将数据轨道进行编码、混合,最后保存为QuickTime 格式的文件。
首先构建一个处理器模型,设定好特定的数据轨道和输出内容格式。然后使用这个处理器模型来创建一个处理器。处理器会自动连接到符合文件格式要求的捕获设备。具体步骤如下:
1. 设定要输出的音频格式和视频格式
2. 设定要输出的文件类型为QuickTime格式
3. 以数据轨道输出格式和文件输出类型为参数,创建ProcessorModel
4. 由ProcessorModel对象创建Processor对象
5. 以Processor的输出为参数创建数据源
6. 建立一个记录保存文件的MediaLocator
7. 创建DataSink
8. 开始保存数据文件,启动处理器
9. 当结束捕获视频时,停止处理器,并关掉它
10. 当数据池接到EndOfStream事件时,停止保存文件。
2.7 发送实时媒体数据
如果需要将媒体数据发送到网络,首先需要用Processor生成RTP编码的数据源,然后创建SessionManager或者DataSink来控制传输过程。具体步骤如下:
1. 获取视频采集设备
2. 创建Processor,连接到视频采集设备
3. 等待,直到processor的状态变成configured,设置输出格式为RAW_RTP
4. 列出所有的和数据轨道相关的控制器
5. 遍历这些控制器,找到可以控制输出格式的控制器
6. 找到了数据轨道的格式控制器之后,设置输出格式,输出格式输出为VideoFormat.JPEG_RTP
7. 准备工作已经做好,可以调用Processor的realize方法
8. 当Processor进出realized状态以后,可以取得Processor的输出作为数据源
9. 可以把这个数据源作为参数传递给manager,通过manager创建一个RTP的数据池。
10. 先设置一个发送数据流的多播目的网址
11. 确定了数据源和发送地址,可以建立数据池DataSink了,建立成功后调用open()和start()方法,就可以在网上以多播方式发送捕获的内容了
2.8 接收实时视频数据
接收网上传输的数据流时,首先要构建一个MediaLocator来描述RTP 进程,Manager为进程中的第一个数据流创建播放器,当从进程中检测到数据时,Player会发出RealizeComplete事件。
通过监听RealizeComplete事件,你可以确定是否有数据到了,还可以确定Player是否准备好播放数据了。当Player发出这个事件时,就可以获取播放器的可视面板和控制面板了。具体实现步骤如下:
1. 确定RTP 数据源的地址,例如:String url= "rtp://224.144.251.104:49150/audio/1"
2. 以RTP数据源地址为参数,创建MediaLocator
3. 以MediaLocator为参数,创建Player
4. 为PLAYER添加监听器,以便监听RealizeComplete事件
三. 实验效果总结
JMF2.0 支持媒体捕获,并且考虑到了程序开发者需求。允许程序开发者在媒体处理、媒体控制上添加自己的控制器。JMF 提供的插件的架构使得直接访问媒体数据成为可能。这样JMF可以更方便的被扩展。JMF的设计目的是使开发简便、支持媒体捕获、支持使用JAVA技术开发媒体传输以及视频会议等应用、支持高级开发者开发插件扩展JMF应用,新的特性还可以和原有的系统很好的融合。允许开发者开发定制的,可下载的编码器、处理器、分离器和组合器。
JMF的类库还可以提供对RTP(实时传输协议)的支持。RTP支持在网上实时的发送、接收媒体流。RTP可以用在开发视频点播、音频点播或者网上的交互内容服务等应用。
四. 进一步的研究工作
本文研究了JAVA视频应用基本内容,为进一步扩展JMF的应用开发打下了基础。在这一段的研究中积累的很多经验。由于时间的关系,只是初步了解了如何通过插件技术扩展JMF的应用能力。今后需要做的主要研究工作和研究方向主要有
1、编写解码器插件,扩展JMF的应用能力。使得JMF可以支持更多的媒体类型;
2、编写处理器插件,增强JMF的视频处理能力,使得JMF的视频编辑能力更强。
----------------------------------------------------------------------
转载的就是转载的。。。。很牛......
发表评论
-
SLF4J这东西太邪恶了
2011-09-02 23:54 929版本弄得乱七八遭的。动不动就报错。 老子恨他不是一年两年了! ... -
每秒多少次是怎么算出来的?
2011-08-05 15:47 1121看到有的大拿写他写的程序执行效率高,每秒多少次,多少次,这个次 ... -
最简获取文件扩展名
2011-05-10 15:42 3468写道 fileName.replaceAll(" ... -
log4j.properties记录
2010-04-06 15:21 939log4j.rootLogger=All,A1,A2,A3 ... -
全面的汉字转拼音与读音包
2009-10-30 23:28 1773最近因需要做汉字转拼音的一个小功能,上网找了一些,不是很好用, ... -
JFreeChart1.0.13API
2009-04-26 01:34 1560方便自己看,也拿出来,方便大家看:)希望有用吧~ -
JTree 的装饰器演示
2009-01-05 10:13 1412今天工作中,遇到小问 ... -
JTree with CheckBox
2009-01-05 08:59 3375Let me explain what is "JT ... -
全半角转换
2008-12-07 21:09 1074[size=medium]/** * 半角转全角 ... -
Java调用jacob出错问题:java.library.path解决
2008-11-10 10:22 8284关于java使用jacob.jar调用word的配置问题 最 ... -
使用JMF播放音乐
2008-11-08 23:48 4100[size=medium]转载的!! JMF现在还不支持WM ... -
处理文件夹有空格问题及按系统方式打开文件
2008-10-31 09:37 3085[size=medium]取得文件路径: String fil ... -
创建数组的几种方式
2008-10-26 14:35 1322在C语言中: Example: 1、 int nu ... -
java中实现IP地址的各种表现形式之间的转换
2008-10-24 11:34 1400[size=medium]class ip { pri ... -
HttpClient之Session维持
2008-10-23 18:15 10717由于需要,用到了HttpClient在网上查阅了很多资料 ... -
在Swing UI界面定义默认获得焦点的组件
2008-10-23 09:49 8941最近写了个小的UI界面的程序.程序运行后,为方便使用,应该自动 ... -
Serializable java序列化
2008-10-21 14:57 1502[size=medium]Bean Serializable ...
相关推荐
标题 "jmf" 指的是 Java Media Framework (JMF),这是一个开源的Java平台,用于处理多媒体数据,如音频和视频。JMF 提供了一种框架来播放、捕获、处理和传输媒体内容。在描述中提到的博客链接可能是关于 JMF 的一个...
Java Media Framework (JMF) 是一个用于开发多媒体应用程序的Java平台框架。它是Java开发者用来处理音频、视频和其他基于时间的媒体内容的工具。JMF允许在Java Applet和应用程序中集成多媒体功能,使得开发者能够...
《JMF667主控SSD开卡工具详解》 在存储技术领域,固态硬盘(Solid State Drive,简称SSD)凭借其高速度、低延迟的优势,逐渐成为主流的存储设备。其中,主控芯片是SSD的核心组件,它负责管理数据的读写、错误校验...
Java Media Framework(JMF)是Java平台上用于处理多媒体数据的一个开放源代码框架。这个"jmf-2_1_1e-windows-i586.exe"是JMF的特定版本,适用于Windows操作系统,尤其是32位(i586)系统。它的主要功能包括播放、...
标题中的“JMF608MP_2.03.059.rar”指的是一个名为“JMF608MP”的设备或软件的版本号为2.03.059的更新压缩包,文件格式为RAR,通常用于存储多个相关文件。RAR是一种流行的压缩格式,它能更有效地压缩数据,比ZIP等...
### JMF605 固态硬盘 DIY 方案解析 #### 一、JMF605 芯片概述 JMF605 是一款专为固态硬盘(SSD)设计的主控芯片,适用于半瘦型 SSD 模块。该芯片支持多种 NAND Flash 存储类型,并具备强大的数据管理功能,如磨损...
Java媒体框架(JMF,Java Media Framework)是Sun Microsystems公司开发的一个开源框架,主要用于处理音频、视频和流媒体内容。这个框架为Java开发者提供了一种在应用程序中集成多媒体功能的方法,使得开发者能够...
智微科技发布了JMF608和JMF609固态硬盘主控制器的NAND Flash颗粒支持列表。这一列表详细列出了这两个控制器所支持的NAND Flash芯片型号,并且提供了一个文档编号608-00002以及修订版本0.6,发布日期为2014年5月9日。...
Java Media Framework (JMF) 是一个开源的Java平台,它为开发人员提供了处理音频、视频和多媒体应用的能力。JMF 提供了丰富的接口和类,使得开发者可以方便地集成和播放各种多媒体内容。在本资源中,我们有两个关键...
Java Media Framework(JMF)是Java平台上用于处理多媒体数据的一个框架。这个下载包包含了与`java.media`相关的组件,主要用于开发能够播放、捕获、处理和流化音频、视频的应用程序。下面将详细介绍JMF的核心功能、...
标题 "JMF605_xiufu.zip" 所涉及的是一个专为基于JMF605芯片的固态硬盘(SSD)设计的修复工具包。这个压缩包包含了多份文件,用于帮助用户在没有专用修复接口卡的情况下,通过USB转SSD转换线自行对SSD进行故障排查和...
"JMF.zip_JMF W_Java 播放器_hookqq_jmf_jmf-2_0-spec"这个压缩包包含了一个基于Java开发的媒体播放器示例,适用于初学者学习和理解JMF的用法。 JMF的核心是其组件模型,它支持多种媒体格式,包括音频、视频和流...
【基于JMF的MP3播放器】是一款利用Java Media Framework(JMF)技术开发的音频播放软件,专注于播放MP3格式的音乐文件。这个播放器不仅具备基础的播放功能,如播放、暂停、停止和音量控制,还支持列表播放,用户可以...
Java Media Framework (JMF) 是一个开源的Java平台,用于处理多媒体数据,如音频、视频和流媒体。它为开发者提供了在Java应用程序中集成多媒体功能的能力。本开发指导将深入探讨JMF的各个方面,帮助你理解和掌握其...
### JMF605开卡教程详解 #### 一、前言 在现代电子设备制造过程中,存储卡的初始化设置,即所谓的“开卡”,是一项非常重要的步骤。它确保了存储卡能够正常工作并达到最佳性能。本文档将详细介绍如何使用...
【标题】"jmf605量产工具"指的是专门针对JMF605主控芯片进行批量生产的软件工具。在闪存存储设备如USB闪存盘、SD卡等的制造过程中,量产工具起到了至关重要的作用,它能进行格式化、分区、写入固件、性能测试等一...
**Java Media Framework (JMF)** 是Oracle公司提供的一款开源多媒体框架,主要应用于开发音视频处理和播放的应用程序。标题中的"jmf-2_1_1e"指的是JMF的一个特定版本,即2.1.1e。这个版本是专为Windows操作系统设计...
程序描述:用JMF2.0做的调用摄像头 进行视屏录制,是 医学上“内镜”影像学录像和截图的简单DEMO。 完整的MyEclipse项目,含有源码和所需的JAR包,编译完成有直接运行com.jake.camera.LocalVideoTest就可出现录制...
JMF2.1 Java媒体框架(JMF)使你能够编写出功能强大的多媒体程序,却不用关心底层复杂的实现细节。JMF API的使用相对比较简单,但是能够满足几乎所有多媒体编程的需求。在这篇文章中,我将向你介绍如何用很少的代码...
Java媒体框架(JMF,Java Media Framework)是一个用于开发多媒体应用程序的开源框架,它允许开发者在Java环境中处理音频、视频等各种多媒体数据,而无需深入理解底层的复杂技术细节。JMF提供了一组丰富的API,使得...