Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FE] feat: Room UI구성, Room에 입장 한 후에도 캠, 오디오 켜고 끄는 기능 추가 #61

Merged
merged 7 commits into from
Nov 16, 2023

Conversation

d0422
Copy link
Collaborator

@d0422 d0422 commented Nov 16, 2023

PR 설명

Room UI구성, Room에 입장 한 후에도 캠, 오디오 켜고 끄는 기능 추가

✅ 완료한 기능 명세

  • Room UI구성
  • 비디오, 오디오 컨트롤 공통 컴포넌트로 분리
  • Room 내부에서도 비디오, 오디오 on/off설정 기능 추가

📸 스크린샷

image

고민과 해결과정

Video 높이 조정이 안되는 건에 대하여...

Video는 width를 기준으로 렌더링되고, height를 기준으로 렌더링 되지는 않는다.
이 문제를 해결하기위해 absolute를 활용해서 처리해주었다.

...
    <div className="relative w-full h-full">
      <video
        ref={videoRef}
        autoPlay
        className="absolute object-cover w-full h-full rounded-3xl shadow-black drop-shadow-2xl"
        playsInline
        muted={muted}
      >
        <track kind="captions" />
      </video>

다만, 이렇게 했더니 방 참여전 setting컴포넌트에서는 높이가 명시되지 않아서 지정해줘야하는 문제가 발생했다.
일단 높이를 주는 형태로 구현해두었다.

        <div className="relative w-full h-[550px]">
          <Video stream={stream} muted />

비디오,오디오 on/off 상태 관리, 버튼 공통컴포넌트로 처리

설정 창에서 설정한 내용을 방 입장시에도 유지할 수 있어야 하므로 해당 부분을 전역으로 관리할 필요가 생겼다.
또한, 이걸 관리하는 버튼은 기능적으로는 똑같으므로, 하나의 공통 컴포넌트로 묶어줄 수 있었다.

kind가 audio냐 video냐에 따라 다른 기능, 다른 이미지를 보여주도록 분기시켰다.

공통 - common
나머지는 section별로 폴더를 만들어서 분리
Room페이지 섹션별 컴포넌트 구성
(#60)
비디오, 오디오 on/off상태 공유를 위한 전역 상태 추가
(#60)
마이크 비디오 상태 컨트롤을 위한 공통 컴포넌트 작성
(#60)
Room 페이지에서 stream 상태를 조정할 수 있는 버튼/기능 추가
(#60)
@d0422 d0422 added feature 기능 구현 FrontEnd 프론트엔드 관련 labels Nov 16, 2023
@d0422 d0422 self-assigned this Nov 16, 2023
@d0422 d0422 linked an issue Nov 16, 2023 that may be closed by this pull request
3 tasks
MediaControlButton 컴포넌트 기능 테스트 추가
Video on/off 테스트추가
Audio on/off 테스트추가
(#60)
@d0422 d0422 requested a review from HBSPS November 16, 2023 10:03
Copy link
Collaborator

@HBSPS HBSPS left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

Comment on lines 8 to 11
if (kind === 'mic' && state) return micOnSVG;
if (kind === 'mic' && !state) return micOffSVG;
if (kind === 'video' && state) return videoOnSVG;
if (kind === 'video' && !state) return videoOffSVG;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

state 대신에 어떤 상태인지 명확하게 나타내면 좋을 것 같아요

예를 들면 isOn과 같은걸 사용할 수 있을 것 같아요!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

function selectImage(kind: 'mic' | 'video', isOn: boolean) {
  if (kind === 'mic' && isOn) return micOnSVG;
  if (kind === 'mic' && !isOn) return micOffSVG;
  if (kind === 'video' && isOn) return videoOnSVG;
  if (kind === 'video' && !isOn) return videoOffSVG;
  throw new Error('잘못된 입력입니다!');
}

반영했습니다!

Comment on lines 8 to 12
mediaObject: MediaObject;
streamList: {
id: string;
stream: MediaStream;
}[];
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

줄이 바뀌게 되어 한 눈에 파악하기 어려운 것 같아요

대신에 interface 또는 type으로 별도로 선언해도 좋지 않을까요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

반영하였습니다!

type StreamType = {
  id: string;
  stream: MediaStream;
};

코드리뷰 반영
state -> isOn
복잡한 타입 선언을 커스텀 타입 생성하여 표기
@d0422 d0422 merged commit 77a41f3 into boostcampwm2023:dev Nov 16, 2023
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature 기능 구현 FrontEnd 프론트엔드 관련
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[FE] Room UI구성
2 participants