前言

本篇文章主要介绍 Android 原生 VideoView,Google 开源视频播放框架 ExoPlayer,Vitamio 视频播放框架以及 Bilibili 开源视频播放框架 ijkplayer 的使用方法和优缺点。

VideoView

VideoView 的使用非常简单,播放视频的步骤:

  1. 在界面布局文件中定义 VideoView 组件,或在程序中创建 VideoView 组件

  2. 调用 VideoView 的如下两个方法来加载指定的视频:

    • setVidePath(String path):加载 path 文件代表的视频

    • setVideoURI(Uri uri):加载 uri 所对应的视频

  3. 调用 VideoView 的 start()、stop()、psuse() 方法来控制视频的播放

ExoPlayer

ExoPlayer Git 地址

用法

ExoPlayer 开源项目包含了 library 和 示例:

  • ExoPlayer library - 这部分是核心的库
  • Demo app - 这部分是演示怎么使用 ExoPlayer 的 Demo

ExoPlayer 库的核心类是 ExoPlayer 类。该类维护了播放器的全局状态 。比如如何获取媒体数据,如何缓冲以及是怎样的编码格式。

ExoPlayer 基于 MediaCodec 和 AudioTrack 提供了默认的音视频的 TrackRenderer 实现。所有的 renderers 都需要 SampleSource 对象,ExoPlayer 从 SampleSource 获得 media samples 用于播放。下图展示了 ExoPlayer 是如何配置组合这些组件用于播放音视频的。

ExoPlayer 库提供了一些不同类型的 SampleSource 实例:

  • ExtractorSampleSource - 用于 MP3,M4A,WebM,MPEG-TS 和 AAC;
  • ChunkSampleSource - 用于 DASH 和平滑流的播放;
  • HlsSampleSource - 用于 HLS 播放;

在 ExoPlayer 的 Dome 中使用 DemoPlayer 对 ExoPlayer 进行了封装,并提供了使用上述几种 SampleSource 构建 TrackRenderer 的 Builder。

  • SmoothStreamingRendererBuilder
  • DashRendererBuilder
  • ExtractorRendererBuilder

在使用的时候我们根据不同的需求创建对应的 RendererBuilder,然后将 RendererBuilder 传递给 DemoPlayer 然后调用 DemoPlayer 的 setPlayWhenReady 方法。

优缺点

ExoPlayer 相较于 MediaPlayer 有很多很多的优点:

  • 支持动态的自适应流 HTTP (DASH) 和 平滑流,任何目前 MediaPlayer 支持的视频格式(同时它还支持 HTTP 直播(HLS),MP4,MP3,WebM,M4A,MPEG-TS 和 AAC)。
  • 支持高级的 HLS 特性,例如正确处理 EXT-X-DISCONTINUITY 标签;
  • 支持自定义和扩治你的使用场景。ExoPlayer 专门为此设计;
  • 便于随着 App 的升级而升级。因为 ExoPlayer 是一个包含在你的应用中的库,对于你使用哪个版本有完全的控制权,并且你可以简单的跟随应用的升级而升级;
  • 更少的适配性问题。

ExoPlayer 的缺点:

  • ExoPlayer 的音频和视频组件依赖 Android 的 MediaCodec 接口,该接口发布于 Android4.1(API 等级 16)。因此它不能工作于之前的Android 版本。

Vitamio

Vitamio demo 地址

用法

Vitamio 的使用步骤:

1.下载 Vitamio 库,并作为工程依赖。

2.在 Activity 的 onCreate 方法中添加如下代码,初始化 Vitamio 的解码器

    @Override public void onCreate(Bundle icicle) {      super.onCreate(icicle);      if (!LibsChecker.checkVitamioLibs(this))       return;    }

3.在 AndroidManifest.xml 中声明 InitActivity

    <activity android:name="io.vov.vitamio.activity.InitActivity" android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden"    android:launchMode="singleTop" android:theme="@android:style/Theme.NoTitleBar"    android:windowSoftInputMode="stateAlwaysHidden"/>

4.其余步骤和使用 Android 原生的 VideoView 是一样的。

优点

  • 强大,支持超多格式视频和网络视频播放。
  • 使用简单。调用非常简单,方便使用。

其官方还给出了其他很多优点,但是个人觉得不足以成为优点。

ijkplayer

ijkplayer 项目地址

用法

1.clone ijkplayer 项目到本地

2.编译 ijkplayer

下面是我的编译环境

  • 编译环境 Mac OS X 10.10.5
  • Android
    • NDK – android-ndk-r10e
    • Android Studio 1.3.1
    • Gradle 2.4

编译之前要安装 homebrew, git, yasm。

    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"     brew install git     brew install yasm

配置 NDK

    # add these lines to your ~/.bash_profile or ~/.profile    # export ANDROID_SDK=    # export ANDROID_NDK=

clone 项目

    git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android

编译 ffmpeg

    cd ijkplayer-android     ./init-android.sh     cd config    rm module.sh    ln -s module-default.sh module.sh    cd android/contrib    ./compile-ffmpeg.sh clean    ./compile-ffmpeg.sh all

ffmpeg 编译通过后,编译 ijkplayer

    cd ..    ./compile-ijk.sh all

编译通过后在 android 目录下有 ijkplayer 文件夹,这个是 ijkplayer 的 demo。导入 Android Studio 即可。ijkplayer 的 demo 中提供了 IjkVideoView 类,它封装了 Android 原生的 MediaPlayer 、ExoPlayer 和 IjkMediaPlayer。可根据需要选择。

优缺点

  • ijkplayer 最大的优点就是可以根据需要编译需要的解码器。在编译的时候通过 ln -s module-default.sh module.sh 选择要编译的解码器。ijkplayer 在 config 目录下提供了三种 module.sh 。也可自己修改 module.sh 。

  • ijkplayer 的缺点是库太大。加入项目后会大大增加你的 APP 的大小。

更多相关文章

  1. win10 编译 Android(安卓)ffmpeg
  2. 使用WebView中的JavaScript调用Android方法
  3. 转:listview android:cacheColorHint,android:listSelector属性作
  4. Android高手进阶教程(四)之----Android(安卓)中自定义属性(attr.
  5. 如何得到包含隐藏API的Android类库
  6. 使用远程调试Android设备
  7. Android发展史(Android各版本特性-技术篇)
  8. Afinal 是一个android的sqlite orm 和 ioc 框架。同时封装了andr
  9. Android输入法遮挡了输入框,使用android:fitsSystemWindows="true

随机推荐

  1. Android中常用adb命令及Log使用
  2. textView写点击选中和没选中效果
  3. mac下android studio安装plantuml插件
  4. 谁是最受欢迎的Linux发行版?
  5. Android理解Fragment生命周期,fragment和
  6. Android(安卓)HIDL 中 hidl-gen使用
  7. 一个WebView Native Crash分析过程,居然是
  8. 大神博客资源
  9. Android(安卓)Studio无法使用Apache的Htt
  10. Android(安卓)环境搭建