原文:https://blog.51cto.com/xphhhh/1565641
VLC是pc时代流媒体播放器的标杆,相信大家都有接触。VLC的流媒体部分是基于开源的live555库。live555的代码我稍微看过一些,基于C++的,说实话,代码写的有点乱,不太符合一个开源库的档次。不过,live555的有点是兼容性相当的好,很多不是很标准的流媒体码流,都能适当兼容。也正因为此,VLC作为一款播放器,较受欢迎。
最近我在开发一个android app,需要用到流媒体播放器,主要用于播放网络上的http流媒体和rtsp流媒体。当然,第一想法肯定是直接用android自带的mediaplayer(用的是封装后的videoview)。事实上,mediaplayer也相当不错,完美支持http。但是在支持rtsp上,不是很好,主要表现在缓冲时间较长,编程接口少,并且有些rtsp链接无法播放。
于是开始关注第三方播放器,可选的是两个:一个是vlc,老牌播放器,兼容性好,口碑好,但是在android平台上刚移植出来,稳定性易用性什么的都没保障。还有一个是国人开源项目vitamio,它是专门针对android设计的,接口非常易用(直接封装成videoview了,并且接口基本与android自带的videoview一模一样,可以直接替代)。但是vitamio也存在与系统mediaplayer一样的问题,对于某些rtsp同样无法播放。所以我很怀疑vitamio不过是把android本身的mediaplayer和videoview拿出来自己做了一个开源项目。对于系统mediaplayer不满意的可以用vitamio,编程接口多,并且能避免不同机子对mediaplayer和videoview实现差异引起的兼容性问题。
所以我就选了vlc。直接去vlc官网下载vlc for android,包括源码包和vlc apk。项目中使用的话,直接把源码中的LibVLC那个目录拖进自己的工程就好了。LibVLC java代码就是封装了C库jni接口,对外提供了一个LibVLC对象,初始化、播放、停止,这些接口是很明确的,直接拿来用就行了,我们只需要自己再封装一个videoview,把图像显示在view上就可以了。
至于vlc依赖到的so库,其实很简单,不用按网上的去自己编译,直接把vlc app解压开来,把里面一共4个so拖到自己项目来就行了。呵呵呵,尼玛这是有多懒。
补充vlc一个bug:对于http流媒体,调用stop接口会阻塞很长一段时间。具体原因未研究,最后在项目中我就一分为二了,对于http流媒体,仍使用系统自带videoview。