当前位置:   article > 正文

Android ijkplayer详解使用教程

ijkplayer android使用

1.认识ijkplayer

最近公司准备开发一款视频播放及直播的应用,找了许多开源的框架,大部分都是基于ffmpeg开发的。最开始准备用Vitamio框架开发的,相关的文章也比较丰富,结果对于非个人移动应用均需购买Vitamio使用授权。不过B站开源的ijkplayer也不错,而且也不需要商业授权。 
ijkplayer是一个基于FFmpeg的轻量级Android/iOS视频播放器。FFmpeg的是全球领先的多媒体框架,能够解码,编码, 转码,复用,解复用,流,过滤器和播放大部分的视频格式。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

2.环境配置

项目中引入ijkplayer环境有两种方式。

2.1在Gradle中引入
  1. # required
  2. allprojects {
  3. repositories {
  4. jcenter()
  5. }
  6. }
  7. dependencies {
  8. # required, enough for most devices.
  9. compile 'tv.danmaku.ijk.media:ijkplayer-java:0.6.1'
  10. compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.6.1'
  11. # Other ABIs: optional
  12. compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.6.1'
  13. compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.6.1'
  14. compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.6.1'
  15. compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.6.1'
  16. # ExoPlayer as IMediaPlayer: optional, experimental
  17. compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.6.1'
  18. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
2.2在Ubuntu下编译源码得到

Ubuntu需要安装homebrew, Git, yasm

  1. # install homebrew, git, yasm
  2. ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  3. brew install git
  4. brew install yasm
  5. # add these lines to your ~/.bash_profile or ~/.profile
  6. # export ANDROID_SDK=<your sdk path>
  7. # export ANDROID_NDK=<your ndk path>
  8. # on Cygwin (unmaintained)
  9. # install git, make, yasm
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

开始编译

  1. git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
  2. cd ijkplayer-android
  3. git checkout -B latest k0.6.1
  4. ./init-android.sh
  5. cd android/contrib
  6. ./compile-ffmpeg.sh clean
  7. ./compile-ffmpeg.sh all
  8. cd ..
  9. ./compile-ijk.sh all
  10. # Android Studio:
  11. # Open an existing Android Studio project
  12. # Select android/ijkplayer/ and import
  13. #
  14. # define ext block in your root build.gradle
  15. # ext {
  16. # compileSdkVersion = 23 // depending on your sdk version
  17. # buildToolsVersion = "23.0.0" // depending on your build tools version
  18. #
  19. # targetSdkVersion = 23 // depending on your sdk version
  20. # }
  21. #
  22. # Eclipse: (obselete)
  23. # File -> New -> Project -> Android Project from Existing Code
  24. # Select android/ and import all project
  25. # Import appcompat-v7
  26. # Import preference-v7
  27. #
  28. # Gradle
  29. # cd ijkplayer
  30. # gradle
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

目录结构

目录结构

3.播放器使用

可能是网络的问题,使用Gradle导入会花费很长时间,如果遇到超时,还得重头来一遍,太费时间了。后来我就直接在Ubuntu下编译后,在android Studio下导入该项目。我先介绍下Demo中利用ijkplayer播放视频的过程。

3.1初始化播放器
  1. IjkMediaPlayer.loadLibrariesOnce(null);
  2. IjkMediaPlayer.native_profileBegin("libijkplayer.so");
  • 1
  • 2
  • 1
  • 2
3.2初始化IjkVideoView
  1. //这里使用的是Demo中提供的AndroidMediaController类控制播放相关操作
  2. mMediaController = new AndroidMediaController(this, false);
  3. mMediaController.setSupportActionBar(actionBar);
  4. mVideoView = (IjkVideoView) findViewById(R.id.video_view);
  5. mVideoView.setMediaController(mMediaController);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
3.3设置本地视频文件位置或服务器地址,然后播放
  1. mVideoView.setVideoPath(mVideoPath);
  2. mVideoView.start();
  • 1
  • 2
  • 1
  • 2
3.4Activity销毁时,需要释放资源
  1. @Override
  2. public void onBackPressed() {
  3. mBackPressed = true;
  4. super.onBackPressed();
  5. }
  6. @Override
  7. protected void onStop() {
  8. super.onStop();
  9. //点击返回或不允许后台播放时 释放资源
  10. if (mBackPressed || !mVideoView.isBackgroundPlayEnabled()) {
  11. mVideoView.stopPlayback();
  12. mVideoView.release(true);
  13. mVideoView.stopBackgroundPlay();
  14. } else {
  15. mVideoView.enterBackground();
  16. }
  17. IjkMediaPlayer.native_profileEnd();
  18. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

4.自定义播放器

当然官方提供的Demo只是演示视频播放的基本操作,对于视频播放的控制、全屏等操作,还要自己动手做。

4.1部分声明
  1. private static final int SIZE_DEFAULT = 0;
  2. private static final int SIZE_4_3 = 1;
  3. private static final int SIZE_16_9 = 2;
  4. private int currentSize = SIZE_16_9;
  5. private IjkVideoView video;
  6. private SeekBar seekBar;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
4.2视频播放比例

这里需要修改IjkVideoView部分代码后,才支持按比例播放

  1. //修改相关代码
  2. private static final int[] s_allAspectRatio = {
  3. IRenderView.AR_ASPECT_FIT_PARENT,
  4. IRenderView.AR_ASPECT_FILL_PARENT,
  5. IRenderView.AR_ASPECT_WRAP_CONTENT,
  6. IRenderView.AR_MATCH_PARENT,
  7. IRenderView.AR_16_9_FIT_PARENT,
  8. IRenderView.AR_4_3_FIT_PARENT
  9. };
  10. private int mCurrentAspectRatioIndex = 3;//0
  11. private int mCurrentAspectRatio = s_allAspectRatio[3];//0
  12. private int mCurrentRender = RENDER_TEXTURE_VIEW;
  13. //增加下面方法
  14. public IRenderView getmRenderView() {
  15. return mRenderView;
  16. }
  17. public int getmVideoWidth() {
  18. return mVideoWidth;
  19. }
  20. public int getmVideoHeight() {
  21. return mVideoHeight;
  22. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

设置视频播放比例

  1. public void setScreenRate(int rate) {
  2. int width = 0;
  3. int height = 0;
  4. if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {// 横屏
  5. if (rate == SIZE_DEFAULT) {
  6. width = video.getmVideoWidth();
  7. height = video.getmVideoHeight();
  8. } else if (rate == SIZE_4_3) {
  9. width = screenHeight / 3 * 4;
  10. height = screenHeight;
  11. } else if (rate == SIZE_16_9) {
  12. width = screenHeight / 9 * 16;
  13. height = screenHeight;
  14. }
  15. } else { //竖屏
  16. if (rate == SIZE_DEFAULT) {
  17. width = video.getmVideoWidth();
  18. height = video.getmVideoHeight();
  19. } else if (rate == SIZE_4_3) {
  20. width = screenWidth;
  21. height = screenWidth * 3 / 4;
  22. } else if (rate == SIZE_16_9) {
  23. width = screenWidth;
  24. height = screenWidth * 9 / 16;
  25. }
  26. }
  27. if (width > 0 && height > 0) {
  28. FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) video.getmRenderView().getView().getLayoutParams();
  29. lp.width = width;
  30. lp.height = height;
  31. video.getmRenderView().getView().setLayoutParams(lp);
  32. }
  33. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
4.3屏幕方向切换
  1. private void fullChangeScreen() {
  2. if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {// 切换为竖屏
  3. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  4. } else {
  5. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
  6. }
  7. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
4.4全屏播放
  1. @Override
  2. public void onConfigurationChanged(Configuration newConfig) {
  3. super.onConfigurationChanged(newConfig);
  4. //重新获取屏幕宽高
  5. initScreenInfo();
  6. if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {//切换为横屏
  7. LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) video.getLayoutParams();
  8. lp.height = screenHeight;
  9. lp.width = screenWidth;
  10. video.setLayoutParams(lp);
  11. } else {
  12. LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) video.getLayoutParams();
  13. lp.height = screenWidth * 9 / 16;
  14. lp.width = screenWidth;
  15. video.setLayoutParams(lp);
  16. }
  17. setScreenRate(currentSize);
  18. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
4.5播放进度
  1. seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
  2. ....
  3. @Override
  4. public void onStopTrackingTouch(SeekBar seekBar) {
  5. video.seekTo(seekBar.getProgress()*video.getDuration()/100);
  6. ...
  7. }
  8. });
  9. //视频开始播放时使用handle.sendMessageDelayed更新时间显示
  10. private void refreshTime(){
  11. int totalSeconds = video.getCurrentPosition() / 1000;
  12. int seconds = totalSeconds % 60;
  13. int minutes = (totalSeconds / 60) % 60;
  14. int hours = totalSeconds / 3600;
  15. String ti=hours > 0 ? String.format("%02d:%02d:%02d", hours, minutes, seconds):String.format("%02d:%02d", minutes, seconds);
  16. time.setText(ti);
  17. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

5.相关资料

6.2017-03-31更新

方便大家使用,提供编译好的各平台so文件,再引入“ijkplayer-Java”就可以直接使用。 
http://download.csdn.net/detail/u010987039/9800324

1.认识ijkplayer

最近公司准备开发一款视频播放及直播的应用,找了许多开源的框架,大部分都是基于ffmpeg开发的。最开始准备用Vitamio框架开发的,相关的文章也比较丰富,结果对于非个人移动应用均需购买Vitamio使用授权。不过B站开源的ijkplayer也不错,而且也不需要商业授权。 
ijkplayer是一个基于FFmpeg的轻量级Android/iOS视频播放器。FFmpeg的是全球领先的多媒体框架,能够解码,编码, 转码,复用,解复用,流,过滤器和播放大部分的视频格式。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

2.环境配置

项目中引入ijkplayer环境有两种方式。

2.1在Gradle中引入
  1. # required
  2. allprojects {
  3. repositories {
  4. jcenter()
  5. }
  6. }
  7. dependencies {
  8. # required, enough for most devices.
  9. compile 'tv.danmaku.ijk.media:ijkplayer-java:0.6.1'
  10. compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.6.1'
  11. # Other ABIs: optional
  12. compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.6.1'
  13. compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.6.1'
  14. compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.6.1'
  15. compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.6.1'
  16. # ExoPlayer as IMediaPlayer: optional, experimental
  17. compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.6.1'
  18. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
2.2在Ubuntu下编译源码得到

Ubuntu需要安装homebrew, Git, yasm

  1. # install homebrew, git, yasm
  2. ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  3. brew install git
  4. brew install yasm
  5. # add these lines to your ~/.bash_profile or ~/.profile
  6. # export ANDROID_SDK=<your sdk path>
  7. # export ANDROID_NDK=<your ndk path>
  8. # on Cygwin (unmaintained)
  9. # install git, make, yasm
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

开始编译

  1. git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
  2. cd ijkplayer-android
  3. git checkout -B latest k0.6.1
  4. ./init-android.sh
  5. cd android/contrib
  6. ./compile-ffmpeg.sh clean
  7. ./compile-ffmpeg.sh all
  8. cd ..
  9. ./compile-ijk.sh all
  10. # Android Studio:
  11. # Open an existing Android Studio project
  12. # Select android/ijkplayer/ and import
  13. #
  14. # define ext block in your root build.gradle
  15. # ext {
  16. # compileSdkVersion = 23 // depending on your sdk version
  17. # buildToolsVersion = "23.0.0" // depending on your build tools version
  18. #
  19. # targetSdkVersion = 23 // depending on your sdk version
  20. # }
  21. #
  22. # Eclipse: (obselete)
  23. # File -> New -> Project -> Android Project from Existing Code
  24. # Select android/ and import all project
  25. # Import appcompat-v7
  26. # Import preference-v7
  27. #
  28. # Gradle
  29. # cd ijkplayer
  30. # gradle
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

目录结构

目录结构

3.播放器使用

可能是网络的问题,使用Gradle导入会花费很长时间,如果遇到超时,还得重头来一遍,太费时间了。后来我就直接在Ubuntu下编译后,在android Studio下导入该项目。我先介绍下Demo中利用ijkplayer播放视频的过程。

3.1初始化播放器
  1. IjkMediaPlayer.loadLibrariesOnce(null);
  2. IjkMediaPlayer.native_profileBegin("libijkplayer.so");
  • 1
  • 2
  • 1
  • 2
3.2初始化IjkVideoView
  1. //这里使用的是Demo中提供的AndroidMediaController类控制播放相关操作
  2. mMediaController = new AndroidMediaController(this, false);
  3. mMediaController.setSupportActionBar(actionBar);
  4. mVideoView = (IjkVideoView) findViewById(R.id.video_view);
  5. mVideoView.setMediaController(mMediaController);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
3.3设置本地视频文件位置或服务器地址,然后播放
  1. mVideoView.setVideoPath(mVideoPath);
  2. mVideoView.start();
  • 1
  • 2
  • 1
  • 2
3.4Activity销毁时,需要释放资源
  1. @Override
  2. public void onBackPressed() {
  3. mBackPressed = true;
  4. super.onBackPressed();
  5. }
  6. @Override
  7. protected void onStop() {
  8. super.onStop();
  9. //点击返回或不允许后台播放时 释放资源
  10. if (mBackPressed || !mVideoView.isBackgroundPlayEnabled()) {
  11. mVideoView.stopPlayback();
  12. mVideoView.release(true);
  13. mVideoView.stopBackgroundPlay();
  14. } else {
  15. mVideoView.enterBackground();
  16. }
  17. IjkMediaPlayer.native_profileEnd();
  18. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

4.自定义播放器

当然官方提供的Demo只是演示视频播放的基本操作,对于视频播放的控制、全屏等操作,还要自己动手做。

4.1部分声明
  1. private static final int SIZE_DEFAULT = 0;
  2. private static final int SIZE_4_3 = 1;
  3. private static final int SIZE_16_9 = 2;
  4. private int currentSize = SIZE_16_9;
  5. private IjkVideoView video;
  6. private SeekBar seekBar;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
4.2视频播放比例

这里需要修改IjkVideoView部分代码后,才支持按比例播放

  1. //修改相关代码
  2. private static final int[] s_allAspectRatio = {
  3. IRenderView.AR_ASPECT_FIT_PARENT,
  4. IRenderView.AR_ASPECT_FILL_PARENT,
  5. IRenderView.AR_ASPECT_WRAP_CONTENT,
  6. IRenderView.AR_MATCH_PARENT,
  7. IRenderView.AR_16_9_FIT_PARENT,
  8. IRenderView.AR_4_3_FIT_PARENT
  9. };
  10. private int mCurrentAspectRatioIndex = 3;//0
  11. private int mCurrentAspectRatio = s_allAspectRatio[3];//0
  12. private int mCurrentRender = RENDER_TEXTURE_VIEW;
  13. //增加下面方法
  14. public IRenderView getmRenderView() {
  15. return mRenderView;
  16. }
  17. public int getmVideoWidth() {
  18. return mVideoWidth;
  19. }
  20. public int getmVideoHeight() {
  21. return mVideoHeight;
  22. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

设置视频播放比例

  1. public void setScreenRate(int rate) {
  2. int width = 0;
  3. int height = 0;
  4. if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {// 横屏
  5. if (rate == SIZE_DEFAULT) {
  6. width = video.getmVideoWidth();
  7. height = video.getmVideoHeight();
  8. } else if (rate == SIZE_4_3) {
  9. width = screenHeight / 3 * 4;
  10. height = screenHeight;
  11. } else if (rate == SIZE_16_9) {
  12. width = screenHeight / 9 * 16;
  13. height = screenHeight;
  14. }
  15. } else { //竖屏
  16. if (rate == SIZE_DEFAULT) {
  17. width = video.getmVideoWidth();
  18. height = video.getmVideoHeight();
  19. } else if (rate == SIZE_4_3) {
  20. width = screenWidth;
  21. height = screenWidth * 3 / 4;
  22. } else if (rate == SIZE_16_9) {
  23. width = screenWidth;
  24. height = screenWidth * 9 / 16;
  25. }
  26. }
  27. if (width > 0 && height > 0) {
  28. FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) video.getmRenderView().getView().getLayoutParams();
  29. lp.width = width;
  30. lp.height = height;
  31. video.getmRenderView().getView().setLayoutParams(lp);
  32. }
  33. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
4.3屏幕方向切换
  1. private void fullChangeScreen() {
  2. if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {// 切换为竖屏
  3. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
  4. } else {
  5. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
  6. }
  7. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
4.4全屏播放
  1. @Override
  2. public void onConfigurationChanged(Configuration newConfig) {
  3. super.onConfigurationChanged(newConfig);
  4. //重新获取屏幕宽高
  5. initScreenInfo();
  6. if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {//切换为横屏
  7. LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) video.getLayoutParams();
  8. lp.height = screenHeight;
  9. lp.width = screenWidth;
  10. video.setLayoutParams(lp);
  11. } else {
  12. LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) video.getLayoutParams();
  13. lp.height = screenWidth * 9 / 16;
  14. lp.width = screenWidth;
  15. video.setLayoutParams(lp);
  16. }
  17. setScreenRate(currentSize);
  18. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
4.5播放进度
  1. seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
  2. ....
  3. @Override
  4. public void onStopTrackingTouch(SeekBar seekBar) {
  5. video.seekTo(seekBar.getProgress()*video.getDuration()/100);
  6. ...
  7. }
  8. });
  9. //视频开始播放时使用handle.sendMessageDelayed更新时间显示
  10. private void refreshTime(){
  11. int totalSeconds = video.getCurrentPosition() / 1000;
  12. int seconds = totalSeconds % 60;
  13. int minutes = (totalSeconds / 60) % 60;
  14. int hours = totalSeconds / 3600;
  15. String ti=hours > 0 ? String.format("%02d:%02d:%02d", hours, minutes, seconds):String.format("%02d:%02d", minutes, seconds);
  16. time.setText(ti);
  17. }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

5.相关资料

6.2017-03-31更新

方便大家使用,提供编译好的各平台so文件,再引入“ijkplayer-Java”就可以直接使用。 
http://download.csdn.net/detail/u010987039/9800324

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/949501
推荐阅读
相关标签
  

闽ICP备14008679号