VideoUserWindow多人视频窗口

161 阅读1分钟
public class VideoUserWindow extends RelativeLayout {

    private PaasPlusRederView ppv;
    private ImageView ivSwitchCamera;
    private ImageView ivAvatar;
    private ImageView ivVoice;
    private TextView tvName;
    private String userId;
    private Context context;
    private User user;
    private OnLayoutChangeListener listener;

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

    public VideoUserWindow(@NonNull @NotNull Context context, @Nullable @org.jetbrains.annotations.Nullable AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        initView(context);
    }

    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        super.onLayout(changed, l, t, r, b);
        if (changed) {
            if (listener != null) {
                listener.onLayoutChange(this);
            }
        }
    }

    private void initView(Context context) {
        View view = LayoutInflater.from(context).inflate(R.layout.layout_user_window, this);
        ppv = view.findViewById(R.id.ppv);
        ivSwitchCamera = view.findViewById(R.id.iv_switch_camera);
        ivAvatar = view.findViewById(R.id.iv_avatar);
        ivVoice = view.findViewById(R.id.iv_voice);
        tvName = view.findViewById(R.id.tv_name);

        //初始化view展示默认ui
        setBackgroundResource(R.drawable.shape_multi_video_window_bg);

        user = UserUtil.getUserUtil(context).getUserData();
    }

    public void updateUser() {
        String name = MeetingManager.getInstance().getUser(userId).getName();
        if (!TextUtils.isEmpty(name)) {
            tvName.setText(name);
        }
        String avatarUrl = MeetingManager.getInstance().getUser(userId).getAvatarUrl();
        if (!TextUtils.isEmpty(avatarUrl)) {
            GlideShowUtil.showCircleImage(context, ivAvatar, avatarUrl);
        }
    }

    public void switchCamera() {
        if (MeetingManager.getInstance().getUser(userId).isOpenCamera()) {
            if (userId.equals(user.getUserId()) || MeetingManager.getInstance().getUser(userId).isVideoStream()) {
                ppv.setRenderViewVisibility(true);

                ppv.setVisibility(View.VISIBLE);

                ivAvatar.setVisibility(View.GONE);
                if (userId.equals(user.getUserId())) {
                    setPreviewView();
                    ivSwitchCamera.setVisibility(View.VISIBLE);
                }
            } else {
                cameraDisable();
            }
        } else {
            cameraDisable();
        }

    }

    private void cameraDisable() {
        if (userId.equals(user.getUserId())) {
            stopPreviewView();
            ivSwitchCamera.setVisibility(View.GONE);
        }
        ppv.setRenderViewVisibility(false);
        ppv.setVisibility(View.GONE);

        ivAvatar.setVisibility(View.VISIBLE);
    }

    public void switchMic() {
        if (MeetingManager.getInstance().getUser(userId).isOpenMic()) {
            ivVoice.setVisibility(View.VISIBLE);
            ivVoice.setImageResource(R.drawable.audiovideo_voice_small);
        } else {
            ivVoice.setVisibility(View.GONE);
        }
    }

    public void setMaxVoice(boolean isMaxVoice) {
        if (isMaxVoice) {
            setBackgroundResource(R.drawable.shape_video_window_voice_big_bg);
            ivVoice.setImageResource(R.drawable.audiovideo_voice_big);
        } else {
            setBackgroundResource(R.drawable.shape_multi_video_window_bg);
            ivVoice.setImageResource(R.drawable.audiovideo_voice_small);
        }
    }

    public void bindUser(String userId) {
        this.userId = userId;
        if (userId.equals(user.getUserId())) {
            ivSwitchCamera.setVisibility(View.VISIBLE);
            ivSwitchCamera.setOnClickListener(v -> MeetingManager.getInstance().transCamera());
            tvName.setText("我");
            GlideShowUtil.showCircleImage(context, ivAvatar, user.getAvatarUrl());
        } else {
            ivSwitchCamera.setVisibility(View.GONE);
        }
    }

    public String getUserId() {
        return userId;
    }

    public PaasPlusRederView getRenderView() {
        return ppv;
    }

    public void startPlay() {
        if (userId.equals(user.getUserId())) {
            return;
        }
        if (MeetingManager.getInstance().getUser(userId).isAvailableStream()) {
            MeetingManager.getInstance().startPlay(userId, PaasPlusSDKStreamType.VIDEO, ppv);
            ppv.setClipToOutline(true, 20f);
        }
    }

    public void stopPlay() {
        if (userId.equals(user.getUserId())) {
            return;
        }
        if (null != MeetingManager.getInstance().getUser(userId)) {
            MeetingManager.getInstance().stopPlay(userId, ppv);
        }
    }

    public void setPreviewView() {
        MeetingManager.getInstance().setPreviewView(ppv);
    }

    public void stopPreviewView() {
        MeetingManager.getInstance().stopPreviewView();
    }

    public void setOnLayoutChangeListener(OnLayoutChangeListener listener) {
        this.listener = listener;
    }

    public interface OnLayoutChangeListener {

        void onLayoutChange(VideoUserWindow userWindow);
    }
}