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,如需转载请自行联系原作者
相关文章
|
5月前
|
Web App开发 Android开发
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
实时数据传输在互联网中至关重要,不仅支持即时通讯如QQ、微信的文字与图片传输,还包括音视频通信。一对一通信常采用WebRTC技术,如《Android Studio开发实战》中的App集成示例;而一对多的在线直播则需部署独立的流媒体服务器,使用如SRT等协议。SRT因其优越的直播质量正逐渐成为主流。本文档概述了SRT协议的使用,包括通过OBS Studio和SRT Streamer进行SRT直播推流的方法,并展示了推流与拉流的成功实例。更多细节参见《FFmpeg开发实战》一书。
86 1
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
|
5月前
|
编解码 算法 Linux
Linux平台下RTSP|RTMP播放器如何跟python交互投递RGB数据供视觉算法分析
在对接Linux平台的RTSP播放模块时,需将播放数据同时提供给Python进行视觉算法分析。技术实现上,可在播放时通过回调函数获取视频帧数据,并以RGB32格式输出。利用`SetVideoFrameCallBackV2`接口设定缩放后的视频帧回调,以满足算法所需的分辨率。回调函数中,每收到一帧数据即保存为bitmap文件。Python端只需读取指定文件夹中的bitmap文件,即可进行视频数据的分析处理。此方案简单有效,但应注意控制输出的bitmap文件数量以避免内存占用过高。
|
8月前
|
网络协议 Linux 测试技术
音视频学习之rtsp推流学习1(rtspserver开源库example运行及流程梳理)
音视频学习之rtsp推流学习1(rtspserver开源库example运行及流程梳理)
448 0
|
编解码 数据处理 数据格式
[笔记]音视频学习之视音频数据处理入门《四》AAC
[笔记]音视频学习之视音频数据处理入门《四》AAC
|
存储 编解码 数据处理
[笔记]音视频学习之视音频数据处理入门《二》PCM
[笔记]音视频学习之视音频数据处理入门《二》PCM
183 0
|
编解码 缓存 Linux
对话音视频牛哥:如何设计功能齐全的跨平台低延迟RTMP播放器
对话音视频牛哥:如何设计功能齐全的跨平台低延迟RTMP播放器
163 0
|
编解码 API 开发者
HarmonyOS学习路之开发篇—多媒体开发(音频开发 二)
音频采集的主要工作是通过输入设备将声音采集并转码为音频数据,同时对采集任务进行管理。
|
编解码 算法 内存技术
HarmonyOS学习路之开发篇—多媒体开发(音频开发 一)
HarmonyOS音频模块支持音频业务的开发,提供音频相关的功能,主要包括音频播放、音频采集、音量管理和短音播放等。
|
编译器 API C语言
QT应用编程:基于QMediaPlayer开发音视频播放器
QT应用编程:基于QMediaPlayer开发音视频播放器
991 0
QT应用编程:基于QMediaPlayer开发音视频播放器
|
编译器
QT软件开发: 获取媒体详细信息(视频/音频)
QT软件开发: 获取媒体详细信息(视频/音频)
345 0
QT软件开发: 获取媒体详细信息(视频/音频)