Skip to content

12월 08일

top-chaser edited this page Dec 13, 2023 · 2 revisions

발표 자료

우리의 목표

  • 기술적으로 성장하는 것이 목표

프로젝트 소개

  • 트위치, 아프리카와 같은 실시간 방송 스트리밍 서비스 입니다!
  • 실제 여러 bj나 스트리머의 방송을 많이 보고 접하는데 과연 이런 플랫폼은 어떻게 이루어져 있을까? 라는 생각을 하게 되었고,
  • 실제로 스트리밍 관련 기술이 어렵다고 알고 있고 이번에 전부 처음 경험하는 것이다 보니 기술적인 성장을 이룰 수 있을 것 같아서 주제를 선택했습니다!

API 연결

  • Postman 문서화 완료
  • 기능단위로 구현한 부분들 전체 플로우로 합치기

Thumbnail

시도 1 - S3에 있는 m3u8 → ts 추출 → ffmpeg로 thumbnail.jpg 만들기

시도 2 - Encoding 서버에서 flv → png

recorder preview {
                record keyframes;
                record_max_frames 4;
                record_path /opt/flv;
                record_interval 10s;

                exec_record_done ffmpeg -i $path -vcodec png -vframes 1 -an -f rawvideo -s 426x240 -ss 00:00:01 -y /opt/data/thumb/$name.png;
            }
        }

오류 - 처음에 thumbnail이 저장이 안되었음 → docker logs 를 통해 /opt/flv, /opt/data/thumb/ 파일이 없어서 생긴 오류였다. → /opt/flv, /opt/data/thumb/ 생성 → 권한 추가 → 오류 해결

위의 docker image의 nginx.conf 를 수정하고 /opt/flv, /opt/data/thumb/ 을 생성해서 docker image를 만들어서 docker hub에 업로드함. 서버에서 직접 docker image 다운 받아서 container 생성. 추후 Dockerfile로 변경예정

결과

오류 해결, Encoding server에서 바로 Object storage로 thumbnail 전송

채팅 필터링 AI 연결

사용자가 채팅을 입력하면 순화된 텍스트로 변환해 다른 사용자들에게 반환합니다.

하지만 API에 시간당 요청 제한이 걸려있어 모든 채팅이 필터링 되지는 않습니다.

강퇴 기능 구현

  • 소켓에서 kick이라는 명령어를 nickname과 함께 보냄
  • 서버에서는 그 명령어를 받아 그대로 kick을 보낸 소켓과 같은 방에 있는 모든 클라이언트에게 돌려 보내줌
  • 그러면 소켓에서 메시지를 받고 로컬 스토리지에 있는 닉네임과 비교해 받은 닉네임과 본인의 닉네임이 같으면 경고 메시지를 띄운 후 메인 화면으로 리다이렉트함

배포 시 프론트 env파일 안들어가는 이슈 해결

  • 계속 배포된 페이지에서 env 환경변수를 인식하지 못하는 이슈
  • 원래 사용하던 방법은 백엔드 서버와 똑같이 미리 사용하는 ncp server에 env파일을 올려두고 docker run 할때 부여를 해줬다.
docker run -d -p 80:80 --env-file ${{ secrets.ENV_PATH }} ${{ secrets.NCP_CONTAINER_REGISTRY }}/rtmp-server
  • 하지만 이렇게 할 경우 계속 배포서버에서는 undefined가 뜨면서 환경변수를 가져오지 못함.

  • 여러 문서를 찾아보다가 docker run하면서 env를 부여해주는게 아닌 이미지 자체를 빌드할 때 만들어줘야 한다는 것을 찾음

  • 해결

    • 깃허브 액션으로 배포 할 때 secrets으로 변수 전달
    build-args: |
    	VITE_API_URL=${{ secrets.VITE_API_URL }}
    	VITE_HLS_URL=${{ secrets.VITE_HLS_URL }}
    • dockerfile에서 변수를 받아 Run echo명령으로 env파일 생성 후 빌드
    ARG VITE_API_URL
    ARG VITE_HLS_URL
    
    RUN echo "VITE_API_URL=$VITE_API_URL" > .env
    RUN echo "VITE_HLS_URL=$VITE_HLS_URL" > .env
    

    → 잘 해결

다음 주에 할 일

  • 리드미 정리
  • 깃 위키 정리
  • 발표자료 준비
  • 발표 준비
  • BE
    • 테스트 코드 작성
    • 리팩토링
    • Validation
    • docker logs 저장하기
Clone this wiki locally