Stagefright vs Gstreamer

时间:2013-04-04 11:04:26

标签: gstreamer stagefright

使用gstreamer比stagefright有什么好处?任何人都可以指出差异。

2 个答案:

答案 0 :(得分:16)

一开始,一个非常通用的评论。如果GStreamer优于Stagefright,那么这是非常有争议的。但是,回答你问题的一些要点如下。

Stagefright仅依赖于所有编解码器的OMX / OpenMax接口,而GStreamer编解码器插件可以通过non-OMX接口编写。例如,即使软件编解码器也封装在SoftOMXComponent框架中的Stagefright中,而同样可以很容易地将其转换为GstElement,而不必具有{{1}接口。

OMX中,2个组件之间的通信接口非常通用,通常为Stagefright。这不是MediaBuffer绑定,而是通过 Glue Layer 更加便利,即hardOMXCodecMediaExtractor的实现。

AwesomePlayer中,典型的通信界面是通过具有特定GStreamer的{​​{1}}。两个组件的焊盘通过Pads相互链接。

GstCaps提供标准模板gst_pad_link,例如GStreamerbins,而在CameraBin中,您PlayerBin实施了Stagefright 。对于玩家来说,有两种潜在的玩家引擎实现,如cameraHalcamera

StagefrightPlayer中,数据处理由来自NuPlayer的{​​{1}}(下游) PULL 数据驱动。在Stagefright中,数据处理可能由sink创建缓冲区和 PUSH - 将其发送到下游(参考:here)触发。

最后一点,与目前特定于Android的source相比,GStreamer被广泛部署。

虽然列表可以继续,但两个框架之间存在很多相似之处。例如,

  1. 两个框架都会创建sourceGstreamerStagefright之类的组件,即它们采用parsers模式。

  2. 两个框架都使用codecs接口来集成较新的组件,例如Factory Methods

答案 1 :(得分:0)

我不熟悉StageFright,但我想指出GStreamer提供了一些非常成熟的调试功能,包括转储GraphViz(“点”)数据,可用于构建比喻回放图的文字,可视图形,包括施工期间,甚至在某些部分失效后。可以使用多种调试级别以及某些类型的过滤。

我肯定会建议任何人在这两个库之间进行选择以进行开发,以比较他们的调试和故障排除功能,尤其是在排除管道饥饿和同步问题时。

(哦,顺便说一句 - 将这些点转储转换为SVG的最佳格式。我通常在Firefox中打开它们。)