Android 视频播放总结

前言

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

VideoView

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

1. 

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

2. 

3. 

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

4. 

· 

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

· 

· 

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

· 

5. 

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

6. 

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 – 用于 MP3M4AWebMMPEG-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)MP4MP3WebMM4AMPEG-TS AAC)。

· 支持高级的 HLS 特性,例如正确处理 EXT-X-DISCONTINUITY 标签;

· 支持自定义和扩治你的使用场景。ExoPlayer 专门为此设计;

· 便于随着 App 的升级而升级。因为 ExoPlayer 是一个包含在你的应用中的库,对于你使用哪个版本有完全的控制权,并且你可以简单的跟随应用的升级而升级;

· 更少的适配性问题。

ExoPlayer 的缺点:

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

Vitamio

Vitamio demo 地址

用法

Vitamio 的使用步骤:

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

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

 

1

2

3

4

5

6

@Override public void onCreate(Bundle icicle) {

  super.onCreate(icicle);

  if (!LibsChecker.checkVitamioLibs(this)) 

  return;

}

 

3.AndroidManifest.xml 中声明 InitActivity

 

1

2

3

4

<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

o NDK — android-ndk-r10e

o Android Studio 1.3.1

o Gradle 2.4

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

 

1

2

3

4

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

brew install git

brew install yasm

 

配置 NDK

 

1

2

3

4

# add these lines to your ~/.bash_profile or ~/.profile

# export ANDROID_SDK=<your sdk path>

# export ANDROID_NDK=<your ndk path>

 

clone 项目

 

1

2

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

 

编译 ffmpeg

 

1

2

3

4

5

6

7

8

9

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

 

1

2

3

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 的大小。

· 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SDL是一个跨平台的多媒体开发库,可以在不同操作系统的平台上进行多媒体应用的开发。在Android平台上,可以利用SDL进行视频播放的开发。 使用SDL进行Android视频播放的步骤如下: 1. 引入SDL库:在Android项目中引入SDL库,并在项目的build.gradle文件中进行相应配置。 2. 创建SDLActivity:创建一个继承自SDLActivity的Activity类,并实现SDLInterface接口。 3. 初始化SDL:在SDLActivity的onCreate()方法中,进行SDL的初始化操作。可以设置屏幕信息、音频信息等。 4. 加载视频:在SDLActivity的onResume()方法中,进行视频资源的加载操作。可以使用SDL_video.h中的API进行视频资源的加载。可以将视频资源放在assets目录下,使用SDL_RWFromFile函数进行加载。 5. 处理视频帧:在SDLActivity的onNativeResize()方法中,通过SDL_GetWindowSurface函数获取视频帧。然后将视频帧进行解码、渲染等处理操作。 6. 播放视频:通过SDL_RenderPresent函数将处理后的视频帧进行播放。 7. 退出播放:在SDLActivity的onPause()方法中,进行视频播放的释放操作。可以使用SDL_FreeSurface函数释放视频帧资源。 总结:利用SDL进行Android视频播放的开发,主要涉及SDL库的引入、SDLActivity的创建与初始化、视频资源的加载与处理、视频帧的渲染与播放等步骤。通过以上步骤,可以实现基于SDL的Android视频播放功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值