热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从windows转向linux之多媒体播放环境的不同哲学

从windows转向linux之多媒体播放环境的不同哲学--Linux通用技术-Linux技术与应用信息,下面是详情阅读。
播放数字视频已经成为个人用户在 PC中最重要的娱乐之一,这显然得益于宽带接入和P2P技术的飞速发展,而伴随着蓝光DVD与HD DVD格式的到来,数字视频也开始了高清晰之旅。对PC用户而言,多媒体播放功能就日显重要, Windows环境自然不会有这方面的问题, 除了微软自身的Windows Media Player播放器,大量的多媒体软件厂商都推出自己的产品,用户可以有非常丰富的选择。那么Linux环境下的情况如何呢?
许多对Linux有兴趣的用户都因为 这个问题而站在门口张望,既想摆脱对 Windows的依赖,又担心Linux无法提供 “理想”甚至“可用”的多媒体播放功能,这样的担忧与Linux社群缺乏公众普及宣传有关,但这些担忧完全就是多余的,Linux不仅能够提供完整的多媒体播放支持,而且操作非常简单,无论播放何种格式的数字视频,用户所需面对的都是一个统一并与图形环境高度契合的播放界面,这一点与Windows下许多播放工具并行使用的情况形成有趣的对比。
封闭造成兼容壁垒
Windows中的 多媒体播放环境
Windows平台的多媒体播放器都具有完善的功能,也就是说,当你安装好播放器之后,它就能够立刻工作了,比如能够播放MP3、WMA格式的音乐,或者可播放RM、WMV、MOV格式的视频,或者可以播放DVD、蓝光DVD、HD DVD 这样的影碟,用户很容易就能上手。由于很多的多媒体格式都是私有的,各厂商进行此消彼长的竞争,他们都不愿意将自己的格式开放给竞争对手使用,用户为了获得完整的多媒体播放能力,往往必须安装多种播放软件才行。例如, Windows系统已经自带了Windows Media Player播放器,但它无法支持RM格式,用户必须再安装功能类似的Realplayer,如果你还需要播放MOV格式的视频,那么还得安装苹果的QuickTime等等,另外DVD 播放功能必不可缺,WinDVD或PowerDVD 之类的专业软件就非常有用了,因为这类专业产品通常都可以提供更好的画面效果。
仅仅安装完这些软件,你仍然会遇到问题,当你借助P2P工具从网络上下载压缩的视频时,前面所安装的播放器可能无法直接支持,原因在于这些视频采用特殊的编码算法压缩,而上述播放软件不具备相应的解码器,用户必须额外安装一个解码包。一些富有探索精神的用户会去研究为何需要这么做,接着它就会发现多媒体播放软件的逻辑架构:提供GUI操作界面的被称为播放器的前端;真正负担影像解码工作的内核被称为“引擎”,它决定着影像播放的实际效果;解码器则作为“引擎”的输入参数、决定着“引擎”所能支持的格式。前端、引擎、解码器这三者的关系密不可分,其中播放引擎的开发最为困难,仅有少数团队才具备这样的实力,例如Windows Media Player、Realplayer、 QuickTime、WinDVD、PowerDVD等商业产品都拥有自己的播放引擎。
一些国内用户都不喜欢Windows Media Player、Realplayer这样的所谓“官方组合”,它们实在是太过臃肿了,用户更愿意使用暴风影音、Kmplayer之类的万能播放软件。单从程序功能来看,这类软件都可以支持广泛的视频格式,资源占用也更低,对于初级用户来说,这类万能播放器是不错的选择。但这类万能播放器其实都是“组装”产品,如暴风影音基于Media Player Classic播放引擎,然后加上Xvid、ffdshow等开源的免费插件而成(注解:由于上述组件都采用GPL版权公约发行,暴风影音也应该遵守GPL 协议,否则就侵犯了自由软件的知识产权)。Kmplayer则调用了Windows Media Player的底层内核DirectShow负责影像解码,然后挂接Windows下的解码器实现多格式支持。换言之,Windows下的万能播放器都没有自己的播放引擎,它们在构造上类似于浏览器领域中的Maxthon。
这类万能播放器并非Windows系统的默认配备,开发者也是寥寥几人构成的团队,很难获得高阶用户的认同,我们可以看到,喜爱这些软件的以对视频质量要求不高的初级用户居多。而在欧美地区,用户更愿意选择Windows Media Player、Realplayer+解码包这样的正统方案,当然WinDVD或PowerDVD这样的专业软件也必不可少,虽然用户得为此支付不算便宜的费用。总的来说,Windows平台的用户无需担忧多媒体播放方面的问题,他们可以有非常宽裕的选择,但过多的选择也让系统看起来显得凌乱。
模块化结构
Linux中的多媒体播放环境
与Windows不同,Linux世界奉行简洁至上的原则:既然一个软件就能解决问题,那么为何需要两个?这种哲学决定了Linux下的多媒体环境以单一、全功能的面貌示人。由于自由软件都是采用社区模式开发,软件的模块化分得非常细致,多媒体播放器的用户界面、播放引擎与解码器包都是独立开发和独立发行的,各个Linux发行版虽然都安装了播放引擎,但用户仍需自行安装解码器,如果是在Windows下面,用户只需点击“下一步”到“完成”即可,但在Linux下你得学会使用不那么友好的命令行。如果你完成了相关的配置,那么所面对的就是一款与桌面环境高度整合的播放器,它可以胜任所有常见的多媒体播放任务,用起来也极为简单。
首先我们来看Kubuntu的KDE桌面环境,KDE自带了一款名为Kaffeine的播放器前端和Xine播放引擎,我们只需要安装一个名为w32codecs的解码器包,就可以播放几乎所有的多媒体文件。采用 Gnome桌面环境的ubuntu也有一款类似的多媒体播放前端Totem,它的默认多媒体引擎名为gstreamer,它是一个开源的多媒体框架库,提供一个开放的接口实现与解码器的挂接,目前它已能够被用来处理MP3、Ogg、MPEG1、MPEG2、AVI、 Quicktime等多种格式的多媒体数据,但由于无法使用w32codecs解码包,目前它的功能还比较有限。不过在项目开发上,gstreamer被认为是Gnome多媒体系统的未来,大量的开发者都围绕着它进行工作,它将会变得越来越强大。在正常情况下,ubuntu用户都会采用Xine引擎来代替gstreamer引擎,然后加上W32codecs 解码包,这样就可以实现广泛的格式兼容。但为了做到这一点,用户需要做更多的配置工作。
处理完这些看起来棘手的问题,我们便可以在Linux下享受多媒体播放带来的愉悦,用户所面对的其实只是一个前端(Gnome下的Totem、KDE下的 Kaffeine),于是初级入门用户就会产生这样的感觉:Linux只需要一个播放器,就可以播放几乎所有的格式,这个播放器又与桌面系统高度整合,不会像 Windows平台那样每个播放器都有自己的一套界面。因此对这些用户来说,Linux 播放多媒体的方式会更为简洁直观,尽管你在安装时需要了解相关的知识和面对较为繁琐的操作,但在安装完之后事情就变得很简单,你不再需要知道所谓的格式兼容问题或者在多个播放器间的权衡问题。在经过短短的心理不适之后,Linux用户们大多会喜欢上这种简洁、直观的使用方式。简单地说就是:Windows的多媒体环境配置起来简单,但用起来复杂,而Linux正好相反。
Linux下的独立型播放器
Mplayer、Xine提供更多选择
简洁为美是Linux社区的主流文化,不过总有一些另类用户受到Windows的惯性影响,认为播放DVD这样的事情应该由专业的、独立的播放软件来完成。Linux也为用户提供了这样的选择,Linux平台下有两款独立型播放器:Xine和Mplayer。
Xine播放器我们在前面其实已经涉 及到了,与常规的播放软件不同,Xine 的GUI前端、播放引擎与解码库采用独立发行的模式,这种模式创造出一个庞大的播放器家族,前面提到的Totem与 Kaffeine若都采用xine引擎,它们的播放效果便不会有任何差异,两者差别只是在 GUI界面不同而已。同样,如果用户使用 Xine播放器自己的GUI前端和引擎,那么其效果也与前两者相同,只不过Xine前端看起来更像WinDVD、PowerDVD之类的专业型播放工具而已。也就是说,真正的关键在于播放引擎,它负责完成影像解码与显示画面的绘制,而解码算法则是由解码器所提供。另外,作为独立型播放器,Xine对桌面环境无依赖性,你既可以在Gnome环境中使用,也可以在 KDE下使用。
相比之下,Mplayer播放器更为有一定经验的Linux用户所喜爱,普遍的观点就是Mplayer播放DVD效果更佳。与 Xine不同,Mplayer没有将播放引擎独立出来,所以我们无法单独安装,但它同样有“非官方”的前端,SMplayer便是其中的典型代表。Mplayer同样是以GPL 发行,它的开发始于2000年,最初的作 者是rpád Gereo .. ffy(在社区里也被称为 A'rpi/Astral),当时他无法在Linux下找到一个令人满意的视频播放器,便自己着手进行开发。Mplayer的第一个版本被称为mpg12play v0.1,2000年的11月升级到 v0.3版本,之后许多开发者陆续加入,不过绝大多数开发者都来自于匈牙利。在2003年以后,Alex Beregszászi开始接替 rpád Gereo .. ffy准备开发第二代MPlayer播放器,但由于种种原因,Mplayer G2后来暂停开发,开发团队将精力放在现行 Mplayer的完善上。目前Mplayer的最新版本是1.0rc2,今年10月7日推出。
在早些时候,Mplayer的安装非常复杂,你必须自己编译程序,配置中文字体,缺乏经验的新手经常会搞得焦头烂额,不过ubuntu/Kubuntu将相关的安装包纳入源中,我们只需要用简单的安装命令就能解决问题。
除了支持Linux和UNIX外,Mplayer还 可支持Windows和Mac OS X平台,它是一款真正意义上的跨平台多媒体播放软件。其Windows版本以资源占用率小而著称,用户不必安装额外的解码器就能够播放各种多媒体格式,并且对MPEG/XviD/ DivX格式的文件支持尤其出色,不仅拖动播放速度相当快,而且能够在播放破损文件时也有良好的效果,很适合硬件配置低的用户使用。
简洁与统一
Linux哲学的无形体现
与Windows环境下鼠标点击安装的方式迥异,Linux下多涉及命令行的使用,这对用户的技术水平提出了较高的要求。作为参考,大家可以从ubuntu中文支持网站中找到一份详尽的新手指南,指南中提供了完整、经过严格检验的命令,用户只需直接将该命令复制、然后粘贴进终端窗口即可,无需一个字母一个字母地键入。
当你做完上述配置之后,便可以在Linux下欣赏数字视频或观看DVD,无论 Gnome的Totem还是KDE的Kaffeine,它们都是各自桌面环境的一部分,GUI界面保持一致,给人以更简洁、统一的感觉,这也与WInodws环境形成了鲜明的对比。

Linux的高清播放支持有待改进
由于版权的关系,蓝光DVD与HD DVD等高清光碟尚未为Linux所支持。根据要求,播放软件要支持这两种高清光碟,则应该对HDCP内容保护技术提供支持,但Linux下的播放引擎,无论是Xine、Mplayer还是gstreamer,都是以GPL公约发行,所纳入的组件也必须遵循GPL公约,这种开源特性就与 HDCP的封闭属性发生冲突。而对于非光碟类的高清晰压缩视频,Linux平台播放器的表现也还难如人意,除了CPU 占用偏高以外,还会存在花屏的现象,主要原因在于仍缺乏针对高清播放的解码包。但随着时间的推移,这种局面将会很快得到改善。

Kubuntu 7.04下配置多媒体播放环境
1 首先,加上Medibuntu repository源,在终端下输入以下命令:
sudo wget http://www.medibuntu.org/sources. list.d/gutsy.list -O /etc/apt/sources.list. d/medibuntu.list
2 加入GPG key并刷新软件库,接着输入 下列命令:
wget -q http://packages.medibuntu.org/ medibuntu-key.gpg -O- | sudo apt-key add - && sudo apt-get update
3 用以下命令一次性安装解码器及附带文件:
sudo apt-get install libdvdcss2 libdvdnav4 libdvdplay0 libdvdread3 w32codecs libxine-extracodecs gstreamer0.10-pitfdll gstreamer0.10-ffmpeg gstreamer0.10- plugins-bad gstreamer0.10-plugins-badmultiverse gstreamer0.10-plugins-ugly? gstreamer0.10-plugins-ugly-multiverse
注意:如果遇到需要输入[Y/n]或[y/N]的时候,则一律输入[y]并回车。因Kaffeine默认引擎为xine,因此不必重复安装。

安装xine播放器
在终端中输入以下命令,如前面已安装过某些包则会提示文件重复并自动忽略(ubuntu、Kubuntu相同)。
sudo apt-get install xine-ui libdvdcss2 libxine1- ffmpeg libxine1-doc libxine-doc libxine1-plugins w32codecs gcc-3.3-base libstdc++5

Ubuntu 7.04下配置多媒体播放环境
1 由于系统自带以gst reamer为引擎的 Totem播放器,虽已支持很多多媒体格式,但rmvb、rm等格式仍无法被支持, DVD播放的效果也不好,因此需用以下命 令将其卸载:
sudo apt-get remove totem-gstreamer
2 用以下命令安装Xine引擎的Totem播 放器:
sudo apt-get install totem-xine totem-mozilla totem
3 加入源,步骤同Kubuntu配置中的1和2步骤。
4 用以下命令一次性安装多媒体解码器及 附带文件:
sudo apt-get install libdvdcss2 libxine1- ffmpeg libxine1-doc libxine-doc libxine1- plugins w32codecs gcc-3.3-base libstdc++5
注意:如遇到需要输入[Y/n]或[y/N]的时候,则一律输入[y]并回车。

安装配置Mplayer播放器
需预先为ubuntu/Kubuntu配置好安装源(ubuntu、Kubuntu相同)。
1 在终端中输入以下命令:
sudo apt-get install mplayer-fonts mplayer mplayer-skins mozilla-mplayer
2 启动Mplayer(在KDE/Gnome菜单中 可以找到入口),然后右键弹出主菜单 “Preferences/属性│Video/视频”,在 “Available drivers/可用驱动”中选择 “x11”或“xv”,在同一窗口下半部分选中“允许掉帧/Enable frame dropping”。
3 若要安装SMplayer前端,只要下载打包好的deb文件,然后在终端下用“sudo dpkg”命令进行安装。
SMplayer打包文件可以从以下地址下载:
http://sourceforge.net/project/showfiles. php?group_id=185512&package_id=216202 &release_id=545520

责任编辑:金雅文jin_yawen@chip.cn
推荐阅读
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文讨论了在Linux系统中,使用chown命令将django项目目录下的static目录的拥有者从root改为eureka的问题。作者尝试了多种命令,包括chown和sudo chown等,但都没有成功修改拥有者。文章提供了相关目录的权限信息,并补充了项目所在磁盘和操作系统的信息。 ... [详细]
  • STM32与FPGA的对比及学习建议
    本文对比了野火STM32F103指南针板和Xilinx的PYNQ-Z2板(ZYNQ-7020),介绍了野火STM32F103指南针板的学习资料和讲解视频的详细程度,建议初学者学习野火的资料。同时,介绍了STM32开发所用的Keil程序和C指针的重要性。对于ZYNQ-7020的开发,提到了其自带的Linux、Ubuntu18.4系统以及使用SD卡烧入镜像的方法。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
author-avatar
入贝_272
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有