使用gstreamer而不是stagefright有什么优势?任何人都可以指出其中的区别。

最佳答案

一开始,有一个非常笼统的评论。是否GStreamer优于Stagefright是很有争议的。但是,回答您问题的一些要点如下。

Stagefright所有编解码器仅依赖OMX / OpenMax接口,而GStreamer编解码器插件可以通过non-OMX接口编写。例如,即使软件编解码器也被封装在SoftOMXComponent框架中的Stagefright中,而它们却可以轻松转换为GstElement,而不必具有OMX接口。

Stagefright中,两个组件之间的通信接口非常通用,通常为MediaBuffer。这不是hard绑定,而是通过粘胶层(即OMXCodecMediaExtractorAwesomePlayer的实现)更加便利。

GStreamer中,典型的通信接口是通过具有特定PadsGstCaps。两个组件的焊盘通过gst_pad_link相互链接。

GStreamer提供标准模板bins,如CameraBinPlayerBin,而在Stagefright中,您具有cameraHalcamera实现。对于玩家而言,有两种潜在的玩家引擎实现,例如StagefrightPlayerNuPlayer

Stagefright中,数据处理由来自sinksource(下游)拉动数据驱动。在GStreamer中,数据处理可能由source创建缓冲区并将其推入下游(参考:here)来触发。

最后一点,与当前特定于Android的Gstreamer相比,Stagefright被广泛部署。

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


这两个框架都通过parsers创建像codecsFactory Methods这样的组件,即它们采用Factory模式。
这两个框架都使用plugin接口来集成更新的组件,例如parsers

07-27 13:42