前段时间项目中需要在 Android 中播放视频、流媒体、查看监控,就研究了一下 Android 多媒体解决方案。

查找了一下,大致有如下几种:

  1. Android MediaPlayer
  2. FFmpeg
  3. Google ExoPlayer
  4. Vitamio
  5. VLC

Android MediaPlayer 是 Android 内置的播放器,支持格式很有限:3gp mp4,且不支持流媒体。

FFmpeg 是一套功能强大的跨平台多媒体解决方案,需要用NDK编译,支持海量格式、流媒体。

Google ExoPlayer 是一个Google在2014年才推出的介于现有MediaPlayer和自定义媒体播放器之间的预建播放器,要求 Android 4.1+,支持多种格式、DASH(Dynamic Adaptive Streaming over HTTP),易于扩展。

Vitamio 是国人开发的一个流行的第三方多媒体库,支持 Android、iOS,最新版商业使用需要授权。

VLC是另一个功能强大的跨平台多媒体解决方案,支持海量格式、流媒体,集成了FFmpeg的部分功能,官方支持Android平台。

本文将使用VLC在Android中播放视频,最终效果如下:

1、编译VLC Android

VLC 官方 git 仓库:http://git.videolan.org/

VLC Android 官方 git 仓库:https://code.videolan.org/videolan/vlc-android

VLC Android 官方编译说明:https://wiki.videolan.org/AndroidCompile

VLC Android比较难得的是提供了Android原生aar包,项目里可以直接引用。按照上述说明即可编译出对应架构(ARM、x86、MIPS等)的aar包。

我这里编译好了一份 ARMv7 的aar 包,可以在这里下载。

项目源码已托管在Github:https://github.com/mymbrooks/VLCAndroidDemo

2、新建一个Android项目,把aar包复制到app/libs目录下:

3、修改 app/build.gradle,添加:

4、创建第一个界面,支持播放本地和远程视频:

5、为了兼容 Android 6.0 + ,播放本地视频时需要先请求读取SD卡的权限:

6、使用了一个第三方的方法方便获取Android 4.4及以上的真实视频路径:

7、创建 VLC 播放器界面,使用SurfaceView显示视频,支持进度条、音量控制,暂停、继续,全屏显示:

8、播放进度控制:

9、获取视频长度等信息:

10、播放过程中更新时间进度:

11、将播放时间进度格式化为:hh:mm:ss

12、播放本地和远程视频时使用的方法不同:

VLC Android 提供的功能很丰富,如需要其他高级功能,请参考官方App源码。

此外,VLC Android 还提供了一个原生控件,具体用法可自行尝试:

基于 VLC 的 Android 多媒体解决方案的更多相关文章

  1. Android 多媒体视频播放一( 多媒体理解与经验分享)

    前言 说到android的多媒体,一把辛酸一把泪,当初听说会多媒体的比较牛掰,公司也有需求,于是乎我也积极的加入研究android多媒体的行列,记得以前刚接触的时候,最开始还是比较头大的,主要是但是很 ...

  2. 基于VLC的播放器开发

    VLC的C++封装 因为工作需要,研究了一段时间的播放器开发,如果从头开始做,可以学习下FFmpeg(http://www.ffmpeg.org/),很多播放器都是基于FFmpeg开发的,但是这样工作 ...

  3. 用C/C++开发基于VLC SDK的视频播放器

    在windows系统如果开发万能播放器,一般都是基本DirectShow来开发,开发也很简单,但缺点也很多,一个文件格式是否能够播放完全取决于你 是否安装了正确的解析器和解码器,即使现在有了万能解器安 ...

  4. 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)

    通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...

  5. 常用 Gulp 插件汇总 —— 基于 Gulp 的前端集成解决方案(三)

    前两篇文章讨论了 Gulp 的安装部署及基本概念,借助于 Gulp 强大的 插件生态 可以完成很多常见的和不常见的任务.本文主要汇总常用的 Gulp 插件及其基本使用,需要读者对 Gulp 有一个基本 ...

  6. 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一)

    相关连接导航 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二) 常用 Gulp 插件汇总 ...

  7. 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二)

    前言 文章 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 中,已经完成对 gulp 的安装,由于是window环境,文中特意提到了可以通过安装 gitbash 来代替 ...

  8. Android多媒体框架图

    Android多媒体整体架构图 MediaPlayer框架图 Camera框架图 SoundRecorder框架图 VideoCamera框架图 OpenCore与Skia ALSA Audio框架图 ...

  9. #研发解决方案介绍#基于StatsD+Graphite的智能监控解决方案

    郑昀 基于李丹和刘奎的文档 创建于2014/12/5 关键词:监控.dashboard.PHP.graphite.statsd.whisper.carbon.grafana.influxdb.Pyth ...

随机推荐

  1. [C] C语言中的布尔值

    C不具备显示的布尔类型,所以使用整数来代替,规则是:零是假,任何非零值皆为真. 反过来说,如果逻辑表达式为真其值一定为真,若逻辑表达式为假其值一定为零.

  2. 没有R.java问题找不到getActionBar()方法

    android项目,可是项目中没有重要的R.java,并且报错,说是找不到getActionBar()方法,上网寻找原因,终于寻得解决方法:    1.解决项目中没有R.java问题.在Eclipse ...

  3. J2EE修炼之四书五经[转自2004年程序员]

    J2EE修炼之四书五经 作者:彭晨阳 J2EE其实没有四书五经,因为J2EE一直如汹涌澎湃的大江,推陈出新,不断高速发展,这是一种带领我们走向未来的技术.当然,如何在这种气势如虹的潮流之中不至于迷失方 ...

  4. Windows Azure Web Site (7) Web Site配置

    <Windows Azure Platform 系列文章目录> 在上一章内容中,我们已经部署了Azure WebSite.我们可以在Web Site配置页面进行配置.如下图: 另外,我们还 ...

  5. 第18/24周 乐观并发控制(Optimistic Concurrency)

    大家好,欢迎回到性能调优培训.上个星期我通过讨论悲观并发模式拉开了第5个月培训的序幕.今天我们继续,讨论下乐观并发模式(Optimistic Concurrency). 行版本(Row Version ...

  6. 相关子查询【SQL Server】

    查询book表中大于该类图书价格平均值的图书信息 先将第一条记录的类编号的值为2代入子查询中,子查询为 select avg(price) from book b where b.id=2 则得到类编 ...

  7. dp - 2016腾讯笔试 A

    2016腾讯笔试 A Problem's Link -------------------------------------------------------------------------- ...

  8. 通过原生JS实现为元素添加事件

    自己写了一个为元素添加事件的方法,并封装到对象中. 说明: id : 目标元素的ID type: 事件的类型,注意的是不能加on fn:事件处理程序 isBubble :规定事件流 代码: var b ...

  9. C#基础整理参数

    基本概念 把数据传入方法中,可以使方法有多个返回值. 参数的传递 值参数,通过将实参的值复制到形参的方式传递数据.值参数的实参可以是变量或者是表达式

  10. C#串口通信—向串口发送数据,同步接收返回数据

    最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...