文档章节

媒体播放器三大底层架构

雷霄骅
 雷霄骅
发布于 2014/08/16 13:40
字数 916
阅读 635
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

媒体播放工具,这里主要指视频播放,因为要面临庞大的兼容性和纷繁复杂的算法,从架构上看,能脱颖而出的体系屈指可数。大体来说业界主要有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:文中观点为个人意见,仅供参考

本文转载自:http://blog.csdn.net/leixiaohua1020/article/details/12520729

雷霄骅

雷霄骅

粉丝 217
博文 419
码字总数 2129
作品 4
朝阳
程序员
私信 提问
加载中

评论(0)

流媒体开发二

可可工作室出品: 欢迎使用可可直播视频播放器: http://pan.baidu.com/share/link?shareid=3291150676&uk=4111208708 1、流媒体开发之--直播实现 2、流媒体开发之-直播自定义列表 3、流媒体...

jwzhangjie
2013/08/25
0
0
播放器技术分享(4):首开时间

搞音视频开发好些年,分享过许多博客文章,比如:前几年发布的《FFmpeg Tips》系列,《Android 音频开发》系列,《直播疑难杂症排查》系列等等。最近想把多年来开发和优化播放器的经验也分享...

Jhuster
2018/12/22
0
0
Android MediaPlayer 和 MediaCodec 的区别和联系(一)

目录:   (1)概念解释 : 硬解、软解   (2)Intel关于Android MediaCodec的相关说明 正文:    一、硬解、软解 (1)概念: a、硬件解码:硬件解码是图形芯片厂商提出的用GPU资源解...

osc_7831jj0v
2018/07/10
3
0
RTMP、HTTP-FLV、HLS,你了解常见的三大直播协议吗

随着直播行业大火,游戏、乐秀、教育、发布会等直播类产品层出不穷,能够满足各方人员的需求。在直播中,总能在其中找到适合自己的产品内容。喜欢玩游戏的可以看游戏直播,想学点工作技能的,...

又拍云
2018/10/31
0
0
anyRTC/anyRTMPC-HybridEngine-Android

RTMPCHybridEngine-Android 基于RTMP和RTC混合引擎的在线视频连麦互动直播 Android 直播(网络自适应码率RTMP publisher)、点播播放器(播放器经过专业优化,可实现秒开RTMP Player)、基于...

anyRTC
2016/10/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

apache服务器 --Internal Server Error(内部服务错误)

问题显现: 首先,我先展示一下错误提示代码: Internal Server ErrorThe server encountered an internal error or misconfiguration and was unable to complete your request. Ple......

二营长意大利炮
42分钟前
15
0
唱作俱佳,腾讯AI艾灵领唱中国新儿歌

唱作俱佳,腾讯AI艾灵领唱中国新儿歌 今年六一儿童节,腾讯联合北京荷风艺术基金会发起“腾讯荷风艺术行动”,给孩子们送上两份礼物,为音乐美学中国素质教育的发展做出贡献。 其中一份就是由...

腾讯技术资讯
44分钟前
39
0
BeetlSQL3.0 难搞

最近想支持一下nosql,难搞,每个nosql server,都很难一天掌握安装和基础用法,所以先决定选用clickhouse ,apache drill (操作文件),Cassandra,这三个下手 hadoop系列也挺好的,但确实没时...

闲大赋
44分钟前
32
0
生产计划体系学习

生产计划的内容: 1、生产的最终产品与零部件数量 2、生产的批量和产出时间 3、产品产出的日程计划 生产计划编制思路,按照分层次来进行的 1、主生产计划(MPS) 2、零部件生产计划(MRP) ...

旺仔没馒头
45分钟前
19
0
如何使用Maven创建具有依赖项的可执行JAR? - How can I create an executable JAR with dependencies using Maven?

问题: I want to package my project in a single executable JAR for distribution. 我想将我的项目打包在一个可执行的JAR中进行分发。 How can I make a Maven project package all depen......

javail
47分钟前
21
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部