对多媒体框架的几点看法

对多媒体框架的几点看法

WiKi上定义: A multimedia framework is a software framework that handles media on a computer and through a network. A good multimedia framework offers an intuitive API and a modular architecture to easily add support for new audio, video and container formats and transmission protocols. It is meant to be used by applications such as media players and audio or video editors, but can also be used to build videoconferencing applications, media converters and other multimedia tools.

多媒体框架可以理解为一个软件平台,在这个平台上设计了一套直观紧凑的API接口。上层应用程序通过这些接口,能够透明化的使用下层的编解码器(具体使用的哪一种解码器,可能上层应用程序根本不知道);而下层的软硬件编解码器也可以很容易的添加到这个框架中,这就需要对市面上的多种编解码器提炼出相同的功能接口。

就目前我的理解,一个多媒体框架在解码部分需要完成的主要功能有:
    1. 文件/流的接收读取,涉及到本机文件的读取,流式媒体的接收,流媒体传输协议的支持;
    2. AV文件的解交织(Demux),多种Container的探测、识别,音视频包的分发;
    3. 音视频的解码(Decoding),多标准音视频解码,这是计算量最大的部分;
    4. 音视频的同步(Sync),一般是以音频同步视频的方式,也有音视频都同步一个外部时钟的方式;这里还包括了Frame Buffer的管理;
    5. 音视频的展现(Display),音频的重新采样,视频的缩放等,以及与硬件驱动的接口。

当前主流的开源多媒体框架主要有:

    1. GStreamer.  GStreamer 2009年开始开发,是一种pipeline-based 的跨平台多媒体框架。GStreamer的体系非常庞大,在我看来他的具有3个核心的优点:
        a.  Plug-in,插件。他将每个实现具体单一功能(decoding、filter、...)的单元称为一个组件(component),组件有相对固定的接口;
        b. Pipeline-based,因为有插件的存在,在实现具体功能的时候就可以,通过接口间的pad把相应的功能组件串联起来,以完成特定的功能。
        c. 跨平台性
        有很多人在为GStreamer工作,提供了各式各样的插件,插件继承相同的基类,但彼此之间互相独立,不会互相影响。
       GStreamer有FFmpeg的插件,以完成音视频的解码,GStreamer还有Open Max IL插件,这为他可以连接其他硬件的编解码功能提供了可能。

    2. Mplayer. 有些人认为Mplayer只是一个多媒体播放器,只是因为Mplayer专注于音视频的解码部分,它不涉及编码部分(MEncoder实现编码)。如果仅说编码部分,Mplayer的功能已经强大到可以实现一个多媒体框架的程度。

    3. OpenCore. 这是Google在Android2.0版本前采用的多媒体框架,结构比较复杂,支持的音视频标准不多。他支持OpenMax IL,可以支持硬件解码器;

    4. StageFright. 这是Google在Android2.0版本后采用的多媒体框架,相对于OpenCore,他的结构相对简单一些,但目前支持的音视频标准很少,他保留了OpenMax IL。

    5. DirectShow. 这是微软在Windows系统上设计的多媒体框架,当然他不是开源的,只是公开很多的API接口。

    6. 还有一些其他的专有的多媒体框架,这里就不详细说了。

 

一个好的多媒体框架需要考虑那些问题呢?
1. 扩展性,音视频标准、文件格式都还在发展,不知道以后还会有什么新的格式出现,因此一个好的多媒体架构应该能够很容易的将新的标准格式融合进来。GStreamer的组件概念,是一个比较好的想法。其实现在主要的多媒体框架都在提组件。
2. 升级性,扩展是增加新东西,升级是增强旧东西。这种升级也有可能是用硬件实现代替软件实现,越来越多的音视频解码功能需要硬件的支持,不同厂家的硬解码芯片千差万别,想要把他们都能很好的融合到一个多媒体框架里面是一件很难的任务。OpenMax就是为了实现这一目的出现的,对OpenMax的支持将是多媒体框架的必选。
3. 丰富性,是指支持的音视频标准以及文件格式的多少。目前在Android系统上让大家头疼的一个问题就是StageFright支持的音视频标准实在是太少了,完全不能满足市场的需要。这个问题当然可以依靠Google慢慢的解决,或者某些好心的第三方发布源码来解决,但这都不是可靠的方式。由此也有公司在Android上跳过StageFright而直接用Gstreamer或者Mplayer。

 

你可能感兴趣的:(StageFright)