399 lines
10 KiB
Java
Executable File
399 lines
10 KiB
Java
Executable File
package com.pukka.videoplayertv;
|
|
|
|
import android.content.Context;
|
|
import android.net.Uri;
|
|
import android.view.Surface;
|
|
import android.view.SurfaceHolder;
|
|
|
|
import java.io.FileDescriptor;
|
|
import java.io.IOException;
|
|
import java.util.Map;
|
|
|
|
import tv.danmaku.ijk.media.bmiptvplayer.HyMediaPlayer;
|
|
import tv.danmaku.ijk.media.bmiptvplayer.IMediaPlayer;
|
|
|
|
/**
|
|
* Author: xjy
|
|
* Date: 2022/11/23 14:12
|
|
* Description: 软终端播放器
|
|
*/
|
|
public class SoftMediaPlayer extends AbstractMediaPlayer {
|
|
private static final String TAG = "SoftMediaPlayer";
|
|
//软终端播放器
|
|
private final HyMediaPlayer mHyMediaPlayer;
|
|
private final Object mInitLock = new Object();
|
|
//是否销毁
|
|
private boolean mIsReleased;
|
|
/**
|
|
*初始化
|
|
* */
|
|
public SoftMediaPlayer(Context context) {
|
|
synchronized (mInitLock) {
|
|
mHyMediaPlayer = new HyMediaPlayer(context);
|
|
initLister();
|
|
}
|
|
}
|
|
/**
|
|
*初始化
|
|
* */
|
|
public SoftMediaPlayer(Context context, int playerType){
|
|
synchronized (mInitLock) {
|
|
mHyMediaPlayer = new HyMediaPlayer(context,playerType);
|
|
initLister();
|
|
}
|
|
}
|
|
/**
|
|
* 设置SurfaceHolder
|
|
* */
|
|
@Override
|
|
public void setDisplay(SurfaceHolder sh) {
|
|
if(null !=mHyMediaPlayer) {
|
|
if(!mIsReleased) {
|
|
mHyMediaPlayer.setDisplay(sh);
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* 设置视频源
|
|
* */
|
|
@Override
|
|
public void setDataSource(Context context, Uri uri) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.setDataSource(context,uri);
|
|
}
|
|
}
|
|
/**
|
|
* 设置视频源
|
|
* */
|
|
@Override
|
|
public void setDataSource(Context context, Uri uri, Map<String, String> headers) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.setDataSource(context,uri,headers);
|
|
}
|
|
}
|
|
/**
|
|
* 设置视频源
|
|
* */
|
|
@Override
|
|
public void setDataSource(FileDescriptor fd) throws IOException, IllegalArgumentException, IllegalStateException {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.setDataSource(fd);
|
|
}
|
|
}
|
|
/**
|
|
* 设置视频源
|
|
* */
|
|
@Override
|
|
public void setDataSource(String path) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.setDataSource(path);
|
|
}
|
|
}
|
|
/**
|
|
* 获取视频源
|
|
* */
|
|
@Override
|
|
public String getDataSource() {
|
|
if(null != mHyMediaPlayer){
|
|
return mHyMediaPlayer.getDataSource();
|
|
}
|
|
return null;
|
|
}
|
|
/**
|
|
* 开始准备
|
|
* */
|
|
@Override
|
|
public void prepareAsync() throws IllegalStateException {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.prepareAsync();
|
|
}
|
|
}
|
|
/**
|
|
* 播放
|
|
* */
|
|
@Override
|
|
public void start() throws IllegalStateException {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.start();
|
|
}
|
|
}
|
|
/**
|
|
* 停止
|
|
* */
|
|
@Override
|
|
public void stop() throws IllegalStateException {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.stop();
|
|
}
|
|
}
|
|
/**
|
|
* 暂停
|
|
* */
|
|
@Override
|
|
public void pause() throws IllegalStateException {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.pause();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void setScreenOnWhilePlaying(boolean screenOn) {
|
|
if(null!= mHyMediaPlayer){
|
|
mHyMediaPlayer.setScreenOnWhilePlaying(screenOn);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getVideoWidth() {
|
|
if(null != mHyMediaPlayer) {
|
|
return mHyMediaPlayer.getVideoWidth();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public int getVideoHeight() {
|
|
if(null != mHyMediaPlayer) {
|
|
return mHyMediaPlayer.getVideoHeight();
|
|
}
|
|
return 0;
|
|
}
|
|
/**
|
|
* 是否在播放
|
|
* */
|
|
@Override
|
|
public boolean isPlaying() {
|
|
if(null != mHyMediaPlayer) {
|
|
return mHyMediaPlayer.isPlaying();
|
|
}
|
|
return false;
|
|
}
|
|
/**
|
|
* 定点播放
|
|
* */
|
|
@Override
|
|
public void seekTo(long msec) throws IllegalStateException {
|
|
if(null != mHyMediaPlayer) {
|
|
mHyMediaPlayer.seekTo(msec);
|
|
}
|
|
}
|
|
/**
|
|
* 当前Position
|
|
* */
|
|
@Override
|
|
public long getCurrentPosition() {
|
|
if(null != mHyMediaPlayer){
|
|
return mHyMediaPlayer.getCurrentPosition();
|
|
}
|
|
return 0;
|
|
}
|
|
/**
|
|
* 获取Duration
|
|
* */
|
|
@Override
|
|
public long getDuration() {
|
|
if(null != mHyMediaPlayer){
|
|
return mHyMediaPlayer.getDuration();
|
|
}
|
|
return 0;
|
|
}
|
|
/**
|
|
* 销毁播放器
|
|
* */
|
|
@Override
|
|
public void release() {
|
|
if(null != mHyMediaPlayer){
|
|
mIsReleased = true;
|
|
mHyMediaPlayer.release();
|
|
resetListeners();
|
|
}
|
|
}
|
|
/**
|
|
* 复位
|
|
* */
|
|
@Override
|
|
public void reset() {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.reset();
|
|
resetListeners();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void setSpeed(float speed) {
|
|
|
|
}
|
|
|
|
@Override
|
|
public float getSpeed() {
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* 设置声音
|
|
* */
|
|
@Override
|
|
public void setVolume(float leftVolume, float rightVolume) {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.setVolume(leftVolume, rightVolume);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getAudioSessionId() {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.getAudioSessionId();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public MediaInfo getMediaInfo() {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.getMediaInfo();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public void setLogEnabled(boolean enable) {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.setLogEnabled(enable);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean isPlayable() {
|
|
if(null != mHyMediaPlayer){
|
|
return mHyMediaPlayer.isPlayable();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public void setAudioStreamType(int streamtype) {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.setAudioStreamType(streamtype);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void setKeepInBackground(boolean keepInBackground) {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.setKeepInBackground(keepInBackground);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getVideoSarNum() {
|
|
if(null != mHyMediaPlayer){
|
|
return mHyMediaPlayer.getVideoSarNum();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public int getVideoSarDen() {
|
|
if(null != mHyMediaPlayer){
|
|
return mHyMediaPlayer.getVideoSarDen();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public void setWakeMode(Context context, int mode) {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.setWakeMode(context,mode);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void setLooping(boolean looping) {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.setLooping(looping);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean isLooping() {
|
|
if(null != mHyMediaPlayer){
|
|
return mHyMediaPlayer.isLooping();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public ITrackInfo[] getTrackInfo() {
|
|
return null;
|
|
}
|
|
/**
|
|
* 设置Surface
|
|
* */
|
|
@Override
|
|
public void setSurface(Surface surface) {
|
|
if(null != mHyMediaPlayer){
|
|
mHyMediaPlayer.setSurface(surface);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int getBufferPercentage() {
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* 播放器回调
|
|
* onInfo onBufferingUpdate onCompletion onError onPrepared onSeekComplete onVideoSizeChanged
|
|
* */
|
|
private void initLister(){
|
|
if(null == mHyMediaPlayer){
|
|
return;
|
|
}
|
|
mHyMediaPlayer.setOnInfoListener(new IMediaPlayer.OnInfoListener() {
|
|
@Override
|
|
public boolean onInfo(IMediaPlayer iMediaPlayer, int i, int i1) {
|
|
// TODO: 2023/4/2 放开会报错。。不知道为什么
|
|
notifyOnInfo(i,i1);
|
|
return false;
|
|
}
|
|
});
|
|
mHyMediaPlayer.setOnBufferingUpdateListener(new IMediaPlayer.OnBufferingUpdateListener() {
|
|
@Override
|
|
public void onBufferingUpdate(IMediaPlayer iMediaPlayer, int i) {
|
|
notifyOnBufferingUpdate(i);
|
|
}
|
|
});
|
|
mHyMediaPlayer.setOnCompletionListener(new IMediaPlayer.OnCompletionListener() {
|
|
@Override
|
|
public void onCompletion(IMediaPlayer iMediaPlayer) {
|
|
notifyOnCompletion();
|
|
}
|
|
});
|
|
mHyMediaPlayer.setOnErrorListener(new IMediaPlayer.OnErrorListener() {
|
|
@Override
|
|
public boolean onError(IMediaPlayer iMediaPlayer, int i, int i1) {
|
|
notifyOnError(i,i1);
|
|
return false;
|
|
}
|
|
});
|
|
mHyMediaPlayer.setOnPreparedListener(new IMediaPlayer.OnPreparedListener() {
|
|
@Override
|
|
public void onPrepared(IMediaPlayer iMediaPlayer) {
|
|
notifyOnPrepared();
|
|
}
|
|
});
|
|
mHyMediaPlayer.setOnSeekCompleteListener(new IMediaPlayer.OnSeekCompleteListener() {
|
|
@Override
|
|
public void onSeekComplete(IMediaPlayer iMediaPlayer) {
|
|
notifyOnSeekComplete();
|
|
}
|
|
});
|
|
mHyMediaPlayer.setOnVideoSizeChangedListener(new IMediaPlayer.OnVideoSizeChangedListener() {
|
|
@Override
|
|
public void onVideoSizeChanged(IMediaPlayer iMediaPlayer, int i, int i1, int i2, int i3) {
|
|
notifyOnVideoSizeChanged(i,i1,i2,i3);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|