更换直播间视频渲染层以修复部分机型和模拟器滑动视频时白屏问题

This commit is contained in:
zlzw 2023-01-07 09:54:37 +08:00
parent 8c0a23d39a
commit 80993c7d2d
5 changed files with 33 additions and 25 deletions

View File

@ -6,12 +6,12 @@ import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.SurfaceView;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.analytics.AnalyticsListener;
import com.google.android.exoplayer2.ui.StyledPlayerView;
import com.google.android.exoplayer2.video.VideoSize;
/**
@ -23,7 +23,7 @@ public class LiveExoPlayerManager {
private final int MODEL_PLAY2 = 1;//当前子播放器
private Context mContext;
private ExoPlayer player1, player2;
private SurfaceView mainView;//渲染视图
private StyledPlayerView mainView;//渲染视图
private int status = MODEL_PLAY1;
private Player.Listener listener;
private boolean isSwitchUrl = false;//是否为主动切换播放器
@ -42,11 +42,12 @@ public class LiveExoPlayerManager {
setAnalyticsListener();
}
public void setListener(Player.Listener listener) {
this.listener = listener;
}
public void setMainView(SurfaceView mainView) {
public void setMainView(StyledPlayerView mainView) {
this.mainView = mainView;
}
@ -119,7 +120,8 @@ public class LiveExoPlayerManager {
Player.Listener.super.onIsPlayingChanged(isPlaying);
if (isPlaying) {
Log.i(TAG, "onIsPlayingChanged1: 播放了");
player1.setVideoSurfaceView(mainView);
//player1.setVideoSurfaceView(mainView);
mainView.setPlayer(player1);
status = MODEL_PLAY1;
isSwitchUrl = false;
if (listener != null) {
@ -169,7 +171,8 @@ public class LiveExoPlayerManager {
Player.Listener.super.onIsPlayingChanged(isPlaying);
if (isPlaying) {
Log.i(TAG, "onIsPlayingChanged2: 播放了");
player2.setVideoSurfaceView(mainView);
//player2.setVideoSurfaceView(mainView);
mainView.setPlayer(player2);
status = MODEL_PLAY2;
isSwitchUrl = false;
if (listener != null) {
@ -202,7 +205,8 @@ public class LiveExoPlayerManager {
public void startUrl(String url) {
isSwitchUrl = true;
playBufferIndex = 0;
getNowPlayer().setVideoSurfaceView(mainView);
//getNowPlayer().setVideoSurfaceView(mainView);
mainView.setPlayer(getNowPlayer());
getNowPlayer().setMediaItem(createMediaItem(url));
getNowPlayer().prepare();
getNowPlayer().play();

View File

@ -13,7 +13,6 @@ import android.os.Looper;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
@ -22,13 +21,9 @@ import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.PlaybackException;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.Tracks;
import com.google.android.exoplayer2.ui.StyledPlayerView;
import com.google.android.exoplayer2.video.VideoSize;
import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.core.BasePopupView;
@ -93,7 +88,7 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder {
private ViewGroup mLeftContainer;
private ViewGroup mRightContainer;
private RelativeLayout mPkContainer;
public static SurfaceView mVideoView;
public StyledPlayerView mVideoView;
private View mLoading, mLoading2;
private ImageView mCover;
@ -145,7 +140,7 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder {
mLeftContainer = (ViewGroup) findViewById(R.id.left_container);
mRightContainer = (ViewGroup) findViewById(R.id.right_container);
mPkContainer = (RelativeLayout) findViewById(R.id.pk_container);
mVideoView = (SurfaceView) findViewById(R.id.video_view);
mVideoView = (StyledPlayerView) findViewById(R.id.video_view);
ry_view = (FrameLayout) findViewById(R.id.ry_view);
leave = (ImageView) findViewById(R.id.leave);
mLoading = findViewById(R.id.loading);
@ -353,8 +348,8 @@ public class LivePlayRyViewHolder extends LiveRoomPlayViewHolder {
public void stopPlay2() {
}
public static void setViewUP(int i) {
@Override
public void setViewUP(int i) {
if (mVideoView == null) return;
Log.e("", "整理" + i);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mVideoView.getLayoutParams();

View File

@ -62,6 +62,8 @@ public abstract class LiveRoomPlayViewHolder extends AbsViewHolder implements IL
this.mLiveBean = data;
}
public void setViewUP(int i){}
public OnMicCallback getOnMicCallback() {
return onMicCallback;
}

View File

@ -492,17 +492,17 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
}
}
if (data.getEnterRoomInfo().getIsconnection() != null && data.getEnterRoomInfo().getIsconnection().equals("1")) {
if (mLivePlayViewHolder != null && data.getEnterRoomInfo().getIsconnection() != null && data.getEnterRoomInfo().getIsconnection().equals("1")) {
LivePlayRyViewHolder.setViewUP(1);
mLivePlayViewHolder.setViewUP(1);
}
if (mLiveRoomViewHolder != null) {
mLiveRoomViewHolder.pkHandler = false;
}
if (pkInfo.getIntValue("ifpk") == 1 && pkInfo.getString("end_pk_time").equals("0")) {//pk开始了
if (mLivePlayViewHolder != null && pkInfo.getIntValue("ifpk") == 1 && pkInfo.getString("end_pk_time").equals("0")) {//pk开始了
LivePlayRyViewHolder.setViewUP(2);
mLivePlayViewHolder.setViewUP(2);
//pk排名数据
LivePKUserListBean livePKUserListBean = JSON.parseObject(pkInfo.getString("pk_top_users"), LivePKUserListBean.class);
@ -526,7 +526,9 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
mLiveRoomViewHolder.pkHandler = true;
mLiveRoomViewHolder.initPkRank(null);
}
LivePlayRyViewHolder.setViewUP(3);
if(mLivePlayViewHolder != null) {
mLivePlayViewHolder.setViewUP(3);
}
//pk排名数据
LivePKUserListBean livePKUserListBean = JSON.parseObject(pkInfo.getString("pk_top_users"), LivePKUserListBean.class);
@ -541,7 +543,9 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
if (mLiveRoomViewHolder != null) {
mLiveRoomViewHolder.initPkRank(null);
}
LivePlayRyViewHolder.setViewUP(4);
if(mLivePlayViewHolder != null) {
mLivePlayViewHolder.setViewUP(4);
}
mLiveRoomViewHolder.UpPkBar(pkInfo.getJSONArray("userlist"), mLiveBean.getUid(), pkInfo.getIntValue("drpk_time"));
}
@ -1270,7 +1274,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
mLivePlayViewHolder.setLiveBeanLandscape(1);
}
if (mContext instanceof LiveAudienceActivity) {
((LiveAudienceActivity)mContext).setPkStatus(true);
((LiveAudienceActivity) mContext).setPkStatus(true);
}
}
@ -1287,7 +1291,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
mLivePlayViewHolder.setLiveBeanLandscape(landscape);
}
if (mContext instanceof LiveAudienceActivity) {
((LiveAudienceActivity)mContext).setPkStatus(false);
((LiveAudienceActivity) mContext).setPkStatus(false);
}
}

View File

@ -7,9 +7,12 @@
android:layout_height="match_parent">
<SurfaceView
<com.google.android.exoplayer2.ui.StyledPlayerView
android:id="@+id/video_view"
android:layout_width="match_parent"
app:surface_type="texture_view"
app:resize_mode="zoom"
app:use_controller="false"
android:layout_height="match_parent" />
<ImageView