JMF介绍之媒体框架二

简介:
4.1播放器(Players)
    播放器(Player)对一个媒体数据输入流进行处理,并实现时间上的精确播放。数据源(DataSource)将输入流传递到播放器。播放器将声音或(和)视频传递到相应的目标地(destination)。
图9为JMF播放器模型
    播放器在处理和显示媒体数据过程中不提供任何控制。通过继承Clock和Controller类,播放器可支持标准的用户控制功能以及部分限制操作。
图10为JMF 播放器
4.1.1播放器状态(Player States)
    播放器对象有多种状态,JMF中定义了6 种状态。在正常情况下播放器对象需要经历每个状态,然后才能播放媒体数据。下面是对这些状态的说明:
(1)Unrealized:在这种状态下播放器对象已经被实例化,但是并不知道它需要播放的媒体的任何信息。
(2)Realizing:当调用realize方法时,播放器对象的状态从Unrealized转变为Realizing。 在这种状态下Player对象正在确定它需要占用资源。在此过程中,播放器取得的资源都是那些只需取得一次的资源,不是那些独占的资源。
(3)Realized:在这种状态下播放器对象已经确定了它需要的资源并且也知道要播放的媒体的类型(type)。
(4)Prefetching:当调用prefectch方法时,播放器对象的状态从Realized变为Prefetching 在该状态下的播放器对象正在为播放媒体做一些准备工作。其中包括加载媒体数据而需要获得的独占资源等。这个过程被称为预取Prefetch。
(5)Refetched:当播放器对象完成了预取操作后就到达了该状态。
(6)Started:当调用start方法后播放器对象就进入了该状态并开始播放媒体。
图11为播放器的状态转换图
    当一个播放器从一个状态转换到另一个状态时,它将给出TransitionEvents。通过ControllerListener接口,你的程序可以确定播放器在什么状态并作出相应的反应。
    使用这种时间报告机制,你可以通过控制一个播放器对象的Realizing和Prefetching的开始点来管理它的缓冲时间(start latency)。同时,你也可以在调用播放器的方法前确定播放器是否在其适当的状态。
 
4.1.2每个状态下播放器对象可执行的方法
    为了避免混乱情况,在一个播放器所有状态下,不是所有的方法都能被调用的。下表定义了JMF规定的限制。如果你在一个播放器对象的当前状态下,调用了一个非法的方法,播放器对象将抛出异常或错误。  
Method

Unrealized Player

Realized Player

Prefetched Player

Started Player

addController

NotRealizedError

legal

legal

ClockStartedError

deallocate

Legal

legal

legal

ClockStartedError

getControlPanelComponent

NotRealizedError

legal

legal

legal

getGainControl

NotRealizedError

legal

legal

legal

getStartLatency

NotRealizedError

legal

legal

legal

getTimeBase

NotRealizedError

legal

legal

legal

getVisualComponent

NotRealizedError

legal

legal

legal

mapToTimeBase

ClockStoppedException

ClockStoppedException

ClockStoppedException

legal

removeController

NotRealizedError

legal

legal

ClockStartedError

setMediaTime

NotRealizedError

legal

legal

legal

setRate

NotRealizedError

legal

legal

legal

setStopTime

NotRealizedError

legal

legal

StopTimeSetError
if previously set

setTimeBase

NotRealizedError

legal

legal

ClockStartedError

syncStart

NotPrefetchedError

NotPrefetchedError

legal

ClockStartedError

4.2处理器(Processors)
    处理器(Processors)同样可以用来播放媒体数据。处理器是一种特殊的播放器,它可以对输入媒体流进行过程控制。处理器支持所有播放器拥有的播放控制功能。
    除了将媒体数据传送至播放终端外,处理器可以将媒体数据输出至一个数据源(DataSource),此数据源可以作为其它的播放器或处理器的数据源,或是通过其它的处理器对其进行进一步操作控制,或将其传输到一个文件进行存储。
图12为处理器模型
    处理器对应的接口是Processor。在JMF API中Processor接口继承了Player接口。
图13 为JMF处理器
    如图12 所示,处理器对象除了支持播放器对象支持的所有功能外,还可以对输入的媒体数据流进行处理,并通过数据源向其他的播放器对象或处理器对象输出数据。
 
4.2.1处理器状态(Processor States)
    如图13所示,除了在播放器中提到了的6种状态以外,处理器对象还包括两种新的状态。这两种状态是在Unrealized状态之后,在Realizing 状态之前。
(1)Configuring:当调用configure方法后,处理器对象进入该状态。在该状态下处理器对象连接到数据源并获取输入数据的格式信息。
(2)Configured:当完成数据源连接,获得输入数据格式的信息后,处理器对象就处于Configured状态。
图14为处理器的状态转换图
4.2.2每个状态下控制器对象可执行的方法
Method

Unrealized Processor

Configuring Processor

Configured Processor

Realized Processor

addController

NotRealizedError

NotRealizedError

NotRealizedError

legal

deallocate

legal

legal

legal

legal

getControlPanelComponent

NotRealizedError

NotRealizedError

NotRealizedError

legal

getControls

legal

legal

legal

legal

getDataOutput

NotRealizedError

NotRealizedError

NotRealizedError

legal

getGainControl

NotRealizedError

NotRealizedError

NotRealizedError

legal

getOutputContentDescriptor

NotConfiguredError

NotConfiguredError

legal

legal

getStartLatency

NotRealizedError

NotRealizedError

NotRealizedError

legal

getSupportedContent-
Descriptors

legal

legal

legal

legal

getTimeBase

NotRealizedError

NotRealizedError

NotRealizedError

legal

getTrackControls

NotConfiguredError

NotConfiguredError

legal

FormatChange-
Exception

getVisualComponent

NotRealizedError

NotRealizedError

NotRealizedError

legal

mapToTimeBase

ClockStoppedException

ClockStoppedException

ClockStoppedException

ClockStopped-
Exception

realize

legal

legal

legal

legal

removeController

NotRealizedError

NotRealizedError

NotRealizedError

legal

setOutputContentDescriptor

NotConfiguredError

NotConfiguredError

legal

FormatChange-
Exception

setMediaTime

NotRealizedError

NotRealizedError

NotRealizedError

legal

setRate

NotRealizedError

NotRealizedError

NotRealizedError

legal

setStopTime

NotRealizedError

NotRealizedError

NotRealizedError

legal

setTimeBase

NotRealizedError

NotRealizedError

NotRealizedError

legal

syncStart

NotPrefetchedError

NotPrefetchedError

NotPrefetchedError

NotPrefetchedError

4.3 Controller 事件
    Controller(播放器或控制器)注册的ControllerEvents被分为三类:改变通知(change notifications),关闭事件(closed events),状态转变事件(transtion events):
(1)改变通知事件如RateChangeEvent,DurationUpdateEvent,FormatChangeEvent表明一些Controller的属性的改变。
(2)状态转变事件可以使你的程序对Controller对象的状态转变作出反应。
(3)当Controller关闭时,它将注册关闭事件。
图15 为JMF Controller事件
5.媒体处理者结构(MediaHandler Construction)
    播放器(Players),处理器(Processors),数据池(DataSinks)都是媒体处理者的一种,它们都从数据源(DataSource)中读取数据。每个媒体处理者都是为专为一个数据源创建的。
图16为JMF的媒体处理者结构


本文转自zhangjunhd51CTO博客,原文链接:http://blog.51cto.com/zhangjunhd/25472,如需转载请自行联系原作者
相关文章
|
2月前
|
存储 编解码 算法
【软件设计师备考 专题 】媒体系统基础知识,多媒体设备的性能特性,常用多媒体文件格式
【软件设计师备考 专题 】媒体系统基础知识,多媒体设备的性能特性,常用多媒体文件格式
75 0
HarmonyOS学习路之开发篇—多媒体开发(媒体会话管理开发)
AVSession是一套媒体播放控制框架,对媒体服务和界面进行解耦,并提供规范的通信接口,使应用可以自由、高效地在不同的媒体之间完成切换。
|
安全 区块链 Android开发
播放器支持商业DRM实战(二)—— 支持WideVine
### 一. WideVine简介 在收购Widevine之前,Android没有系统的数字版权保护机制,2010年12月,Google不惜重金将视频数字版权管理软件公司Widevine招安,弥补了Android在这方面的短板。Android从3.0开始就支持Widevine。现在Widevine已经成为GMS(Google Mobile Service)中必备的内容,所有想要得到GMS的手机厂商
1586 0
HealthKit 框架详细解析
HealthKit框架详细解析(一) —— 基本概览(一)HealthKit框架详细解析(二) —— 基本概览(二)
1269 0
|
数据库
HomeKit 框架详细解析
HomeKit框架详细解析(一) —— 基本概览HomeKit框架详细解析(二) —— HomeKit介绍 Introduction to HomeKitHomeKit框架详细解析(三) —— 启用HomeKit Enabling HomeKitHom...
1389 0
14.多媒体基础
脑图如下所示:
779 0