MediaPlayer

在Android系统中对于视频播放器有原生的实现MediaPlayer, 以及将MediaPlayer,SurfaceView封装在一起的VideoView, 两者都只是使用硬解播放,基本上只支持本地和HTTP协议的视频播放,扩展性都很差,只适合最简单的视频播放需求。

ExoPlayer

谷歌后来有开源了一个播放器项目[ExoPlayer])(https://github.com/google/ExoPlayer), 提供了更好的扩展性和定制能力,并加入了对DASH和HLS等直播协议的支持,但也只支持硬码,如果项目中只需要支持对H264格式的视频播放,以及流媒体协议比较常规(比如HTTP,HLS),基于ExoPlayer定制也是不错的选择。

与Android内置的MediaPlayer相比,ExoPlayer具有许多优点: 
*支持通过HTTP(DASH)和SmoothStreaming进行动态自适应流,这两种都不受MediaPlayer的支持。还支持许多其他格式 
*能够自定义和扩展播放器,以适应各种不同需求。 ExoPlayer专门设计了这一点,大部分组件都可以自己替换 
*官网说了很多,其实说到底最主要的就是各个组件可以自定义,还可以接入ffmpeg组件,基本能满足99.9%的需求 
与IJKPlayer和Vitamio相比,ExoPlayer具有的优点: 
*导入项目之后APK体积增加小 
缺点: 
*最低支持版本4.4 
*实现比较复杂

ijkplayer

ijkplayer是Bilibili公司开源的播放器实现,整合了FFMpeg, ExoPlayer, MediaPlayer等多种实现,提供了类似于MediaPlayer的API,可以实现软硬解码自由切换,自定义TextureView实现,同时得益于FFMpeg的能力,也能支持多种流媒体协议(RTSP,RTMP,HLS等),多种视频编码格式(h264, mpeg4, mjpeg),具有很高的灵活性,可以定制实现自己特色的播放器(比如支持视频缩放,视频翻转等)。

视频播放的流程

常规的视频播放分为传输,解封装,解码,绘制四个步骤,以下按播放网站上(HTTP)的mp4文件为例,简单介绍一下几个过程:

视频播放过程.png

  • HTTP传输
    播放器使用HTTP协议把MP4下载下来,这部分需求一般需要边下边播,服务器的HttpServer一定要支持HTTP Seek,因为播放的过程中需要跳转到不同的位置下载内容,比如MP4结构中的moov元数据信息在很多视频文件中都被放置在文件末尾了。

  • MP4解封包
    这部分我们常见的封包格式就是mp4, 视频编码后h264数据被拆分为多个片段封包到mp4中,解封包就是从mp4中解析出h264视频裸码流的过程。需要对Mp4格式有更多了解,可以参考MP4文件格式解析

  • H264解码
    视频解码就是将h264裸码流解析成视频像素数据的过程(一般是yuv,也可以是rgba,类似于将jpg图片解码为bitmap数据。h264格式可以使用Android系统提供MediaCoder硬解码,也可以使用FFMpeg进行软解码。
    奉上一篇能把H264格式结构讲清楚的文章:深入浅出理解视频编码H264结构

  • OpenGL绘制
    就是绘制就是将解析为yuv格式的视频数据绘制到屏幕上的过程,一般使用OpenGL绘制。OpenGL相关绘制的知识点相对比较复杂,这方面目前我也还在学习中。这里有篇文章可以参考TextureView+SurfaceTexture+OpenGL ES来播放视频

Android中视频播放器的选择,MediaPlayer、ExoPlayer、ijkplayer简单对比相关推荐

  1. Android Video Player. 安卓视频播放器,封装 MediaPlayer、ExoPlayer、IjkPlayer。模仿抖音,悬浮播放,广告播放,列表播放,弹幕

    DKVideoPlayer 项目地址:dueeeke/DKVideoPlayer 简介: Android Video Player. 安卓视频播放器,封装 MediaPlayer.ExoPlayer. ...

  2. android 音乐视频播放器(github上十二款最著名的Android播放器开源项目)

    1.ijkplayer 项目地址: https://github.com/Bilibili/ijkplayer 介绍:Ijkplayer 是Bilibili发布的基于 FFplay 的轻量级 Andr ...

  3. Android 自定义视频播放器

    由于录像之后,原先选用的腾讯VOD点播播放器显示出来竖屏都变横屏了,虽然选中了现在的腾讯VOD点播,还是把Android视频播放器了解了一番. Android自定义视频播放器有以下三种: 一.Medi ...

  4. Android自定义视频播放器(三)

    参看:Android自定义视频播放器(一):https://blog.csdn.net/zxd1435513775/article/details/81507909 参看:Android自定义视频播放 ...

  5. Android本地视频播放器开发 - 搜索本地视频(1)

    这一章的主要内容是搜索手机本地视频,添加到ListView列表里,每一个表项含有这个视频的缩略图,视频的播放时间,视频的标题,在搜索本地视频(1)中我们先制作搜索功能.   Video.java--视 ...

  6. Android短视频播放器组件库GSYVideoPlayer和仿抖音切换DKVideoPlayer可以悬浮框及滑动小屏播放

    原文地址:https://blog.csdn.net/u011287484/article/details/105202121/ 实现安卓上的短视频播放器功能,有两个好用的组件库GSYVideoPla ...

  7. 实现在Android本地视频播放器开发

    在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片.标题.时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获 ...

  8. Android本地视频播放器开发--视频解码

    在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译 ...

  9. 基于android的视频播放器,基于Android的视频播放器的设计与实现-.doc

    基于Android的视频播放器的设计与实现- 基于Android的视频播放器的设计与实现 中 文 摘 要 如今,随着基于Android的智能手机的,.因此,设计一个基于android手机的多功能播放器 ...

最新文章

  1. linux ssh命令详解
  2. 「Android」 详细全面的基于vue2.0Weex接入过程(Android视角)
  3. AI人才缺口达百万:做了AI,就一定能拿到高薪offer吗?
  4. Flink Kafka consumer的消费策略配置
  5. 【OJ4976】硬币,神奇的背包
  6. 路西法第一季为什么会被打伤_《数码宝贝》第一季,为何只有亚古兽与加布兽会究极进化?...
  7. 用漫画让你彻底搞懂 Linux 内核到底长啥样!
  8. 计算机主板日常维护主要做到什么,对计算机硬件日常维护的热点研究
  9. 少数服从多数合理性的证明与证伪分析
  10. Priest John's Busiest Day (2-sat)
  11. iOS keyChain 研究
  12. matlab中的a逆怎么使用方法,在MATLAB中,求矩阵A逆矩阵可用命令( )。
  13. 传说之下怎么设置按键_《传说之下手机版》按键设置教程
  14. 关于Topic设计的思考
  15. 远程控制电脑会不会泄露隐私
  16. 养生:拔火罐有什么好处?
  17. android 8.0动态申请读写权限
  18. python基础讲解:代码规范判断语句循环语句
  19. 高斯定理的理解——工程电磁场 P2~P5
  20. sumo之定义车辆和路由

热门文章

  1. SCORM规范中关于cmi.core.session_time的计时问题
  2. glup安装以及使用
  3. 软考网络工程师-路由器配置
  4. 八种数据类型详解——int篇
  5. 用CompletableFuture模拟死锁
  6. SQL学习记录-03----单行函数
  7. mapstruct 详解及使用教程
  8. js延时周期发送请求
  9. 炉石传说服务器维护有补偿吗,炉石传说服务器故障怎么办 服务器故障补偿一览...
  10. linux配置dns三种方式