`

媒体播放器三大底层架构

 
阅读更多

媒体播放工具,这里主要指视频播放,因为要面临庞大的兼容性和纷繁复杂的算法,从架构上看,能脱颖而出的体系屈指可数。大体来说业界主要有3大架构:MPC、MPlayer和VLC。这3大架构及其衍生品占领了90%的市场,凡是用户能看到的免费媒体播放软件,无一不是源自这3大架构。

 

MPC-HC架构

MPC(Media Player Classic)和它的后续者MPC-HC应该并列而说。MPC基于DirectShow架构,是Windows系统下元祖级别的播放器。包括KMP之流最早也就是抄来MPC的代码再换个界面。MPCHC则在MPC的原作者Gabest渐渐退出开发后的继承者,MPCHC有很多创新特性,包括开始融入ffmpeg和支持更多DirectX特性和DXVA等等。

优点:更直接的支持DXVA,对一些稀奇古怪的Windows平台上的格式可以通过调用第三方的Filter组件等,拥有更好的兼容性
缺点:有人说DirectShow是Windows中最难掌握的SDK,开发复杂;DirectShow允许第三方封装的特点也让兼容性和稳定性问题复杂化;第三方Filter出现异常时非常难以分析处理,更难以复用;
射手播放器的架构主要来自MPC-HC,但更多的融合了FFmpeg的优势,对DirectShow Filter进行了多处改写,大大加强了对ffmpeg的利用,提高了解码稳定性,同时扩展了解码能力和兼容性。


mplayer架构
如果说MPC是Windows上的元祖,那么mplayer就是linux上媒体播放的元祖了。mplayer使用ffmpeg作为解码核心,也是与ffmpeg结合最紧密的项目,ffmpeg的代码就是由mplayer来host,开发者群也有非常大的交集。借助linux开发/使用者的强大实力,mplayer建立了要比DirectShow稳定的多的工作流程。超越ffmpeg本身的功能外,后来又通过反向工程使之可以调用Windows上的DirectShow Filter DLL,让mplayer架构越来越吸引人,成为兼具稳定性和性能的优秀作品。

优点:稳定,兼容性也可以说相当不错
缺点:代码结构不清晰;纯C语言开发,难于阅读;显卡硬件加速还需要越过更多障碍


VLC架构
VLC是个后起之秀,开发速度的进展可以说是一只奇葩。虽然同样基于ffmpeg,但可能是相对于“左三年右三年缝缝补补又三年”的mplayer架构来说,VLC的架构在设计之初就很好的考虑到模块化开发,所以使它更吸引年轻的开发人员。成为近年发展非常快的架构。

 

优点:稳定,兼容性也可以说相当不错
缺点:纯C语言开发,难于阅读;硬件加速略有障碍
很多人都会发现,3大架构中都可以看到ffmpeg的名字。说起ffmpeg,那真是”One Ring to rule them all,One Ring to find them, One Ring to bring them all“。在#ffmpeg有人和我说过,想不用ffmpeg去写媒体播放器,就像是造汽车而不用车轮。但是ffmpeg本身仅作为命令行工具或类库(常见的如libavcodec)出现。终端用户很少能直接接触到ffmpeg,所以知名度也较小。ffmpeg的详细架构,下次有时间时再续……
*注1:所有优缺点均仅针对架构本身而言
*注2:文中观点为个人意见,仅供参考

分享到:
评论

相关推荐

    流媒体播放器 (技术原理 控制协议 C实现)

    1. C语言作为底层编程语言,适合实现流媒体播放器的基础架构和核心算法。例如,可以使用C编写网络通信模块,处理RTP/RTCP协议,实现数据的接收和发送;编写解码器模块,处理H.264、AAC等编码格式。 2. 事件驱动编程...

    多媒体播放器-MFC开发-源码

    DirectShow是微软提供的一种流媒体处理架构,它可以处理各种类型的媒体文件,并提供了解码和渲染的基础设施。Media Foundation则是Windows Vista及更高版本中引入的新一代多媒体处理框架,它具有更好的硬件加速支持...

    IPTV机顶盒的流媒体播放器设计.pdf

    《IPTV机顶盒的流媒体播放器设计》通过对live555开源代码中playCommon.cpp的深度应用,结合IPTV机顶盒的软件架构,成功设计出了稳定高效的流媒体播放器。这一成果不仅展现了开源代码在实际项目中的强大潜力,也为...

    行业分类-设备装置-媒体播放器进度条的显示控制方法、系统以及媒体播放器.zip

    3. 系统架构:媒体播放器的进度条控制通常涉及播放引擎、用户界面(UI)和操作系统层面的交互。播放引擎负责处理媒体数据,UI层负责展示进度条并接收用户输入,操作系统则提供底层支持,如定时器服务、事件处理等。 4...

    家庭多媒体播放器源代码资料

    1. **多媒体播放器架构**:多媒体播放器的架构一般分为用户界面层、控制层、解码层和硬件抽象层。用户界面负责交互,控制层管理播放操作,解码层解析各种媒体格式,硬件抽象层则与设备驱动进行通信,优化性能。 2. ...

    基于DirectShow技术的媒体播放器

    ### 基于DirectShow技术的媒体播放器 #### 一、引言 DirectX软件开发包是由微软公司提供的一套强大的工具集,主要用于在Windows平台上进行高性能的图形、声音处理以及游戏开发等工作。其中DirectShow作为DirectX...

    界面奇特的媒体播放器源代码

    其次,**媒体播放器的源代码**意味着我们要了解底层的软件架构和编程语言。常见的编程语言用于开发媒体播放器有C++、C#、Java或Python等。这些语言提供了与操作系统进行交互的能力,以及对媒体文件的处理能力。源...

    IPTV机顶盒流媒体播放器的设计

    总的来说,设计IPTV机顶盒流媒体播放器的关键在于理解并利用好如live555这样的开源工具,以及合理规划软件架构,确保各个组件间的协同工作。这种设计方法不仅减少了开发成本,也提升了系统的可维护性和扩展性。通过...

    C#媒体播放器,支持多种格式

    C#是一种面向对象的、现代的编程语言,具有丰富的类库和工具,非常适合构建跨平台的应用程序,包括媒体播放器。本项目名为"C#媒体播放器,支持多种格式",其核心功能在于能够处理各种常见的音频和视频格式,如mp3、...

    一种嵌入式Linux系统的多媒体播放器设计.pdf

    在系统设计方面,作者提出了基于Linux的多媒体播放器整体架构。播放器的工作流程主要包括用户通过图形界面添加媒体文件到播放列表,软件自动匹配媒体源和媒体对象,然后建立这些对象与音频/视频汇点(虚拟渲染设备)...

    行业文档-设计装置-基于android系统的多媒体播放器.zip

    4. **媒体播放器组件**:多媒体播放器的核心组件包括播放器引擎、解码器、渲染器和控制器。它们协同工作,解析媒体文件,解码音频和视频流,并将其呈现到屏幕上。 5. **音视频解码**:Android支持多种编码格式,如H...

    多媒体播放器 PocketMVP_source.rar

    《多媒体播放器PocketMVP源码解析》 ...通过分析PocketMVP的源码,开发者不仅可以学习到多媒体播放的实现原理,还能掌握软件架构设计、用户体验优化、跨平台开发等多方面的知识,对个人技术成长极具价值。

    MFC多媒体播放器

    文档/视图架构则用于处理数据和显示之间的关系,对于播放器而言,文档可以视为媒体文件,视图则是显示媒体的窗口。 2. MCI( Multimedia Control Interface) MFC多媒体播放器的核心是MCI,它是Windows API的一部分...

    WM版多媒体播放器源码

    通过研究这个WM版多媒体播放器源码,开发者不仅可以掌握DirectShow的基本用法,还能深入了解多媒体处理的底层机制,这对于开发自己的媒体应用或者改进现有播放器的性能都将大有裨益。同时,由于源码是针对Windows ...

    基于VC的多媒体播放器的设计与开发.pdf

    - **总体设计**:设计播放器的整体架构,包括主界面、媒体控制、文件操作等功能模块。 - **总体设计层次图**:展示各个模块之间的关系和交互流程。 4. **详细设计** - **基本界面设置**:设计用户界面,包括播放...

    directshow多媒体播放器

    它是一个底层的API,提供了灵活的架构,使得开发者可以构建各种多媒体应用程序,包括播放器。本项目旨在实现一个基本的DirectShow多媒体播放器,具备快进、快退、全屏、进度和音量调节等常见功能。 一、DirectShow...

    基于VC的多媒体播放器的设计与开发.doc

    这通常包含用户界面层、控制逻辑层和底层驱动层,其中用户界面层负责与用户的交互,控制逻辑层处理播放指令,底层驱动层则与硬件设备进行通信。 4. **详细设计** 详细设计部分深入到每个功能模块的设计。例如,...

    学士学位论文--基于arm的linux多媒体播放器mplayer的设计与实现.doc

    它需要调用底层的解码库来处理不同格式的媒体文件,然后通过图形和音频驱动将解码后的数据转化为可见图像和可听声音。在嵌入式环境下,优化这些流程对于提高播放效率和减少资源消耗至关重要。 7 结论 通过以上步骤...

    Android系统无线视频流媒体的接收、解码与播放.pdf

    在本文中,我们将基于 Android 系统的三层架构,采用 Media 库、OpenCore 和 FFmpeg 三种不同的方法来开发流媒体播放器。 Media 库是一种基于 OpenCore 的媒体库,提供了高级的媒体处理功能。 OpenCore 是 Android ...

Global site tag (gtag.js) - Google Analytics