Ver código fonte

播放器修改;乐播投屏初接入

czq 2 anos atrás
pai
commit
e55cf687f6

+ 31 - 19
app/build.gradle

@@ -20,7 +20,9 @@ android {
         versionName "1.0"
 
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
-
+        ndk {
+            abiFilters "armeabi"
+        }
         manifestPlaceholders = [
                 JPUSH_PKGNAME : applicationId,
                 JPUSH_APPKEY : "ecffb33772bcb5b0a447c70b", //JPush 上注册的包名对应的 Appkey.
@@ -81,14 +83,19 @@ android {
         viewBinding true
     }
 
-    splits {
-        abi {
-            enable true
-            reset()
-            include 'x86', 'x86_64', 'armeabi-v7a', 'armeabi'
-            universalApk false
-        }
-    }
+//    splits {
+//        abi {
+//            enable true
+//            reset()
+//            include 'x86', 'x86_64', 'armeabi-v7a', 'armeabi'
+//            universalApk false
+//        }
+//    }
+
+//    packagingOptions {
+//        pickFirst 'lib/armeabi-v7a/libnms.so'
+//    }
+
 }
 repositories {
     flatDir {
@@ -105,6 +112,7 @@ dependencies {
     implementation 'androidx.navigation:navigation-fragment:2.3.5'
     implementation 'androidx.navigation:navigation-ui:2.3.5'
     implementation files('libs\\oraleval-android-sdk.jar')
+    implementation(name: 'source', ext: 'aar')
     testImplementation 'junit:junit:4.12'
     androidTestImplementation 'androidx.test.ext:junit:1.1.2'
     androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
@@ -131,17 +139,21 @@ dependencies {
 
     implementation 'com.google.code.gson:gson:2.8.5'
 
-    //========ijkplaer Java部分依赖
-    implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
-    //google ExoPlayer播放的扩展,一般无需添加
-    //implementation 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
-
-    //========ijkplaer Native部分依赖(根据运行CPU的平台选择)
-    //使用真机测试 添加以下依赖
-    implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
+//    //========ijkplaer Java部分依赖
+//    implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
+//    //google ExoPlayer播放的扩展,一般无需添加
+//    //implementation 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
+//
+//    //========ijkplaer Native部分依赖(根据运行CPU的平台选择)
+//    //使用真机测试 添加以下依赖
+//    implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
 
     //GSXY播放器
-    implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer:v8.3.4-release-jitpack'
+//    implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer:v8.3.4-release-jitpack'
     //是否需要AliPlayer模式
-    implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-aliplay:v8.3.4-release-jitpack'
+//    implementation 'com.github.CarGuo.GSYVideoPlayer:GSYVideoPlayer-aliplay:v8.3.4-release-jitpack'
+
+    //完整版引入
+    implementation 'com.shuyu:GSYVideoPlayer:8.1.2'
+
 }

BIN
app/libs/source.aar


BIN
app/libs/zxing-1.0.2.aar


+ 16 - 0
app/src/main/AndroidManifest.xml

@@ -16,6 +16,22 @@
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 
+    <!-- 网络权限 -->
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
+
+    <!-- mirror -->
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
+
+    <!-- 推送本地媒体权限 -->
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
+
+    <!-- 获取设备名称、蓝牙搜索(蓝牙搜索同时需要蓝牙权限和定位权限) -->
+    <uses-permission android:name="android.permission.BLUETOOTH" />
+    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
+
+
     <application
         android:name=".App"
         android:allowBackup="true"

+ 9 - 0
app/src/main/java/com/xunao/effectdemo/App.java

@@ -7,6 +7,7 @@ import android.content.pm.PackageManager;
 import android.os.Bundle;
 import android.util.Log;
 
+import com.hpplay.sdk.source.api.LelinkSourceSDK;
 import com.uc.crashsdk.export.CrashApi;
 import com.umeng.analytics.MobclickAgent;
 import com.umeng.commonsdk.UMConfigure;
@@ -40,6 +41,14 @@ public class App extends Application {
 		JPushInterface.setDebugMode(true);
 		JPushInterface.init(this);
 //		getSHA1Signature(this);
+
+	}
+
+	void initLebo(){
+//		LelinkSourceSDK.getInstance()
+//				//FIXME WARN: 这里替换为您申请的AppID & AppSecret,build.gradle替换为您的应用包名
+//				.setSdkInitInfo(this, getString(R.string.app_id), getString(R.string.app_secret))
+//				.easyPush(mBrowseContainer);
 	}
 
 	/**

+ 31 - 13
app/src/main/java/com/xunao/effectdemo/activity/GSXYVideoPlayerActivity.java

@@ -4,6 +4,7 @@ import android.app.Activity;
 import android.content.pm.ActivityInfo;
 import android.os.Bundle;
 import android.view.View;
+import android.widget.Button;
 import android.widget.ImageView;
 
 import androidx.annotation.Nullable;
@@ -12,6 +13,7 @@ import com.shuyu.gsyvideoplayer.GSYVideoManager;
 import com.shuyu.gsyvideoplayer.utils.OrientationUtils;
 import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
 import com.xunao.effectdemo.R;
+import com.xunao.effectdemo.view.VideoPreviewPlay;
 
 /**
  * author : 程中强
@@ -22,8 +24,10 @@ import com.xunao.effectdemo.R;
  */
 public class GSXYVideoPlayerActivity extends Activity {
 
-	StandardGSYVideoPlayer videoPlayer;
+	VideoPreviewPlay videoPlayer;
 	private OrientationUtils orientationUtils;
+	private Button btn;
+	private boolean isFirst = false;
 	private String url = "http://v3.cztv.com/cztv/vod/2018/06/28/7c45987529ea410dad7c088ba3b53dac/h264_1500k_mp4.mp4";
 	@Override
 	protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -40,10 +44,24 @@ public class GSXYVideoPlayerActivity extends Activity {
 		//增加title
 		videoPlayer.getTitleTextView().setVisibility(View.GONE);
 		//设置返回键
-		videoPlayer.getBackButton().setVisibility(View.GONE);
+		videoPlayer.getBackButton().setOnClickListener(v->{
+			finish();
+		});
 		videoPlayer.getFullscreenButton().setVisibility(View.GONE);
 		orientationUtils = new OrientationUtils(this, videoPlayer);
+		videoPlayer.setIsFinish(isFirst);
+		videoPlayer.setIsTouchWiget(isFirst);
+		videoPlayer.setIsTouchWigetFull(isFirst);
+		videoPlayer.setIfCurrentIsFullscreen(false);
 		videoPlayer.startPlayLogic();
+
+		btn = findViewById(R.id.btn_finish);
+		btn.setOnClickListener(v->{
+			isFirst = !isFirst;
+			videoPlayer.setIsFinish(isFirst);
+//			videoPlayer.setIsTouchWiget(isFirst);
+//			videoPlayer.setIsTouchWigetFull(isFirst);
+		});
 	}
 
 	@Override
@@ -66,15 +84,15 @@ public class GSXYVideoPlayerActivity extends Activity {
 			orientationUtils.releaseListener();
 	}
 
-	@Override
-	public void onBackPressed() {
-		//先返回正常状态
-		if (orientationUtils.getScreenType() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
-			videoPlayer.getFullscreenButton().performClick();
-			return;
-		}
-		//释放所有
-		videoPlayer.setVideoAllCallBack(null);
-		super.onBackPressed();
-	}
+//	@Override
+//	public void onBackPressed() {
+//		//先返回正常状态
+//		if (orientationUtils.getScreenType() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
+//			videoPlayer.getFullscreenButton().performClick();
+//			return;
+//		}
+//		//释放所有
+//		videoPlayer.setVideoAllCallBack(null);
+//		super.onBackPressed();
+//	}
 }

+ 94 - 0
app/src/main/java/com/xunao/effectdemo/utils/SoundPoolUtil.java

@@ -0,0 +1,94 @@
+package com.xunao.effectdemo.utils;
+
+import android.app.Activity;
+import android.content.Context;
+import android.media.AudioManager;
+import android.media.SoundPool;
+
+/**
+ * author : 程中强
+ * e-mail : 740479946@qq.com
+ * date : 2022/9/1617:28
+ * desc : 语音播放工具类
+ * version: 1.0
+ */
+public class SoundPoolUtil {
+
+	private volatile static SoundPoolUtil client;
+	private SoundPool mSoundPool;
+	private AudioManager mAudioManager;
+	/*允许同时播放的音频数(为1时会立即结束上一个音频播放当前的音频)*/
+	private static final int MAX_STREAMS = 1;
+	// Stream type.
+	private static final int streamType = AudioManager.STREAM_MUSIC;
+	private int mSoundId;
+	private int mResId;
+	private Context mainContext;
+
+	public static SoundPoolUtil getInstance(Context context) {
+		if (client == null)
+			synchronized (SoundPoolUtil.class) {
+				if (client == null) {
+					client = new SoundPoolUtil(context);
+				}
+			}
+		return client;
+	}
+
+	private SoundPoolUtil(Context context) {
+		this.mainContext = context;
+		mAudioManager = (AudioManager) this.mainContext.getSystemService(Context.AUDIO_SERVICE);
+		((Activity) this.mainContext).setVolumeControlStream(streamType);
+		this.mSoundPool = new SoundPool(MAX_STREAMS, streamType, 0);
+	}
+
+
+	/**
+	 * 播放音频
+	 * @param resId 本地音频资源
+	 */
+	public void playSoundWithRedId(int resId) {
+		this.mResId = resId;
+		this.mSoundId = this.mSoundPool.load(this.mainContext, this.mResId, 1);
+		this.mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
+			@Override
+			public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
+				playSound();
+			}
+		});
+
+	}
+
+	/**
+	 * 播放音频,但是当前有音频这正播放中时不响应该次音频播放
+	 * @param resId 本地音频资源
+	 */
+	public synchronized void playSoundUnfinished(int resId) {
+		if ( isFmActive()) return;
+		this.mResId = resId;
+		this.mSoundId = this.mSoundPool.load(this.mainContext, this.mResId, 1);
+		mSoundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
+			@Override
+			public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
+				playSound();
+			}
+		});
+	}
+
+	/**
+	 * 播放音频文件
+	 */
+	private void playSound() {
+		mSoundPool.play(this.mSoundId, 1.0f, 1.0f, 0, 0, 1f);
+	}
+
+	/**
+	 * 判断当前设备是否正在播放音频
+	 */
+	private boolean isFmActive() {
+		if (mAudioManager == null) {
+			return false;
+		}
+		return mAudioManager.isMusicActive();
+	}
+}

+ 68 - 0
app/src/main/java/com/xunao/effectdemo/view/VideoPreviewPlay.java

@@ -0,0 +1,68 @@
+package com.xunao.effectdemo.view;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.SeekBar;
+import android.widget.Toast;
+
+import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
+import com.xunao.effectdemo.R;
+import com.xunao.effectdemo.utils.SoundPoolUtil;
+
+/**
+ * author : 程中强
+ * e-mail : 740479946@qq.com
+ * date : 2022/9/1616:21
+ * desc :
+ * version: 1.0
+ */
+public class VideoPreviewPlay extends StandardGSYVideoPlayer {
+
+	private boolean isFinish = false;
+	private SoundPoolUtil soundPoolUtil;
+
+	public void setIsFinish(boolean isFinish){
+		this.isFinish = isFinish;
+	}
+	public VideoPreviewPlay(Context context, Boolean fullFlag) {
+		super(context, fullFlag);
+	}
+
+	public VideoPreviewPlay(Context context) {
+		super(context);
+	}
+
+	public VideoPreviewPlay(Context context, AttributeSet attrs) {
+		super(context, attrs);
+	}
+
+	@Override
+	public int getLayoutId() {
+		return super.getLayoutId();
+	}
+
+	@Override
+	protected void init(Context context) {
+		super.init(context);
+		soundPoolUtil= SoundPoolUtil.getInstance(context);
+		mProgressBar = (SeekBar) findViewById(R.id.progress);
+
+
+		mProgressBar.setOnTouchListener(new OnTouchListener() {
+			@Override
+			public boolean onTouch(View view, MotionEvent motionEvent) {
+				if(isFinish){
+					soundPoolUtil.playSoundWithRedId(R.raw.buyao);
+					Toast toast = Toast.makeText(context,"触摸事件",Toast.LENGTH_SHORT);
+					toast.setGravity(Gravity.TOP,0,0);
+					toast.show();
+					return true;
+				}
+				return false;
+			}
+		});
+	}
+}

+ 8 - 1
app/src/main/res/layout/activity_gsxy_video.xml

@@ -3,10 +3,17 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
+    <com.xunao.effectdemo.view.VideoPreviewPlay
         android:id="@+id/video_play"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_gravity="center"/>
 
+    <Button
+        android:id="@+id/btn_finish"
+        android:text="切换"
+        android:layout_alignParentRight="true"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+
 </RelativeLayout>

BIN
app/src/main/res/raw/buyao.wav