SingleVideoView单聊视频

106 阅读1分钟
public class SingleVideoView extends ConstraintLayout {

    private PaasPlusRederView bigUserWindow;
    private ImageView ivAvatar;
    private SmallUserWindow smallUserWindow;

    private User user;
    private String remoteUserId;

    public SingleVideoView(@NonNull @NotNull Context context) {
        this(context, null);
    }

    public SingleVideoView(@NonNull @NotNull Context context, @Nullable @org.jetbrains.annotations.Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public SingleVideoView(@NonNull @NotNull Context context, @Nullable @org.jetbrains.annotations.Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context);
    }

    private void initView(Context context) {
        View view = LayoutInflater.from(context).inflate(R.layout.layout_single_video, this);
        bigUserWindow = view.findViewById(R.id.ppv_big);
        ivAvatar = view.findViewById(R.id.iv_avatar);
        smallUserWindow = view.findViewById(R.id.ppv_small);
        smallUserWindow.getRenderView().setZOrderMediaOverlay(true);
    }

    public void switchRemoteCamera(boolean isCameraOpen) {
        if (isCameraOpen) {
            if (MeetingManager.getInstance().getUser(remoteUserId).isVideoStream()) {
                bigUserWindow.setRenderViewVisibility(true);
                bigUserWindow.setVisibility(View.VISIBLE);

                ivAvatar.setVisibility(View.GONE);
            } else {
                cameraDisable();
            }
        } else {
            cameraDisable();
        }
    }

    private void cameraDisable() {
        bigUserWindow.setRenderViewVisibility(false);
        bigUserWindow.setVisibility(View.GONE);

        ivAvatar.setVisibility(View.VISIBLE);
    }

    public void setVisible(boolean isVisible) {
        if (isVisible) {
            if (isVisible()) {
                return;
            }
            setVisibility(View.VISIBLE);
            getSmallUserWindow().switchCamera(MeetingManager.getInstance().getUser(user.getUserId()).isOpenCamera());
            setRemoteStream();
            setRemoteUserInfo();
        } else {
            if (!isVisible()) {
                return;
            }
            setVisibility(View.GONE);
            if (!TextUtils.isEmpty(remoteUserId)) {
                if (MeetingManager.getInstance().getUser(remoteUserId).isAvailableStream()) {
                    MeetingManager.getInstance().stopPlay(remoteUserId, bigUserWindow);
                }
            }
        }
    }

    public boolean isVisible() {
        return getVisibility() == View.VISIBLE;
    }

    //动态取map中除自己外第一个可用的远端流订阅
    public void setRemoteStream() {
        for (Map.Entry<String, MeetingUserInfo> userInfoEntry : MeetingManager.getInstance().getAllUser().entrySet()) {
            if (userInfoEntry.getKey().equals(user.getUserId())) {
                continue;
            }
            if (userInfoEntry.getValue().isAvailableStream()) {
                remoteUserId = userInfoEntry.getKey();
                MeetingManager.getInstance().startPlay(remoteUserId, PaasPlusSDKStreamType.VIDEO, bigUserWindow);
                break;
            }
        }
    }

    //动态取map中除自己外第一个用户信息
    public void setRemoteUserInfo() {
        for (Map.Entry<String, MeetingUserInfo> userInfoEntry : MeetingManager.getInstance().getAllUser().entrySet()) {
            if (userInfoEntry.getKey().equals(user.getUserId())) {
                continue;
            }
            GlideShowUtil.showCircleImage(getContext(), ivAvatar, userInfoEntry.getValue().getAvatarUrl());
            break;
        }
    }

    public SmallUserWindow getSmallUserWindow() {
        return smallUserWindow;
    }

    public void setUser(User user) {
        this.user = user;
    }
}