diff --git a/app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java b/app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java index cdec21b..15562e4 100644 --- a/app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java +++ b/app/src/main/java/qianmu/container/activity/H5/WebViewActivity.java @@ -106,6 +106,7 @@ public class WebViewActivity extends BaseActivity { private AICloudASRIntent aiCloudASRIntent; private TTSUtil ttsUtil; private String oldString=""; + private String resultString = ""; // 语音听写对象 private ASR mAsr; @@ -665,7 +666,8 @@ public class WebViewActivity extends BaseActivity { oldString = StringUtil.strSplice(oldString,parser.getText()); } if(!"".equals(parser.getVar())){ - voiceContent( StringUtil.strSplice(oldString,parser.getVar())); + resultString = StringUtil.strSplice(oldString,parser.getVar()); + voiceContent(resultString); } } } @@ -674,7 +676,7 @@ public class WebViewActivity extends BaseActivity { public void onInit(int status) { if (status == AIConstant.OPT_SUCCESS) { LoggerUtil.e("ASRInit: ","初始化成功!"); - } else { + } else if (status == AIConstant.OPT_FAILED) { binding.web.evaluateJavascript("javascript: window.voiceContent('{\"data\":\"\",\"error\":\"初始化失败\",\"flag\":2}');", null); } } @@ -683,6 +685,7 @@ public class WebViewActivity extends BaseActivity { public void onBeginningOfSpeech() { //本地vad打开时,才会执行 oldString=""; + resultString=""; LoggerUtil.e("ASRInit: ","onBeginningOfSpeech"); } @@ -698,7 +701,7 @@ public class WebViewActivity extends BaseActivity { runOnUiThread(new Runnable() { @Override public void run() { - binding.web.evaluateJavascript("javascript: window.voiceContent('{\"data\":\"\",\"flag\":1}');", null); + binding.web.evaluateJavascript("javascript: window.voiceContent('{\"data\":\""+resultString+"\",\"flag\":1}');", null); } }); LoggerUtil.e("ASRInit: ","onEndOfSpeech"); @@ -707,6 +710,7 @@ public class WebViewActivity extends BaseActivity { @Override public void onReadyForSpeech() { oldString=""; + resultString=""; LoggerUtil.e("ASRInit: ","onReadyForSpeech"); } diff --git a/app/src/main/java/qianmu/container/activity/program/MyPresentation.java b/app/src/main/java/qianmu/container/activity/program/MyPresentation.java index a06a5e2..8b3b2d9 100644 --- a/app/src/main/java/qianmu/container/activity/program/MyPresentation.java +++ b/app/src/main/java/qianmu/container/activity/program/MyPresentation.java @@ -2665,7 +2665,17 @@ class MyPresentation extends Presentation { videoView2.setOnPreparedListener(new CustomerVideoView.OnPreparedListener() { @Override public void onPrepared() { - videoStartPlay(videoView2, videoImg2, videoComponents0); + videoStartPlay(videoView2, videoImg2, videoComponents0, isvideoPlay0); + } + }); + + videoView2.setOnCompletionListener(new CustomerVideoView.OnCompletionListener() { + @Override + public void onCompletion() { + if(!LocSocCliManager.getLocalSocketState()){ + // 视频播放完成时的操作 + handler.sendEmptyMessage(TYPE_UPDATE_VIDEO0); + } } }); @@ -2705,10 +2715,19 @@ class MyPresentation extends Presentation { videoView3.setOnPreparedListener(new CustomerVideoView.OnPreparedListener() { @Override public void onPrepared() { - videoStartPlay(videoView3, videoImg3, videoComponents1); + videoStartPlay(videoView3, videoImg3, videoComponents1, isvideoPlay1); } }); + videoView3.setOnCompletionListener(new CustomerVideoView.OnCompletionListener() { + @Override + public void onCompletion() { + if(!LocSocCliManager.getLocalSocketState()){ + // 视频播放完成时的操作 + handler.sendEmptyMessage(TYPE_UPDATE_VIDEO1); + } + } + }); //视频播放发送错误时回调 videoView3.setOnErrorListener(new CustomerVideoView.OnErrorListener() { @Override @@ -2720,33 +2739,38 @@ class MyPresentation extends Presentation { } } - private void videoStartPlay(CustomerVideoView vView, ImageView imgView, NewProgramBean.components components){ - vView.setOnInfoListener(() -> { - // if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) - vView.setBackgroundColor(Color.TRANSPARENT); - imgView.setVisibility(View.GONE); + private void videoStartPlay(CustomerVideoView vView, ImageView imgView, NewProgramBean.components components, Boolean isPlay){ + vView.setOnInfoListener(new CustomerVideoView.OnInfoListener() { + @Override + public void onInfo() { + //vView.clearBackground(); + imgView.setVisibility(View.GONE); + } }); //视频准备完毕,可以进行播放 Log.e("(双面屏)TAG","准备好视频,开始播放"); - if( isvideoPlay0 ){ + if( isPlay ){ handler.removeMessages(TYPE_STOP_VIDEO_PLAY0); + handler.removeMessages(TYPE_STOP_VIDEO_PLAY1); if(components.getConfig().isPlayAudio()){ vView.setVolume(15f); }else { vView.setVolume(0f); } vView.start(); - - }else{ - Log.e("(双面屏)TAG","预加载播放暂停"); + }else { vView.start(); vView.setVolume(0f); //暂停播放 - handler.removeMessages(TYPE_STOP_VIDEO_PLAY0); - handler.sendEmptyMessageDelayed(TYPE_STOP_VIDEO_PLAY0,5000); + if(vView == videoView2){ + handler.removeMessages(TYPE_STOP_VIDEO_PLAY0); + handler.sendEmptyMessageDelayed(TYPE_STOP_VIDEO_PLAY0,5000); + }else{ + handler.removeMessages(TYPE_STOP_VIDEO_PLAY1); + handler.sendEmptyMessageDelayed(TYPE_STOP_VIDEO_PLAY1,5000); + } } - } /** * 更新video diff --git a/app/src/main/java/qianmu/container/view/CustomerVideoView.java b/app/src/main/java/qianmu/container/view/CustomerVideoView.java index 6b188c6..6893c79 100644 --- a/app/src/main/java/qianmu/container/view/CustomerVideoView.java +++ b/app/src/main/java/qianmu/container/view/CustomerVideoView.java @@ -4,24 +4,24 @@ import android.content.Context; import android.graphics.Color; import android.graphics.PixelFormat; import android.graphics.drawable.Drawable; -import android.net.Uri; import android.util.AttributeSet; import android.util.Log; import android.view.SurfaceView; import android.view.TextureView; import android.view.View; +import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.VideoView; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.google.android.exoplayer2.PlaybackException; import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.MediaItem; +import com.google.android.exoplayer2.PlaybackException; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; +import com.google.android.exoplayer2.ui.PlayerView; import com.google.android.exoplayer2.ui.StyledPlayerView; /** @@ -30,7 +30,7 @@ import com.google.android.exoplayer2.ui.StyledPlayerView; * Date: 2021/5/19 * Time: 13:59 */ - public class CustomerVideoView extends FrameLayout { +public class CustomerVideoView extends FrameLayout { private StyledPlayerView playerView; private ExoPlayer player; @@ -38,6 +38,7 @@ import com.google.android.exoplayer2.ui.StyledPlayerView; private OnErrorListener onErrorListener; private OnPreparedListener onPreparedListener; private OnInfoListener onInfoListener; + private Boolean isFirstFame = false; // 监听器接口,保持与 VideoView 兼容 public interface OnCompletionListener { @@ -81,21 +82,18 @@ import com.google.android.exoplayer2.ui.StyledPlayerView; // 设置背景透明 playerView.setBackgroundColor(Color.TRANSPARENT); playerView.setShutterBackgroundColor(Color.TRANSPARENT); - // 3. 设置使用透明背景 playerView.setUseArtwork(false); // 如果不需要 artwork playerView.setDefaultArtwork(null); // 清除默认 artwork - // 4. 设置 SurfaceView 透明 View videoSurfaceView = playerView.getVideoSurfaceView(); if (videoSurfaceView != null) { videoSurfaceView.setBackgroundColor(Color.TRANSPARENT); - // 如果使用 SurfaceView,设置格式支持透明 if (videoSurfaceView instanceof SurfaceView) { + Log.e("View: ","SurfaceView"); SurfaceView surfaceView = (SurfaceView) videoSurfaceView; - surfaceView.setZOrderOnTop(true); // 必须设置为 true 才能使透明生效 - surfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT); + replaceWithTextureView(playerView, (SurfaceView) surfaceView); }else if (videoSurfaceView instanceof TextureView) { // TextureView 默认支持透明 videoSurfaceView.setBackgroundColor(Color.TRANSPARENT); @@ -103,6 +101,25 @@ import com.google.android.exoplayer2.ui.StyledPlayerView; } } + private void replaceWithTextureView(StyledPlayerView playerView, SurfaceView oldSurface) { + ViewGroup parent = (ViewGroup) oldSurface.getParent(); + if (parent != null) { + // 创建新的 TextureView + TextureView textureView = new TextureView(getContext()); + textureView.setLayoutParams(oldSurface.getLayoutParams()); + + // 替换 + int index = parent.indexOfChild(oldSurface); + parent.removeView(oldSurface); + parent.addView(textureView, index); + + // 设置到播放器 + if (playerView.getPlayer() != null) { + playerView.getPlayer().setVideoTextureView(textureView); + } + } + } + private void initializePlayer() { // 创建 ExoPlayer 实例 player = new SimpleExoPlayer.Builder(getContext()) @@ -129,15 +146,17 @@ import com.google.android.exoplayer2.ui.StyledPlayerView; if (onCompletionListener != null) { onCompletionListener.onCompletion(); } + isFirstFame = false; } if(playbackState == Player.STATE_READY){ + Log.e("loadVideo: ","STATE_READY"); // 视频准备就绪 if (onPreparedListener != null) { onPreparedListener.onPrepared(); } - if (playerView != null) { - playerView.setVisibility(VISIBLE); - playerView.setAlpha(0); + setVisibility(VISIBLE); + if(playerView != null && !isFirstFame){ + playerView.setAlpha(0f); } } } @@ -150,14 +169,19 @@ import com.google.android.exoplayer2.ui.StyledPlayerView; } @Override public void onRenderedFirstFrame() { - // 视频开始渲染第一帧 + Log.e("loadVideo: ","FirstFrame"); if (onInfoListener != null) { onInfoListener.onInfo(); - onInfoListener=null; } + isFirstFame = true; if(playerView != null){ - playerView.setAlpha(1); + playerView.setAlpha(1f); } +// postDelayed(new Runnable() { +// @Override +// public void run() { +// } +// }, 100); } }); } @@ -206,14 +230,16 @@ import com.google.android.exoplayer2.ui.StyledPlayerView; @Override public void setBackgroundColor(int color) { super.setBackgroundColor(color); - + if (color != Color.TRANSPARENT && playerView != null) { + playerView.setVisibility(GONE); + } } @Override public void setBackgroundResource(int resid) { super.setBackgroundResource(resid); if (playerView != null) { - playerView.setVisibility(GONE); + playerView.setVisibility(INVISIBLE); } } @@ -345,3 +371,4 @@ import com.google.android.exoplayer2.ui.StyledPlayerView; } } +