使用gstreamer比使用stagefright有什么优势?谁能指出其中的区别。
发布于 2013-04-04 22:58:51
一开始,有一条非常普通的评论。GStreamer是否比Stagefright更有优势是一个很有争议的问题。然而,回答你的问题的一些要点如下所示。
Stagefright只依赖于所有编解码器的OMX / OpenMax接口,而GStreamer编解码器插件可以在non-OMX接口上编写。例如,即使是软件编解码器也被封装到Stagefright框架中的SoftOMXComponent中,而同样的代码也可以很容易地转换为GstElement,而不一定要有OMX接口。
在Stagefright中,两个组件之间的通信接口非常通用,通常是MediaBuffer。这不是hard绑定,而是通过粘合层,即OMXCodec或MediaExtractor或AwesomePlayer的实现,更容易实现。
在GStreamer中,典型的通信接口是通过具有特定GstCaps的Pads进行通信。两个组件的焊盘通过gst_pad_link互连。
GStreamer提供了像CameraBin或PlayerBin这样的标准模板bins,而在Stagefright中,您有一个用于camera的cameraHal实现。对于播放器,有两种可能的播放器引擎实现,如StagefrightPlayer或NuPlayer。
在Stagefright中,数据处理由sink (下游) PULL-ing data from source驱动。在GStreamer中,数据处理可能通过source创建缓冲区和PUSH-ing将其推送到下游来触发(参考:here)。
最后一点,与目前特定于安卓的Stagefright相比,Gstreamer被广泛部署。
虽然这个列表还可以继续,但这两个框架之间有很多similarities。例如,
Factory Methods创建了类似parsers或codecs的组件,即它们采用了Factory框架采用了plugin接口来集成较新的组件,例如parsers.发布于 2017-06-08 07:33:25
我不熟悉StageFright,但我要指出的是,GStreamer提供了一些非常成熟的调试功能,包括转储GraphViz (“点”)数据,这些数据可以用来构建具象回放图形的文字、可视化图形,包括在构造过程中,甚至在某些类型的部分失败之后。有多个调试级别可用,以及某些类型的过滤。
我绝对建议任何人出于开发目的在这两个库之间进行选择,比较它们的调试和故障排除能力,特别是在排除流水线饥饿和同步故障方面。
(哦,顺便说一下,将这些点转储转换为SVG是最好的格式。我通常在Firefox中打开它们。)
https://stackoverflow.com/questions/15809365
复制相似问题