与 stagefright 相比,使用 gstreamer 有哪些优势?谁能指出其中的区别。
2 回答
一开始,一个非常笼统的评论。GStreamer
是否有优势是非常值得商榷的Stagefright
。但是,回答您的问题的一些要点如下。
Stagefright
所有编解码器仅依赖OMX
/OpenMax
接口,而GStreamer
编解码器插件可以通过non-OMX
接口编写。例如,即使是软件编解码器也被封装到SoftOMXComponent
框架中,而无需接口Stagefright
也可以很容易地转换为a 。GstElement
OMX
其中Stagefright
,两个组件之间的通信接口非常通用,通常是MediaBuffer
. 这不是hard
绑定,而是通过胶水层更方便,即实现OMXCodec
orMediaExtractor
或AwesomePlayer
。
其中GStreamer
,典型的通信接口是通过Pads
特定的GstCaps
。两个元件的焊盘通过gst_pad_link
.
GStreamer
提供标准模板,bins
例如CameraBin
orPlayerBin
而在Stagefright
您有cameraHal
. camera
对于玩家,有 2 个潜在的玩家引擎实现,例如StagefrightPlayer
或NuPlayer
。
在中,数据处理Stagefright
由sink
来自. 在中,数据处理可能会通过创建缓冲区并将其推送到下游来触发(参考:here)。source
GStreamer
source
最后一点,与当前特定于 androidGstreamer
的相比,已被广泛部署。Stagefright
虽然列表可以继续,但这两个框架之间有很多相似之处。例如,
这两个框架都创建了类似
parsers
或codecs
通过Factory Methods
即它们使用Factory
模式的组件。两个框架都使用一个
plugin
接口来集成较新的组件,例如parsers
.
我对 StageFright 不熟悉,但我要指出 GStreamer 提供了一些非常成熟的调试功能,包括转储 GraphViz(“点”)数据,这些数据可用于构建图形播放图的文字、可视化图表,包括在构建期间,即使在某些类型的部分失败之后。多个调试级别可用,以及某些类型的过滤。
我绝对会推荐任何人在这两个库之间进行选择以用于开发目的比较它们的调试和故障排除能力,特别是在排除管道饥饿和同步方面。
(哦,顺便说一句——将这些点转储转换为 SVG 的最佳格式。我通常在 Firefox 中打开它们。)