📄 jmf 翻译.txt
字号:
● Render——处理track的媒体资料,并传送至显示器或喇叭。
(1) 处理器状态
介于Realizing state和Realized state之间,处理器(Processor)还提供了两个另外的阶段:Configuring和Configured。
● 当Configure被呼叫时, Processor进入Configuring阶段。此时,已连接了DataSource,可对输入流做demultiplexes, 读取有关输入数据的格式信息。
● 当Processor进入Configured阶段时,已连接了DataSource,并决定了数据类型。此时ConfigureCompleteEvent将可使用。
● 当Realize被呼叫时, Processor将转换到Realized状态下, 而Processor已被完全建构出来。
当Processor在Configured状态下,getTrackControl将被呼叫进而从多媒体流中的track 得到TrackControl对象。这些TrackControl对象可以使我们对多媒体做一些特别的处理。 当立刻呼叫Realize时, 会使Unrealized的Processor从Configuring和Configured阶段自动地转换到Realized阶段。当我们这样做时,我们不可以通过TrackControls去配制这个处理选项,因为Processor已经被默认设定了。
(2) 在 Processor的每个状态中的方法是用限制
下表为在Processor的每个阶段中,JMF定义的方法的使用限制说明:
方法
Unrealized Processor
Configuring Processor
Configured Processor
Realized Processor
addController
NotRealizedError
NotRealizedError
NotRealizedError
合法
deallocate
合法
合法
合法
合法
getControlPanelComponent
NotRealizedError
NotRealizedError
NotRealizedError
合法
getControls
合法
合法
合法
合法
getDataOutput
NotRealizedError
NotRealizedError
NotRealizedError
合法
getGainControl
NotRealizedError
NotRealizedError
NotRealizedError
合法
getOutputContentDescriptor
NotConfiguredError
NotConfiguredError
合法
合法
getStartLatency
NotRealizedError
NotRealizedError
NotRealizedError
合法
getSupportedContent-Descriptors
合法
合法
合法
合法
getTimeBase
NotRealizedError
NotRealizedError
NotRealizedError
合法
getTrackControls
NotConfiguredError
NotConfiguredError
合法
FormatChange-Exception
getVisualComponent
NotRealizedError
NotRealizedError
NotRealizedError
合法
mapToTimeBase
ClockStoppedException
ClockStoppedException
ClockStoppedException
ClockStopped-Exception
realize
合法
合法
合法
合法
removeController
NotRealizedError
NotRealizedError
NotRealizedError
合法
setOutputContentDescriptor
NotConfiguredError
NotConfiguredError
合法
FormatChange-Exception
setMediaTime
NotRealizedError
NotRealizedError
NotRealizedError
合法
setRate
NotRealizedError
NotRealizedError
NotRealizedError
合法
setStopTime
NotRealizedError
NotRealizedError
NotRealizedError
合法
setTimeBase
NotRealizedError
NotRealizedError
NotRealizedError
合法
syncStart
NotPrefetchedError
NotPrefetchedError
NotPrefetchedError
NotPrefetchedError
3.1 处理控制(Processing Control)
你可以通过TrackControl控制Processor在一个track上的处理过程。通过Processor类的getTrackControls方法可以获取能够应用于多媒体流中所有Track的TrackControl对象。
通过TrackControl,你可以选择你想用到的包括Effect,Codec,和Renderer在内的插件。要获知可用的选项,可以查询方法PlugInManager,看那些插件已经安装在本地系统上了。
想要控制特殊的Codec对Track采取的码制转换,可以使用TrackControl的getControls方法获取与该Track联系的Controls。这个方法返回该Track上可用的Codec控制,例如BitRateControl和QualityControl。
如果你知道你想要的输出数据的格式,可以使用setFormat方法定义格式,让Processor自己选择合适的codec和renderer。或者,你可以在使用ProcessorModel创建Processor时选择输出数据的格式。一个ProcessorModel定义了Processor的输入和输出要求。当用Manager的创建方法通过ProcessorModel来创建Processor时,ProcessorModel会做到最好。
3.2 数据输出(Data Output)
GetDataOutput可以返回Processor对象输出的数据源。
4.0 捕获(Capture)
一个多媒体捕获设备可以作为多媒体数据传输的源。例如:一个麦克风可以捕获原始的音频输入,一个摄像头可以捕获视频。这些捕获设备被抽象为数据源。例如,一个可以提供实时数据传输的设备可以当作PushDataSource。任何类型的数据可以被当作捕获的数据源:PushDataSource,PushBufferDataSource,PullDataSource,PullBufferDataSource。
一些设备传输多重的媒体数据流。例如:一个集成了麦克风的摄像头可以传输音频和视频数据流。这相应的数据源可以包含多重的源流,根据设备所提供的数据流。
5.0 多媒体数据存储和传输(Media Data Storage and Transmission)
一个DataSink用来从数据源读取多媒体数据,并将媒体传输到目的地的——一般非显示设备。特殊的DataSink可以向文件中写入数据,通过网络写数据,或者作为RTP的广播者。
和Players类似,DataSink由Manager通过DataSource数据源创建。一个DataSource可以通过StreamWriterControl提供对数据写入方式的控制。
5.1 存储控制(Storage Control)
一个DataSink会触发DataSinkEvent来报告它的状态。DataSink将由解释代码提出,或者DataSink将触发下面的DataSinkEvent字类型:
● DataSinkErrorEvent:表示在写数据时发生错误。
● EndOfStreamEvent:表示整个数据流已经成功写好了。
想要响应这些事件,可以实现DataSinkListener接口。
6.0 扩展性(Extensibility)
你可以通过实现定制的插件,媒体处理机制和数据源来扩展JMF。
6.1 实现插件(Implementing Plug-Ins)
若实现JMF插件接口,可以直接获取和操作与Processor相连的多媒体数据:
● 实现Demultiplexer接口:能够控制由multiplexed媒体流中分离出各个track。
● 实现Codec接口:能够转换媒体数据,将原始的数据压缩。
● 实现Effect接口:能够定制多媒体数据的处理过程。
● 实现Multiplexer接口:能够将各个track组成一个单一的输出流。
● 实现Renderer接口:能够控制数据的处理过程,并传输到输出设备。
注意:JMF插件API是官方JMF API的一部分,但是JMF Player或者Processor并不要求支持插件。基于JMF 1.0 版本的Players和部分Processor不一定支持插件。2.0 版本的全部支持插件机制。
定制的Codec,Effect,Rendere插件在Processor中可以通过TrackControl接口来获取。想要使得一个由ProcessorModel创建的Processor或者Player可以应用插件,需要在插件管理器(PlugInManager)中注册该插件。一旦已注册,通过PlugInManager类的getPlugList方法可以获取所有插件的名单,并可以由此通过Manager创建Processor。
6.2 实现多媒体处理机制和数据源(Implementing MediaHandlers and DataSource)
如果JMF插件API没有提供你所需要的扩展性,你可以直接实现几个关键的JMF接口:Controller,Player,Processor,DataSource和DataSink。例如,你也许可能要实现一个高性能的Player来播放一种单一格式的媒体,或者一个Controller控制完全不同类型的基于时间的媒体。
用来创建Player,Processor,DataSource和DataSink的Manager机制可以使得定制的JMF接口可以和JMF无缝的集成。当采用create方法时,Manager用完全定义好的机制来确定源的位置,创建请求的对象。只要你在PackageManager中注册了你定制的类并另这些类处于包中合适的位置,这些类也可以被选择,并通过这个机制来创建。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -