作者:金良([email protected]) csdn博客:http://blog.csdn.net/u012176591
1.下载可在多个平台下使用的jmf开发用的jar包:
去Oracle,下载jar包,如下图:
下载红色方框内的压缩文件,解压得到4个jar包:jmf.jar,mediaplayer.jar,multiplayer.jar和customizer.jar
把它们引入Eclipse的JMF开发项目,就可以进行JMF开发了:
程序运行如下:
工程项目和jar包,视频文件的连接http://download.csdn.net/detail/u012176591/7453299
JMF支持的视频格式:http://www.oracle.com/technetwork/java/javase/formats-138492.html
问:什么是 Java Media Framework API (JMF)?
Java Media Framework API (JMF) 为在 Java 应用程序和小程序中同步并控制音频、视频和其他基于时间的数据指定了一个简单、统一的架构。
对于此常见问题解答来说,“JMF”或“JMF API”指 Sun 提供的规范(如通过 javadoc 生成)以及随规范一起提供的参考实现。
JMF 1.0 API 指定播放行为,由 Sun Microsystems, Inc.、Silicon Graphics Inc. 和 Intel Corporation 共同开发。
JMF 2.0 API 指定播放、捕获、传输和代码转换行为,由 Sun Microsystems, Inc. 和 IBM 共同开发;这两家公司合作推出 JMF 2.0 参考实现。
问:什么是 JMF 1.0?
JMF API 是分阶段开发的。JMF 1.0 又称为“Java Media Player”,是 JMF API 的第一个版本,专注于媒体“播放”,即同步、控制、处理和播放压缩的流和存储的基于时间的媒体(如音频、视频和 MIDI)。
Sun 针对 Windows 和 Solaris 发布了两种 JMF 1.0 参考实现。
问:什么是 JMF 1.1?
这是一个次要版本,新增了完全采用 Java 编程语言编写的两个 JMF 版本,允许 JMF 用于所有 JDK 1.1 Java 兼容系统。
注意这不是新的 API 版本;针对 Sun Microsystems, Inc. 提供的 JMF 1.0 和 1.1 实现使用相同的 JMF 1.0 API。
问:什么是 JMF 2.0?
JMF 2.0 是 JMF API 的第二个版本。其中 JMF 1.0 和 1.1 为基于时间的媒体提供通用播放器,JMF 2.0 包括媒体捕获、流式传输、代码转换、可插拔编解码器架构以及对媒体数据的更广泛控制,以便开发人员可以进行更大程度的自定义和优化。
Sun 和 IBM 合作定义 API 并发布三种 JMF 2.0 示例实现:一种完全采用 Java 编程语言编写,另两种是针对 Solaris/SPARC 和 Windows 的优化版本。
问:什么是 JMF 2.1?
这是一个次要版本,增加了 SunRay 和 Linux 支持,增加了对基于 RTP 的开放标准视频服务器(如Apple 的 Quicktime 流服务器)以及多个错误修复和优化的支持。
注意这不是新的 API 版本;针对 Sun Microsystems, Inc. 提供的 JMF 2.0 和 2.1 实现使用相同的 JMF 2.0 API。
问:什么是 JMF 2.1.1?
这是一个 build 版本,包含新特性和优化,包括:
注意 JMF 2.0 API 稍有更新以包括改进的 RTP 接口,但仍然向后兼容旧 API。它依旧称为 JMF 2.0 API,但日期标为 2001 年 3 月 10 日。JMF 2.1.1 参考实现基于这一新的 API。
问:如何提供有关 JMF 2.0 API 的反馈?
这个单向电子邮箱直接转至 JMF API 设计人员。
注意 JMF 2.0 API 已被冻结。我们仍然欢迎您提供反馈,并在制定未来 JMF API 规范时考虑反馈。
问:如何获得 JMF 源代码?
根据 Sun 社区源代码许可 (SCSL) 计划提供 JMF 源代码;下面概述如何使用源代码。
对于非商业用途:
SCSL 允许针对非商业、评估和/或研究用途发布源代码。SCSL 就像开源模型那样创建了广泛使用的软件源代码社区,但按照我们的许可要求,有两个明显不同之处,如下所示:
如果客户想要随后使用 JMF 源代码发布商业产品,则必须与 Sun 签署 SCSL 商业用途附件(参见下面内容)。
对于商业或内部部署用途:
如果客户想要准许 JMF 源代码用于商业产品,则必须与 Sun 签署 SCSL 商业用途附件。此许可将要求客户准许 JMF Base Porting Kit (BPK),它包括 JMF Technology Compatibility Kit (TCK)。客户必须同意针对 JMF 通过所有 TCK 测试,然后再推出商业产品。
BPK 包括:
问:JMF 主页在哪里?
可以从主页下载 JMF 软件和文档,网址为http://java.sun.com/javase/technologies/desktop/media/jmf
问:在哪里可以提出有关 JMF 的问题?
可以将有关 JMF 的问题以电子邮件形式发送至 [email protected]
通过这一通用的公共电子邮件论坛,JMF 开发人员可以解答问题并帮助其他开发人员了解 JMF。
问:如何报告 JMF 错误?
报告 JMF 错误
这个单向电子邮箱直接转至 JMF 开发人员。请在报告中包括有关所发现错误的更多信息,包括
远程调试问题会非常棘手,因此您可以发送的任何信息都将很有帮助。
问:有 JMF 相关图书吗?
有。下面是我们知道的图书。
Java - How to Program, 4th ed.(包括 JMF 2.0 和 Java Sound)
作者:Deitel 和 Deitel
由 Prentice Hall 出版
ISBN 0-13-034151-7
Core Java Media Framework(包括 JMF 1.0)
作者:Linden deCarmo
由 Prentice Hall 出版
ISBN 0130115193
Essential JMF:Java Media Framework(包括 JMF 1.0)
作者:Gordon 和 Talley
由 Prentice Hall 出版
ISBN 0130801046
Programming with the Java Media Framework(包括 JMF 1.0)
作者:Sullivan、Winzeler、Deagen 和 Brown
由 John Wiley and Sons 出版
ISBN 0471251690
如果您知道未在此列表中的图书,请告知我们,以便将其添加在此列表中。填写 JMF 反馈表单
问:Java Sound API 如何与 JMF 相关?
JMF 使用 Java Sound API 播放声音。此 API 将在 J2SE 1.3 中成为核心 API。它还与 JMF 捆绑在一起,这允许在 JDK 1.1.x 平台上提供卓越的声音功能。
可以在 http://java.sun.com/products/java-media/sound 中找到有关 Java Sound API 的更多信息
问:在哪里可以找到 JMF 2.1.1?
可以从 http://java.sun.com/javase/technologies/desktop/media/jmf 下载 JMF 2.1.1
问:JMF 2.1.1 与 JMF 1.1 有何不同?
JMF 1.1 API 软件专注于媒体播放,并针对 Java、Windows 和 Solaris/SPARC 平台发布了参考实现。
JMF 2.1.1 API 软件添加了对捕获、传输(流)和代码转换(从一种媒体格式更改为另一种格式)的支持,并且还添加了新编解码器和新插件架构,可通过此架构将新编解码器和结果轻松集成到框架中。它还针对 Java、Windows 和 Solaris/SPARC 平台发布,并且也可用于 Blackdown.org 提供的 Linux。
问:JMF 2.1.1 支持哪些媒体类型?
JMF 2.1.1 支持各种媒体类型,包括
*MP3 仅在 Windows 平台上受支持。
有关一组完整的格式,请查看:http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/formats.html
问:可以使用 JMF 2.1.1 播放 CD 或 DVD 吗?
不可以。JMF 2.1.1 不支持音频 CD 或 DVD 播放。
您可以通过一种不受支持的方法来使用 Windows 性能包版本的 JMF 2.1.1 播放音频 CD!假设您的 CD-ROM 驱动器映射到 E:,可以使用 URL“file:/E:/Track01.cda”等播放 CD 曲目。
问:可以使用 JMF 2.1.1 在小程序中播放电影吗?
可以。您可以使用 jmf.jar 文件中包括的 SimplePlayerApplet 或编写自己的小程序。请参见SimplePlayerApplet。
问:JMF 2.1.1 支持流吗?
支持。JMF 2.1.1 提供了 RTP/RTSP 流支持。
JMF 2.1.1 还在客户端提供 HTTP 和 FTP 流支持。
问:可以扩展 JMF 2.1.1 使用自己的编解码器吗?
可以。JMF 2.1.1 具有新的插件架构,允许您向框架中添加新的编解码器和效果。
您还可以创建自己的自定义数据源和播放器,以便分析和播放未与 JMF 2.1.1 捆绑在一起的新媒体类型
可以在 JMF 网站上提供的《JMF 程序员指南》中找到有关此操作的更多信息,网址为http://java.sun.com/javase/technologies/desktop/media/jmf
问:可以使用 JMF 2.1.1 捕获音频和视频吗?
可以。JMF 2.1.1 提供了捕获功能,因此您可以从录制或实时媒体源中进行捕获。在 Solaris 上,支持 SunVideo 和 SunVideo Plus 卡。在 Windows 上,支持具有 VFW 驱动程序的大多数视频捕获设备。有关已经过测试的视频捕获设备列表,请查看:http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/formats.html
纯 Java 版本的 JMF 2.1.1 不支持视频捕获,因为在 JDK 中未将视频捕获作为核心功能提供。音频捕获仅在 J2SE 1.3 上受支持,其中因为在 J2SE 1.3 中包含 Java Sound API 而引入了音频捕获。
注意,Java Sound API 允许低级声音捕获;JMF 2.1.1 使用此 API 播放声音,并将 Java Sound 与它自己的下载捆绑在一起。这意味着您可以使用 Java Sound 捕获声音,而根本不必使用 JMF 2.1.1。
有关 Java Sound API 的更多信息,请查看 http://java.sun.com/products/java-media/sound
问:JMF 2.1.1 在哪些平台上运行?
JMF 2.1.1 将在 Windows 95/98/NT 4.0/2000、Solaris/SPARC 和任何 Java 兼容平台上运行。纯 Java 版本的 JMF 2.1.1 现在仅在 Apple 的 MRJ 2.1.4 上运行;但存在音频/视频同步问题,因为 Apple 向此 MRJ 中添加了一个 6 秒音频缓冲区。
问:JMF 2.1.1 在哪些版本的 JDK 上运行?
JMF 2.1.1 在运行 JDK 1.1 或更高版本的 Java 兼容平台上运行。为了实现完整的 2000 年合规性,您应该使用 JDK 1.1.6 或更高版本。
问:可以在浏览器中运行 JMF 2.1.1 吗?
可以。JMF 2.1.1 在运行 JDK 1.1.6 及更高版本的 Java 兼容平台上运行。
您可以将 JMF 与以下浏览器一起使用:
问:JMF 2.1.1 与哪些 RTP/RTSP 流服务器一起使用?
JMF 2.1.1 已经过测试,可与以下工具和应用程序互操作:
问:JMF 2.1.1 遵从 2000 年合规性吗?
遵从。注意,您必须在 2000 年认证的 JVM(如 JDK 1.1.6 或更高版本)上运行它。
问:什么是 JMStudio?
JMStudio 是一个示例应用程序,作为 JMF 2.1.1 包的一部分提供。它包含在 jmf.jar 文件中,可以使用“java JMStudio”命令运行。这个基于 GUI 的工具提供播放、捕获、传输和代码转换功能。
问:什么是 JMF 注册表?
JMF 2.1.1 在名为 jmf.properties 的文件中维护一个可用插件、程序包前缀和其他设置的注册表。这是一个二进制文件,仅应使用提供的 JMFRegistry 应用程序进行修改。此应用程序是 JMF 2.1.1 jmf.jar 文件的一部分,并且可以作为“java JMFRegistry”运行。它要求您在 CLASSPATH 中具有 Swing-1.1(或者您可以使用 JDK 1.2 或更高版本)。
问:什么是 JMF 诊断?
JMF 网站上有一个包含嵌入式 JMF 小程序的诊断页面,此页面将检查您是否已在系统上正确安装了 JMF。请查看:http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/jmfdiagnostics.html
问:如何关闭 HTTP/FTP 缓存?
默认情况下,在播放过程中 http 和 ftp 源缓存到本地磁盘。要针对这些源禁用缓存,您可以使用以下调用:
Manager.setHint(Manager.CACHING, new Boolean(false));
关闭缓存可导致性能低下,除非您快速连接到互联网(内联网)并且文件可流化。包含单一曲目(仅音频或仅视频)的文件将流畅播放而无需缓存,前提是数据使用速率不快于下载速率。
只有在创建并实现播放器之前进行设置,上述提示才有效。在开始播放之后进行设置,可能没有任何效果。
问:使用 Java 2 运行 JMF 小程序时存在安全问题吗?
如果在计算机本地安装 JMF,运行 JMF 小程序不会有任何安全问题。如果未在本地安装 JMF,JMF 小程序可能无法执行某些功能,如播放在本地存储的媒体文件或在本地保存媒体文件。此类操作被视为具有高风险,并通过 Java 2 安全管理器进行保护。如果用户选择允许进行保护,他/她可以使用策略文件执行此操作。下面是用户可能需要选择性地启用的几个设置:
对于播放在本地存储的媒体文件:
permission java.io.FilePermission "<directory to read from>/*", "read";
对于所有 java 音频播放:
permission java.lang.RuntimePermission "accessClassInPackage.sun.misc";
permission java.lang.RuntimePermission "accessClassInPackage.sun.audio";
要允许 JMF 修改运行时线程优先级:
permission java.lang.RuntimePermission "modifyThread";
permission java.lang.RuntimePermission "modifyThreadGroup";
对于加载原生库:
permission java.lang.RuntimePermission "loadLibrary.*";
对于写入 JMF 日志文件:
permission java.io.FilePermission "${user.dir}${/}jmf.log", "write";
对于 HTTP、FTP 和 RTP:
permission java.net.SocketPermission "*", "connect,accept";
permission java.util.PropertyPermission "user.name", "read";
要允许在临时目录中下载缓存:
permission java.io.FilePermission "/tmp/*", "write";
permission java.io.FilePermission "/tmp/*", "delete";
对于录音:
permission javax.sound.sampled.AudioPermission "record";
策略文件应允许仅针对用户信任的小程序使用这些权限;为此,可以在策略文件中的“grant”关键字之后指定“codeBase”。codeBase(实质上为代码源位置)应指向包含 jar 文件的 url。用户还可以选择通过“signedBy”参数指定受信任的实体;只有受信任的实体签名的代码才会获得权限。有关更多信息,请参见: http://java.sun.com/products/jdk/1.2/docs/guide/security/PolicyFiles.html
问:可以使用 JMF 2.1.1 从小程序中捕获音频或视频吗?
默认情况下(出于安全原因),JMF 2.1.1 不允许从小程序中进行捕获。用户可以使用 JMFRegistry 启用此功能。
运行“java JMFRegistry”,选择 UserSettings 选项卡并选中“Allow Capture From Applets”。如果浏览器的安全性允许加载原生库,您现在能够从小程序中捕获音频/视频。
问:在 JMF 2.1.1 中可以在小程序中保存文件吗?
默认情况下(出于安全原因),JMF 2.1.1 不允许在小程序中保存文件。用户可以使用 JMFRegistry 启用此功能。
运行“java JMFRegistry”,选择 UserSettings 选项卡并选中“Allow File Writing for Applets”。如果浏览器的安全性允许加载原生库,您现在能够从小程序中保存文件。
问:如何同时捕获音频和视频?
您必须针对音频和视频捕获设备创建 DataSource,并使用 MergingDataSource(请参见 javax.media.Manager)将它们合并为一个数据源。
问:JMF 支持通过网络传输的流媒体吗?
支持,JMF 支持使用公共标准 RTP 和 RTSP 协议的流媒体。
问:什么是 RTP?
RTP 是实时传输协议。下面是 RTP 规范的节选:“RTP 提供了适用于应用程序的端到端网络传输功能,这些应用程序通过多播或单播网络服务传输实时数据,如音频、视频或模拟数据。RTP 不解决资源预留问题,不保证实时服务的服务质量。数据传输通过控制协议 (RTCP) 增强,允许以可扩展到大型多播网络的方式监视数据传递,并提供最少的控制和识别功能。RTP 和 RTCP 旨在独立于底层传输和网络层”。有关更多信息,请参见 RFC 1889:RTP:适用于实时应用程序的传输协议。
问:什么是 RTSP?
RTSP 是实时流协议。它是应用程序级别协议,用于控制实时数据(如音频和视频)的传递。数据源可以包括实时信源和已存储的剪辑。RTSP 相当于媒体流的电视远程控制。您可以在服务器端启动和停止流(视频点播类型应用程序)。有关更多信息,请参见 RFC 2326:实时流协议 (RTSP)。
问:JMF 支持哪些 RTP 特性?
JMF 支持通过 RTP 传输和接收各种媒体格式的媒体。有关支持的默认格式列表,请查看:http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/support-rtp.html
它还完全支持 RTCP。此外,JMF 实现“适用于具有最少控制的音频和视频会议的 RTP 配置文件”— RTP/AVP。
前端 GUI 应用程序 JMStudio 可用作独立应用程序,以便传输和接收 RTP 流。要使用 JMF 作为框架来实现自定义 RTP 应用程序,请查看解决方案页面上的 RTP 示例:http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/index.html
问:JMF 支持哪些 RTSP 特性?
JMF 支持客户端 RTSP 以便接收和播放。RTSP 协议栈内置于播放器中,可以通过 Manager.createPlayer() 接口和 RTSP 媒体定位器访问播放器。
JMF 与其他基于标准的 RTSP 服务器互操作。有关详细信息列表,请查看 RTSP 支持页面:http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/support-rtsp.html
问:JMF 2.1.1 与哪些 RTP 流服务器一起使用?
JMF 2.1.1 已经过测试,可与以下工具和应用程序互操作:
问:JMF 支持服务器端 RTSP 吗?
目前,JMF/RTSP 栈只能通过仅支持播放示例的 Manager.createPlayer() 接口访问。没有服务器与 RTSP 栈通信必需的公共接口。
问:可以使用 JMF 开发会议应用程序(视频会议、音频聊天室等)吗?
JMF 确实提供了基本构建块,以便会议应用程序通过 RTP 传输和接收媒体。如果将 JMF 与 H.323 等会议协议结合使用,可以在 JMF 上构建功能完备、基于标准的会议解决方案。
问:在 JMF 上构建 H.323 会议应用程序涉及哪些步骤?
您需要实现包括 H.245(会议控制)和 T.120(数据会议)的 H.323 协议栈以启动会议建立,传送与会者/端点信息等。建立会议之后,您可以使用 JMF 实现进行打包传输和播放。
问:使用 JMF 开发服务器/客户端流应用程序时从何处入手?
您可以先在我们的网站上查看解决方案,网址为:http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/index.html
您将在那里找到突出 JMF 不同方面的各种示例程序。例如,对于 RTP 传输,请查看 AVTransmit。
问:应该使用哪些编解码器满足低带宽要求?
对于低带宽视频,请使用 H.263。对于音频,GSM、G.723、DVI 是不错的选择。
问:可以从 RTP 传输中接收媒体并将其记录到文件吗?
可以。您可以使用 JMStudio 上的“导出”特性完成此操作。为了实现自定义应用程序以将数据写入文件,您可以从 ReceiveStream 中检索 DataSource。然后使用 DataSource 创建 Processor 对数据进行处理和代码转换。然后,可以使用从此 Processor 中输出的数据创建一个文件写入 DataSink 以进行保存。有关更多详细信息,请查看代码转换示例:http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/Transcode.html
问:可以在同一 RTP 会话中发送音频和视频流吗?
不可以,因为 RTP 规范建议在两个不同的会话中发送音频和视频流。
问:如果音频和视频流在不同的 RTP 会话中传输,那么必须执行哪些操作来同步它们?
JMF 支持根据在 RTP 规范中指定的模型,通过 RTP 同步音频和视频。每个 RTP 数据流与对应的 RTCP 流匹配以便正确地确定媒体时间戳。然后,使用时间戳同步从用户那里发送的流,此用户通过自己的 cname(规范名字)标识。即使从不同会话 (RTPManager) 中发送流时,来自同一用户的流只要全部带有相同的 cname,便会同步这些流。
因此,从编程角度来看,如果您针对音频和视频创建两个会话 (RTPManager),则需要确保两个会话使用相同的 cname(在 SourceDescription 内)初始化,以便保证音频/视频同步。
有关更多详细信息,请查看解决方案页面上的 AVTransmit:http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/AVTransmit.html
问:可以在一台主机上单播流吗?
可以。如果用于发送端和接收端的两个 RTPManager 对象没有绑定到同一端口,可以执行此操作。您需要设置一个从端口 A 到端口 B 的传输。在此主机上,第一个 RTPManager 绑定到端口 A,并从端口 A 传输到端口 B。第二个 RTPManager 绑定到端口 B,在端口 B 上接收 RTP 数据,并将 RTCP 反馈从端口 B 发送到端口 A。
您可以尝试 JMF 解决方案页面上的传输和接收示例,以便在一台主机上配置单播会话:
有关更多信息,请查看:http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/index.html
问:可以将 RTP 发送到自定义传输层(如 ATM)或从其中接收 RTP 吗?
可以,您需要实现 RTPConnector。RTPSocketAdapter 是我们网站上提供的 RTPConnector 的示例实现。请在以下网址查看:http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/RTPConnector.html
问:如何向 JMF 中添加 RTP 文本有效载荷支持 (draft-ietf-avt-rtp-text-00.txt)?
JMF 是一个开放架构,具有播放程序、编解码器等可插拔组件。为了添加 RTP 文本功能,您需要添加新格式(有效载荷)并提供相应的数据打包程序及解包程序、编解码器和播放程序。
问:JMF 支持 RTP 动态有效载荷映射吗?
支持。使用以下接口将动态有效载荷到格式的映射添加到 RTPManager:
public void addFormat(Format format, int payload);
RTPManager 维护所有静态有效载荷编号及其对应格式,如音频/视频配置文件文档中所述。使用 PlugIn Codec 接口,用户可以插入自己的打包程序或解包程序,以便使用 AV 配置文件中指定的动态有效载荷编号处理专有格式的 RTP 流。在流化动态有效载荷之前,需要针对每个动态有效载荷类型创建一个 Format 对象并将此对象与动态有效载荷编号关联。
问:如何构建自定义 RTP 打包程序和解包程序?
请参见 JMF 解决方案页面以构建自定义 RTP 打包程序和解包程序:http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/CustomPayload.html
问:如何降低音频延迟?
JavaSound 使用的软件音频混合可导致长延迟。如果您运行 Windows 或 Solaris 性能包,可以使用 DirectAudioRenderer 降低延迟。为此,使用 JMFRegistry GUI 应用程序或通过 PlugInManager API 禁用 JavaSoundRenderer。
另一种降低延迟的方法是设置更小的捕获和播放缓冲区大小。有关详细信息,请查看以下示例:
http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/AudioBufferControl.html
问:JMF 提供 SDP 支持吗?
提供。JMF 中的 SDP 支持用于 RTSP 上下文,因为多个 RTSP 服务器使用 SDP 描述媒体格式、传输等。目前,通过内部接口访问 SDP。
问:JMF 提供 RTCP APP 数据包支持吗?
目前,JMF 只能接收 APP 数据包。任何 API 都不允许您指定/设置任何 RTCP 数据包的有效载荷。
问:如何控制 RTCP 传输间隔?
RTCP 传输间隔根据多个参数计算得出,这些参数包括与会者数量、为 RTCP 流量分配的带宽、数据包大小等。初始化 RTPManager 时,您可以选择指定 RTCP 带宽值(默认为 5%),从而影响接收方报告之间的传输间隔:
public void initialize( SessionAddress localAddresses[], SourceDescription sourceDescription[], double rtcpBandwidthFraction, double rtcpSenderBandwidthFraction, EncryptionInfo encryptionInfo) |
问:如何释放 RTPManager 占用的资源(如用于监听 RTP 套接字的套接字)?
调用以下方法:
RTPManager.removeTargets( String reason); RTPManager.dispose();
问:QuickTime 流服务器可以与使用 H.263/RTP 的 JMF 客户端一起使用吗?
可以。定义了两个版本的 H.263 有效载荷头:RFC 2190(有效载荷类型 34)和新的 RFC 2429(动态有效载荷类型 96-127)。QuickTime 服务器使用新的有效载荷头,而 JMF 用于支持旧的有效载荷头。JMF 2.1.1 现在支持这两种 H.263 有效载荷类型。
问:如何向程序中添加 RTCP 报告或统计信息?
您应该查看的相关方法包括 RTPManager 类中的
public GlobalReceptionStats getGlobalReceptionStats(); public GlobalTransmissionStats getGlobalTransmissionStats();
。
我们的示例程序 JMStudio 使用这些方法并在窗口中显示它们。可从以下网址获得 JMStudio 源代码:http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/jmstudio/jmstudio.html
问:在 RTSP 服务器传输和客户端接收的情况下,需要选择服务器/客户端端口吗?
不需要“选择”客户端端口或服务器端口。作为 RTSP 协议的一部分,已协商端口:客户端指定哪些端口可用以及它分配哪些端口进行监听。然后,向服务器通知端口值(通过 RTSP 或某种其他协议),而服务器反过来开始从服务器(根据可用性)选择的服务器端口传输到客户端端口。
问:RTSP 协议可以告知服务器端关闭 RTP 会话吗?
可以,通过发送 TEARDOWN 消息。如果断开,RTSP 客户端应该发出 TEARDOWN,而 RTSP 服务器应该能够处理这些消息。某些服务器需要 RTCP 心跳。如果它们在预定义的间隔内没有收到任何 RTCP 数据包,它们将假设客户端不存在并关闭对应的会话。
问:RTSP 协议可以发送 BYE 数据包吗?
BYE 数据包是 RTCP 协议的一部分,指示对应的与会者已经离开会话。RTSP 通过发送 TEARDOWN 消息来终止会话。
问:为什么无法播放“xyz.mov”或“abc.wav”?
尽管 JMF 可能支持特定媒体内容 类型(如 QuickTime 和 MPEG),但它可能不支持用于此文件内的数据的特定压缩 (CODEC)。例如,包含 Cinepak 视频的 QuickTime 文件将在 JMF 中播放,但包含 Sorensen 视频的 QuickTime 文件将无法播放。这是因为 JMF 2.1.1 不支持对基于 Sorensen 的视频进行解码。
有关 JMF 2.1.1 支持的完整一组格式,请查看:http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/formats.html
问:为什么视频没有更新?
如果视频屏幕空白或没有更新,通常可能因为 CPU 无法足够快地对视频进行解码和播放。这可能由于计算机速度慢、文件源速度慢或图形卡速度慢所致。如果文件源速度慢(如网络文件),尝试先创建本地副本。
问:为什么没有声音?
如果未如预期那样听到声音,可能有如下几个原因:
问:这是什么错误?
java.lang.NoClassDefFoundError:javax/media/ControllerListener
这会在以下两种情况下发生:
问:为什么无法在小程序中播放本地文件?
某些浏览器需要其他权限以允许读取本地文件。如果浏览器提示您提供此类权限,您必须给出肯定回答。
问:为什么无法在浏览器中使用 JMF 小程序?
可能的原因如下:
问:为什么我的摄像机没有在 JMStudio->Capture Preview 中显示?
JMF 需要查询您的系统以查找捕获设备。您首次运行 JMStudio 时,会自动出现这种情况。如果您从早期版本的 JMF 2.1.1 升级或者刚安装新的捕获设备或者注册表文件已删除,则需要强制 JMF 再次查询以查找捕获设备。
强制 JMF 查找捕获设备:
问:为什么在捕获音频时听不到任何声音?
使用 JavaSound 捕获驱动程序捕获音频时,音频不会自动播放,除非您预览已捕获的音频。有时,即使您预览已捕获的音频,如果您的捕获设备不支持同时进行捕获和播放,也无法听到任何声音。