android多媒体解决方案:
(1)android SDK自带的 MediaPlayer+SurfaceView或者videoview (简单快速,格式支持少)
(2)vitamio (简单快速开发,格式支持全面)
(3)百度媒体云 (简单快速开发,格式支持多)
(4)ffmpeg (非常折腾,格式支持全面)
(5)VLC (比较麻烦,格式支持全面)
(6)Exoplayer (一般般,格式支持少,仅MP4)
(7)其他还要很多开源的播放器格式支持也比较多,比如 ijkplayer、AwesomePlayer…
其次
我们来简单的对比下这些解决方案,看看他们的区别和使用选出最适合项目的解决方案:
第一:多媒体框架区别
android SDK
android SDK自带的播放组件的多媒体框架使用的是OpenCore,播放格式支持
音频:mp3 wma
视频:3gp mp4 新的版本好像支持avi(具体支持到什么程度没有测试)
收音机:
FM:调频收音机(频道、频段)
HTTP:支持该协议网络收音机
MMS:android SDK不支持该协议网络收音机
vitamio
vitamio是一个第三方的比较强大完美的播放框架,使用的是ffmpeg媒体解析器和最主要的解码器,同时开发了针对不同移动平台的硬解码方案
支持的播放格式就不多说,可以到官网(https://www.vitamio.org/)去详细查看,反正android SDK支持的它都支持,android SDK不支持的它也支持,无论视频还是音频格式支持以及字幕这些都比较全面。
百度媒体云
百度媒体云播放器 SDK 内嵌百度自主研发的 T5 播放内核,对目前主流的本地和网络媒体都提供了良好的功能支持
百度媒体云通过提供一系列HTTP Restful API及跨终端平台SDK,实现包括媒体存储、编码、转码、内容保护、点播、直播、分析、广告以及人脸检测、人脸识别、语音技术等的诸项功能。 当然我们暂时讨论他的播放SDK。
ffmpeg
ffmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源框架,支持平台广泛,andorid需要用jni编译。
至于ffmpeg,小弟就不过多献丑了,大家都比我懂,我也在向别人学习中,我推荐两篇博客给大家吧,他们都出于同一人,反正我是膜拜他了
第一个:还是符合我的胃口,能照葫芦画瓢 http://blog.csdn.net/leixiaohua1020/article/details/47008825
第二个:非常的深入 http://blog.csdn.net/leixiaohua1020/article/details/15811977/
VLC
VLC多媒体播放器(最初命名为VideoLAN客户端)是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影音光盘及各类流式协议。它也能作为unicast或multicast的流式服务器在IPv4或 IPv6的高速网络连接下使用。它融合了FFmpeg计划的解码器与libdvdcss程序库使其有播放多媒体文件及加密DVD影碟的功能。
在android平台开发那么就不得不提vlc for android,vlc for android是一款开源安卓播放器,具备播放多媒体文件、光盘、设备以及网络流媒体协议等功能,支持ARMv7 CPU或一个x86 CPU的设备,所有播放控制特性都已经开发完整。也是我们android程序员研究vlc的很好的例子。
Exoplayer
ExoPlayer是一个google在2014年才推出的介于现有MediaPlayer和自定义媒体播放器之间的预建播放器;但是比原有Mediaplayer更多的扩展能力,由于其基于MediaPlayer API Level 16+开发, 所以其只支持API Level 16+, 即Android 4.1+,
特点
(1)相比MediaPlayer具有更多特性和可扩展性:
(2)支持Dash和Smoothstreaming播放;
(3)Android4.3+支持DRM(Digital Rights Management);
(4)丰富的回调API, 可用于自定义播放器定制.
注意:ExoPlayer 是一个开源项目,它不属于Android framework ,并且是独立于Android SDK独立分发的。该项目包含一个library和一个demo,其中展示了ExoPlayer的简单应用及其高级定制。
其他开源播放器
其他开源的播放器一般是基于ffmpeg进行开发的。
第二:开发或者集成难度
根据我的经验来判断,其难度或者集成的时间成本
FFMPEG :ffmpeg无疑是里面最难的,成本是最大的,并且里面的优化还得需要非常专业有经验的团队(注意是团队不是个人)来完成。如果有个人要完成此工程那么我只是膜拜你个人能力和情怀,但是不赞成你的这种做法。
VLC:其实除了ffmpeg最难之外,其他的都算不上有多么难,vlc只是比较麻烦费时间,vlc for android的出现让我们接触它又更加的容易了,但是要处理的事情还是非常的多
vitamio:个人感觉vitamio是非常成熟第三方的播放器,集成的难度也比较小,并且支持的视频音频格式非常的全面,我很喜欢该框架
百度媒体云:媒体云播放器来说,单纯的做播放功能集成起来还是非常的方便的,当然如果要做云服务比如需要将视频传到百度云平台进行转码或者加广告这些等等还是需要做很多的事情的
ExoPlayer:ExoPlayer开发成本还是比较低的,其实和MediaPlayer+SurfaceView差不多,很简单
其他开源的播放器:我个人认为其他开源播放器已经有demo,开发难度应该比较小,主要是看部署的时候或者使用的时候会不会遇到莫名的错误或者问题,一般情况都是比较ok的,不同的开源他的侧重点不同,但是都满足基本的视频播放多种格式的支持。
个人觉得开发成本或者集成的难度系数从大到小依次是
FFMPEG > VLC > 其他开源的播放器 > Exoplayer >= MediaPlayer+SurfaceView > 百度媒体云 >= vitamio> videoView
第三:使用费用
从官方给出的信息来看,只有vitamio ,百度媒体云 有相关的涉及到使用付费的项目外其他的都无需付费。但是从具体的付费情况来看,百度媒体云只是用他的相关的播放SDK也无需付费,vitamio 分为标准版和至尊版,其中标准版免费限个人开发者使用。
总结:对于多媒体播放功能除了vitamio需要付费使用,其他的都免费使用。但是如果使用百度云付费的还是比较棒的,能够给我各种分析的报告,也能解决播放流媒体协议问题,因为一般情况下小公司用的是HTTP协议。
最后
上面介绍了那么多,我们在项目中具体开发的时候到底选用什么样的流媒体解决方案呢??我给出我的选择规则
(0)项目是否是专门或者主要做视频播放软件
(1)确定需要播放什么格式
(2)老板是否接受付费(vitamio,媒体云),一般情况是不接受
(3)集成的难度和成本
根据以上规则:
如果是该android项目做的是多媒体相关的软件,无论实际情况怎么样,首先得选一个播放格式支持全而多的框架(vlc,其他开源项目、百度媒体云、FFMPEG,vitamio ),这些里面选择。
如果里面只是简单的嵌套一个小视频并且格式只是简单的低码率的3GP、MP4就直接考虑android自带SDK( MediaPlayer+SurfaceView或者videoview )
如果嵌套一个小视频但是支持的格式比较多个人建议考虑百度云播放SDK(因为集成的成本低且免费)
如果项目比较特殊需求,比如随时的调整视频质量、支持HTML5、Flash等。这个时候就得具体的选对比相关播放sdk的侧重点来选择(因为涉及的东西太多,我也没有时间和精力具体的去比较,无法给出各种情况比较合理的选择)。
网友评论