使用gstreamer比stagefright有什么好处?任何人都可以指出差异。
答案 0 :(得分:16)
一开始,一个非常通用的评论。如果GStreamer
优于Stagefright
,那么这是非常有争议的。但是,回答你问题的一些要点如下。
Stagefright
仅依赖于所有编解码器的OMX
/ OpenMax
接口,而GStreamer
编解码器插件可以通过non-OMX
接口编写。例如,即使软件编解码器也封装在SoftOMXComponent
框架中的Stagefright
中,而同样可以很容易地将其转换为GstElement
,而不必具有{{1}接口。
在OMX
中,2个组件之间的通信接口非常通用,通常为Stagefright
。这不是MediaBuffer
绑定,而是通过 Glue Layer 更加便利,即hard
或OMXCodec
或MediaExtractor
的实现。
在AwesomePlayer
中,典型的通信界面是通过具有特定GStreamer
的{{1}}。两个组件的焊盘通过Pads
相互链接。
GstCaps
提供标准模板gst_pad_link
,例如GStreamer
或bins
,而在CameraBin
中,您PlayerBin
实施了Stagefright
。对于玩家来说,有两种潜在的玩家引擎实现,如cameraHal
或camera
。
在StagefrightPlayer
中,数据处理由来自NuPlayer
的{{1}}(下游) PULL 数据驱动。在Stagefright
中,数据处理可能由sink
创建缓冲区和 PUSH - 将其发送到下游(参考:here)触发。
最后一点,与目前特定于Android的source
相比,GStreamer
被广泛部署。
虽然列表可以继续,但两个框架之间存在很多相似之处。例如,
两个框架都会创建source
或Gstreamer
到Stagefright
之类的组件,即它们采用parsers
模式。
两个框架都使用codecs
接口来集成较新的组件,例如Factory Methods
。
答案 1 :(得分:0)
我不熟悉StageFright,但我想指出GStreamer提供了一些非常成熟的调试功能,包括转储GraphViz(“点”)数据,可用于构建比喻回放图的文字,可视图形,包括施工期间,甚至在某些部分失效后。可以使用多种调试级别以及某些类型的过滤。
我肯定会建议任何人在这两个库之间进行选择以进行开发,以比较他们的调试和故障排除功能,尤其是在排除管道饥饿和同步问题时。
(哦,顺便说一句 - 将这些点转储转换为SVG的最佳格式。我通常在Firefox中打开它们。)