使用gstreamer而不是stagefright有什么优势?任何人都可以指出其中的区别。
最佳答案
一开始,有一个非常笼统的评论。是否GStreamer
优于Stagefright
是很有争议的。但是,回答您问题的一些要点如下。Stagefright
所有编解码器仅依赖OMX
/ OpenMax
接口,而GStreamer
编解码器插件可以通过non-OMX
接口编写。例如,即使软件编解码器也被封装在SoftOMXComponent
框架中的Stagefright
中,而它们却可以轻松转换为GstElement
,而不必具有OMX
接口。
在Stagefright
中,两个组件之间的通信接口非常通用,通常为MediaBuffer
。这不是hard
绑定,而是通过粘胶层(即OMXCodec
或MediaExtractor
或AwesomePlayer
的实现)更加便利。
在GStreamer
中,典型的通信接口是通过具有特定Pads
的GstCaps
。两个组件的焊盘通过gst_pad_link
相互链接。GStreamer
提供标准模板bins
,如CameraBin
或PlayerBin
,而在Stagefright
中,您具有cameraHal
的camera
实现。对于玩家而言,有两种潜在的玩家引擎实现,例如StagefrightPlayer
或NuPlayer
。
在Stagefright
中,数据处理由来自sink
的source
(下游)拉动数据驱动。在GStreamer
中,数据处理可能由source
创建缓冲区并将其推入下游(参考:here)来触发。
最后一点,与当前特定于Android的Gstreamer
相比,Stagefright
被广泛部署。
虽然列表可以继续,但是这两个框架之间有很多相似之处。例如,
这两个框架都通过parsers
创建像codecs
或Factory Methods
这样的组件,即它们采用Factory
模式。
这两个框架都使用plugin
接口来集成更新的组件,例如parsers
。