我的编程空间,编程开发者的网络收藏夹
学习永远不晚

安卓的播放器对比与选型(vlc,EXOplayer,Ijkplayer,GSYVideoPlayer)详细过程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

安卓的播放器对比与选型(vlc,EXOplayer,Ijkplayer,GSYVideoPlayer)详细过程

安卓的播放器对比与选型(vlc,EXOplayer,Ijkplayer,GSYVideoPlayer)📺详细过程


前言

本文主要从实际的角度去解读和选型
入职新公司,需要做一款涉及到播放器,播放rtsp 流的app,要求到我来选型,并给了我下面三个选择
在这里插入图片描述
在这之前我只是一名普普通通的安卓应用开发工程师,没有接触过音视频,如果你也和我一样,那么这件事真的太酷啦😝

然后就是为期几天的对比与选型


一、vlc

遇事不决问群友,群友给我推荐了vlc这个开源的播放器,并友好的向我推荐了文章和vlcDemo,我记不得是否是他自己的文章和demo了,这是连接

然后我浏览了vlc的github地址示例代码的地址,并参考上面两个连接,实现了一个简单的vlcdemo,也对其有了一点简单的了解

优点:

  • 跨平台,兼容性好
  • 功能全面,支持 rtsp、rtmp、ftp、http、https 等协议
  • 代码完全解耦,modules 相互独立,不影响,引入新 modules 方便
  • 维护团队强大,更新频繁

缺点:

  • Android 平台编译出的包较大,有 16M 左右;
  • 在 Android 平台上可能存在性能问题,需要优化(这个我没体会到)
  • 根据群友的友好提醒,如果涉及到截图录像的功能要改so,要会c++,我不会,所以算缺点!🐶

最终因为Android 平台编译出的包较大这个缺点,没有采用vlc。😔

二、EXOplayer

然后就是EXOplayer的调研,什么?你问我为什么不先调研其他的,我有我自己的考量好吧,你不要教本安卓开发做事,首先我们排除mediaplayer,因为百度过后基本没有推荐的,然后就是Ijkplayer已经是一个哔哩哔哩不维护的开源项目了,而EXOplayer是谷歌开源的持续维护的,你说我先调研谁?好了,话不多说,我们骑上心爱的🛵,开始。

我先找到EXOplayer的github地址 :https://github.com/google/ExoPlayer

然后找到文档:https://exoplayer.dev/

然后就狗血的发现啊这个EXOplayer啊,他套娃

在这里插入图片描述
这是什么❔,这是谷歌找安卓,老爹找儿子🐶;

然后我又去安卓官网看:https://developer.android.google.cn/guide/topics/media/exoplayer?hl=zh_cn在这里插入图片描述

好好好,你官方这么玩是吧❔,我整个一看下来,发现EXOplayer的最新依赖已经带media3的前缀了,前面几个版本还有前缀不同的代码相同的库,玩的是真滴花啊,又长见识了(更正,出现杨奇怪的场景是因为带Google前缀的exoplayer将要被废弃,新的EXOplayer被整合到media3中)

说了那么多其实都是插曲,工作赚钱嘛,不寒碜,最后我又学习并实现了用EXOplayer播放视频和自定义实现播放器界面,发现如果只是身为一个api高级调用师的话,其实使用方法都是大差不大的,这个时候我对播放器心里大概就有个底了。

再说下EXOplayer的优缺点:
优点:

  • 接入包体积小,1.1M
  • 护团队强大,更新速度快
    缺点:
  • 跨平台,不太适合直播
  • 可扩展性一般,视频软解接入较麻烦
  • 适合播放场景简单的项目,播放过程中无切换码流的情况

虽然说上手起来简单,包体积又小,现在还纳入了安卓官方文档,但是不太适合直播,我们的需求是实时播放一个rtsp流的视频,并且播放场景有一定复杂度,所以最后选择放弃😔

三、Ijkplayer

我们老规矩,首先是找github地址 :https://github.com/Bilibili/ijkplayer

了解过后,我同样实现了一个demo,基础使用都差不多,就是so要不然自己编译,要不然在网上找下别人编译好的,还有一件事(老爹说的不是我说的)就是有一些版本是有问题的,使用的时候最好看下,总得体验下来对于我来说就是引入的时候是最麻烦的。

优点:

  • 包体积比 VLC 小
    -资料比较齐全(但我个人认为这也是一个缺点,到处都是问题)

缺点:

  • 可扩展性较差,基本上没有提供 modules 供开发者二次开发
  • 官方目前基本不维护,不更新

但是因为Ijkplayer支持rtsp,所以如果没有更好的选择就决定采用了,直到我发现了宝藏和本篇文章的主角GSYVideoPlayer

四、GSYVideoPlayer🔥🔥🔥

github地址: https://github.com/CarGuo/GSYVideoPlayer

让我们看看介绍:
视频播放器(IJKplayer、ExoPlayer、MediaPlayer),HTTPS支持,支持弹幕,支持滤镜、水印、gif截图,片头广告、中间广告,多个同时播放,支持基本的拖动,声音、亮度调节,支持边播边缓存,支持视频本身自带rotation的旋转(90,270之类),重力旋转与手动旋转的同步支持,支持列表播放 ,直接添加控件为封面,列表全屏动画,视频加载速度,列表小窗口支持拖动,动画效果,调整比例,多分辨率切换,支持切换播放器,进度条小窗口预览,其他一些小动画效果,rtsp、concat、mpeg。(总结,高端大气上档次)
让我们看看作者:
在这里插入图片描述
曾经有人和我说过,在中国做安卓开发不认识这个人,就不要说自己是安卓开发🐶

让我们看看文档:
在这里插入图片描述
现在,告诉我你们的答案!🎇🎆✨🎇🎆✨🎇🎆✨(郭神o( ̄▽ ̄),我爱你我要xxxxx)
咳咳,开个小小的玩笑

因为地址在这里了,要是github没有条件的可以去https://gitee.com/CarGuo/GSYVideoPlayer看下文档我就不详细介绍了,我拉了项目过后自己改吧改吧,用的很满意,最终决定使用GSYVideoPlayer来开发项目

优点

  • 支持好几种开源播放器,集大成者
  • 可以按需引用所需要的依赖,这样一来包体积不会太大
  • 作者维护很勤快,有什么问题issues,作者也会帮忙看看
  • 文档写的很清楚不需要额外查资料,实在不懂代码拉下来一跑,对照着代码基本上就能理解了

缺点:

-有一些版本对应会有不同的问题,比如我使用的时候用了最新的依赖,按照文档不能播放rtsp流,降低了依赖过后就可以播放了

五、其他的开源播放器

本着学习的态度,我期间也看了一些别的开源播放器,和大家一起分享一下

jiaozivideoplayer

https://github.com/Jzvd/JZVideo
知道这个是因为前公司的短视频播放是用饺子改的,我在app上看效果也不是很好,原本好像叫节操,现在改名叫饺子,网友都说难用,所以没有详细尝试,感兴趣的兄弟可以去看看

MediaPlayer

https://developer.android.google.cn/guide/topics/media/mediaplayer?hl=zh_cn
因为原生的MediaPlayer不支持rtsp流,所以我也没有过多的看

QPlayer2

https://github.com/pili-engineering/QPlayer2-Android

七牛播放器的衍生品,原本的七牛播放器已经停止维护,也是因为不支持rtsp流所以没有尝试

SmarterStreaming

https://github.com/daniulive/SmarterStreaming

大牛直播,看起来很牛逼的样子,可惜要收费


总结

在我这个需求下我最终选用了GSYVideoPlayer,但各位朋友们还是要看自己的需求,选用自己适合的三方框架,开发起来才能事半功倍

参考

Ijkplayer、ExoPlayer、VLC播放器综合比较

来源地址:https://blog.csdn.net/shop_and_sleep/article/details/131943888

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

安卓的播放器对比与选型(vlc,EXOplayer,Ijkplayer,GSYVideoPlayer)详细过程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录