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天前
|
编解码 Linux API
从FFplay到自定义播放器:构建高性能多媒体应用程序的进阶之路
【10月更文挑战第15天】多媒体应用程序的开发是一个复杂的过程,尤其是在追求高性能和定制化体验时。本文将引导你从使用FFplay作为起点,逐步过渡到构建一个完全自定义的播放器。我们将探讨FFmpeg库的高级用法、多媒体同步原理、跨平台开发注意事项,以及如何实现用户界面与音视频解码的无缝集成。
10 1
|
5月前
|
Web App开发 安全 API
想开发一款带有视频通话/共享屏幕功能的产品?那WebRTC是你必须要知道的!
一名技术爱好者在研究如何为开源项目集成视频通话功能时,深入学习了WebRTC技术。WebRTC是一个API,允许浏览器和应用实现实时音视频通信,简化了之前复杂的技术挑战,如音视频处理和网络传输。该技术可用于视频通话、桌面共享、视频会议等多种场景。在WebRTC中,通过信令交换、STUN/TURN服务器和ICE框架处理网络连接和通信路径,实现点对点连接。与WebSocket不同,WebRTC专注于高质量实时通信,使用UDP协议以降低延迟。接下来的文章将分享如何实现WebRTC的视频通话功能。
HarmonyOS学习路之开发篇—多媒体开发(媒体会话管理开发)
AVSession是一套媒体播放控制框架,对媒体服务和界面进行解耦,并提供规范的通信接口,使应用可以自由、高效地在不同的媒体之间完成切换。
|
编译器
QT软件开发: 获取媒体详细信息(视频/音频)
QT软件开发: 获取媒体详细信息(视频/音频)
321 0
QT软件开发: 获取媒体详细信息(视频/音频)
|
编译器 开发工具 C语言
QT应用编程:基于VLC开发音视频播放器(回调方式)
QT应用编程:基于VLC开发音视频播放器(回调方式)
591 0
QT应用编程:基于VLC开发音视频播放器(回调方式)
|
编译器 API C语言
QT应用编程:基于QMediaPlayer开发音视频播放器
QT应用编程:基于QMediaPlayer开发音视频播放器
954 0
QT应用编程:基于QMediaPlayer开发音视频播放器
|
物联网 调度 开发工具
技术解码 | YoC组件开发系列一:如何向OCC发布芯片产品组件
技术解码栏目:是面向开发者详细解读芯片开放社区(OCC)上关于处理器、芯片、基础软件平台、集成开发环境及应用开发平台的相关技术,方便开发者学习及快速上手,提升开发效率。
415 0
技术解码 | YoC组件开发系列一:如何向OCC发布芯片产品组件
QT应用编程: 调用系统语音引擎完成文字转语音播报
QT应用编程: 调用系统语音引擎完成文字转语音播报
542 0