package example.com.bannerdemo;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.graphics.SurfaceTexture;
import android.media.AudioManager;
import android.net.Uri;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.Surface;
import android.view.TextureView;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import java.io.IOException;
import java.util.Map;
import tv.danmaku.ijk.media.player.AndroidMediaPlayer;
import tv.danmaku.ijk.media.player.IMediaPlayer;
import tv.danmaku.ijk.media.player.IjkMediaPlayer;
/**
* Created by XiaoJianjun on 2017/4/28.
* 播放器
*/
public class NiceVideoPlayer extends FrameLayout
implements INiceVideoPlayer,
TextureView.SurfaceTextureListener {
/**
* 播放错误
**/
public static final int STATE_ERROR = -1;
/**
* 播放未开始
**/
public static final int STATE_IDLE = 0;
/**
* 播放准备中
**/
public static final int STATE_PREPARING = 1;
/**
* 播放准备就绪
**/
public static final int STATE_PREPARED = 2;
/**
* 正在播放
**/
public static final int STATE_PLAYING = 3;
/**
* 暂停播放
**/
public static final int STATE_PAUSED = 4;
/**
* 正在缓冲(播放器正在播放时,缓冲区数据不足,进行缓冲,缓冲区数据足够后恢复播放)
**/
public static final int STATE_BUFFERING_PLAYING = 5;
/**
* 正在缓冲(播放器正在播放时,缓冲区数据不足,进行缓冲,此时暂停播放器,继续缓冲,缓冲区数据足够后恢复暂停
**/
public static final int STATE_BUFFERING_PAUSED = 6;
/**
* 播放完成
**/
public static final int STATE_COMPLETED = 7;
/**
* 普通模式
**/
public static final int MODE_NORMAL = 10;
/**
* 全屏模式
**/
public static final int MODE_FULL_SCREEN = 11;
/**
* 小窗口模式
**/
public static final int MODE_TINY_WINDOW = 12;
/**
* IjkPlayer
**/
public static final int TYPE_IJK = 111;
/**
* MediaPlayer
**/
public static final int TYPE_NATIVE = 222;
private int mPlayerType = TYPE_IJK;
private int mCurrentState = STATE_IDLE;
private int mCurrentMode = MODE_NORMAL;
private Context mContext;
private AudioManager mAudioManager;
private IMediaPlayer mMediaPlayer;
private FrameLayout mContainer;
private NiceTextureView mTextureView;
private NiceVideoPlayerController mController;
private SurfaceTexture mSurfaceTexture;
private Surface mSurface;
private String mUrl;
private Map<String, String> mHeaders;
private int mBufferPercentage;
private boolean continueFromLastPosition = true;
private long skipToPosition;
public NiceVideoPlayer(Context context) {
this(context, null);
}
public NiceVideoPlayer(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
init();
}
private void init() {
mContainer = new FrameLayout(mContext);
mContainer.setBackgroundColor(Color.BLACK);
LayoutParams params = new LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
this.addView(mContainer, params);
}
public void setUp(String url, Map<String, String> headers) {
mUrl = url;
mHeaders = headers;
}
public void setController(NiceVideoPlayerController controller) {
mContainer.removeView(mController);
mController = controller;
mController.reset();
mController.setNiceVideoPlayer(this);
LayoutParams params = new LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
mContainer.addView(mController, params);
}
/**
* 设置播放器类型
*
* @param playerType IjkPlayer or MediaPlayer.
*/
public void setPlayerType(int playerType) {
mPlayerType = playerType;
}
/**
* 是否从上一次的位置继续播放
*
* @param continueFromLastPosition true从上一次的位置继续播放
*/
@Override
public void continueFromLastPosition(boolean continueFromLastPosition) {
this.continueFromLastPosition = continueFromLastPosition;
}
@Override
public void setSpeed(float speed) {
if (mMediaPlayer instanceof IjkMediaPlayer) {
((IjkMediaPlayer) mMediaPlayer).setSpeed(speed);
} else {
LogUtil.d("只有IjkPlayer才能设置播放速度");
}
}
@Override
public void start() {
if (mCurrentState == STATE_IDLE) {
NiceVideoPlayerManager.instance().setCurrentNiceVideoPlayer(this);
initAudioManager();
initMediaPlayer();
initTextureView();
addTextureView();
} else {
LogUtil.d("NiceVideoPlayer只有在mCurrentState == STATE_IDLE时才能调用start方法.");
}
}
@Override
public void start(long position) {
skipToPosition = position;
start();
}
@Override
public void restart() {
if (mCurrentState == STATE_PAUSED) {
mMediaPlayer.start();
mCurrentState = STATE_PLAYING;
mController.onPlayStateChanged(mCurrentState);
LogUtil.d("STATE_PLAYING");
} else if (mCurrentState == STATE_BUFFERING_PAUSED) {
mMediaPlayer.start();
mCurrentState = STATE_BUFFERING_PLAYING;
mController.onPlayStateChanged(mCurrentState);
LogUtil.d("STATE_BUFFERING_PLAYING");
} else if (mCurrentState == STATE_COMPLETED || mCurrentState == STATE_ERROR) {
mMediaPlayer.reset();
openMediaPlayer();
} else {
LogUtil.d("NiceVideoPlayer在mCurrentState == " + mCurrentState + "时不能调用restart()方法.");
}
}
@Override
public void pause() {
if (mCurrentState == STATE_PLAYING) {
mMediaPlayer.pause();
mCurrentState = STATE_PAUSED;
mController.onPlayStateChanged(mCurrentState);
LogUtil.d("STATE_PAUSED");
}
if (mCurrentState == STATE_BUFFERING_PLAYING) {
mMediaPlayer.pause();
mCurrentState = STATE_BUFFERING_PAUSED;
mController.onPlayStateChanged(mCurrentState);
LogUtil.d("STATE_BUFFERING_PAUSED");
}
}
@Override
public void seekTo(long pos) {
if (mMediaPlayer != null) {
mMediaPlayer.seekTo(pos);
}
}
@Override
public void setVolume(int volume) {
if (mAudioManager != null) {
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0);
}
}
@Override
public boolean isIdle() {
return mCurrentState == STATE_IDLE;
}
@Override
public boolean isPreparing() {
return mCurrentState == STATE_PREPARING;
}
@Override
public boolean isPrepared() {
return mCurrentState == STATE_PREPARED;
}
@Override
public boolean isBufferingPlaying() {
return mCurrentState == STATE_BUFFERING_PLAYING;
}
@Override
public boolean isBufferingPaused() {
return mCurrentState == STATE_BUFFERING_PAUSED;
}
@Override
public boolean isPlaying() {
return mCurrentState == STATE_PLAYING;
}
@Override
public boolean isPaused() {
return mCurrentState == STATE_PAUSED;
}
@Override
public boolean isError() {
return mCurrentState == STATE_ERROR;
}
@Override
public boolean isCompleted() {
return mCurrentState == STATE_COMPLETED;
}
@Override
public boolea
没有合适的资源?快使用搜索试试~ 我知道了~
Banner 图片,视频 轮播。
共181个文件
xml:77个
png:60个
java:13个
需积分: 35 13 下载量 154 浏览量
2018-12-28
16:15:16
上传
评论 1
收藏 931KB RAR 举报
温馨提示
集成了ijkplayer播放器,视频,图片混合轮播。可更具需求自己更改。https://mp.csdn.net/postedit/85324892
资源推荐
资源详情
资源评论
收起资源包目录
Banner 图片,视频 轮播。 (181个子文件)
gradlew.bat 2KB
taskHistory.bin 1.2MB
classAnalysis.bin 734KB
jarAnalysis.bin 322KB
fileHashes.bin 261KB
taskHistory.bin 82KB
taskJars.bin 24KB
outputFiles.bin 21KB
resourceHashesCache.bin 21KB
last-build.bin 1B
.gitignore 187B
.gitignore 8B
build.gradle 1KB
build.gradle 573B
settings.gradle 16B
gradlew 5KB
app.iml 16KB
BannerDemo.iml 887B
gradle-wrapper.jar 53KB
NiceVideoPlayer.java 23KB
TxVideoPlayerController.java 19KB
NiceVideoPlayerController.java 11KB
MainActivity.java 7KB
NiceUtil.java 5KB
NiceTextureView.java 4KB
ChangeClarityDialog.java 4KB
INiceVideoPlayer.java 4KB
NiceVideoPlayerManager.java 2KB
ExampleInstrumentedTest.java 754B
LogUtil.java 472B
ExampleUnitTest.java 399B
Clarity.java 393B
buildOutputCleanup.lock 17B
taskHistory.lock 17B
fileHashes.lock 17B
fileContent.lock 17B
javaCompile.lock 17B
img_default.png 334KB
ic_launcher_round.png 15KB
ic_launcher_round.png 10KB
ic_launcher.png 9KB
ic_launcher_round.png 7KB
ic_launcher.png 6KB
ic_launcher_round.png 5KB
ic_launcher.png 4KB
ic_launcher.png 3KB
ic_launcher_round.png 3KB
ic_launcher.png 2KB
ic_player_center_start.png 2KB
ic_palyer_volume.png 1KB
ic_palyer_brightness.png 820B
ic_player_start.png 650B
ic_player_shrink.png 502B
ic_player_replay.png 492B
ic_player_enlarge.png 486B
ic_player_back.png 395B
player_mask_bottom.png 354B
battery_charging.png 338B
player_mask_top.png 312B
ic_palyer_share.png 293B
battery_full.png 267B
ic_player_pause.png 258B
loading14.png 250B
loading11.png 245B
loading17.png 245B
loading15.png 244B
loading12.png 241B
battery_20.png 241B
loading13.png 239B
loading19.png 237B
loading16.png 236B
loading20.png 235B
loading18.png 232B
battery_100.png 231B
battery_80.png 229B
loading08.png 229B
battery_50.png 229B
loading21.png 224B
battery_10.png 223B
loading22.png 223B
loading09.png 223B
loading07.png 221B
loading10.png 217B
loading24.png 207B
loading06.png 200B
loading23.png 200B
loading25.png 170B
loading05.png 161B
loading04.png 159B
loading26.png 153B
loading27.png 149B
loading03.png 147B
loading28.png 146B
loading02.png 143B
loading29.png 142B
loading01.png 139B
loading00.png 82B
proguard-rules.pro 772B
gradle.properties 743B
local.properties 442B
共 181 条
- 1
- 2
资源评论
raotenghong2611
- 粉丝: 11
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于 Java的班级管理系统课程设计
- 深入探索Suno AI:教程、元标签与案例分析.pdf
- 超市会员积分管理系统主要用于实现了企业管理数据统计等
- 基于 Java的班级管理系统
- MyBatis 动态 SQL:灵活而强大的查询构建器.pdf
- com.accordion.prettyo.apk
- 毕业设计:基于SSM的mysql-ssm软件bug管理系统(源码 + 数据库 + 说明文档)
- MTSQL8.0.35windows(64bit)-mysql-installer-community-8.0.35.0
- 人工智能引领音乐创作新时代之Suno AI
- Public-bicycle-usage-forecast-master.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功