달콤수학 서비스 진행 중
해외 유저의 비디오 재생과 관련하여 끊김과 로딩이 계속 돌아가는 이슈가 발생함
관련 코드를 훑어보았을 때,
코드 간의 의존성이 높아서 많은 부분을 수정하기는 시간의 구애가 있었음
따라서 두 가지 사항을 중점으로 개선 방향을 잡음
소켓 연결 최적화
유저의 공지사항 알림으로 인해 소켓이 전역으로 연결되어 있었음
해외 유저와 비슷한 환경인 slow 3G에서 테스트 해본 결과 대역폭이 제한된 환경에서는 소켓이 네트워크에 큰 부하를 가할 수 있음을 확인함.
소켓 연결을 페이지 별로 제한하여 네트워크 대역폭을 비디오 스트리밍과 소켓 통신으로 나누어 사용하지 않도록 함. 오버헤드를 줄임으로서 비디오 세그먼트를 포함한 리소스 로드의 지연을 해소함.
비디오 용량 감소
테스트 영상의 원본 크기는 46MB로 slow 3G에서 스트리밍 하기에 상당히 큰 용량임.
더 낮은 해상도나 낮은 비트 전송률을 위해 현재 상황에서 가장 빠르게 대응 가능한 방법이 원본 영상 자체의 크기를 줄이는 것이라고 판단함.
비디오 크기 감소 -> 비트 전송률 줄임 -> 초당 데이터 양이 줄어서 추가 데이터를 위한 버퍼링이 최소화됨
추후 개선 방향으로 고민한 것은 두 가지가 있음
화질별 영상 업로드
BO에서 화질 별로 영상을 업로드 하고 B2C 비디오 플레이어에 화질 옵션을 추가함
프론트 공수는 적고 서버 공수가 전혀 없다는 이점이 있지만, BO 관리자가 영상을 여러개 생성하여 업로드 하는 과정이 번거롭다는 단점
적응형 스트리밍 사용
BO에서 단일 비디오 업로드 -> 서버에서 비디오 파일을 m3u8 형식으로 변환 (FFmpeg 명령을 통해 인코딩된 HLS 형식으로 변환하여 '.m3u8' 재생 목록과 '.ts' 세그먼트 파일 생성함) -> 변환한 파일(m3u8 파일+ 세그먼트)을 s3 업로드
프론트 공수가 전혀 없으며 사용자 네트워크에 따라 비디오 품질을 자동으로 조절(*hls)된다는 장점이 있지만 서버 공수가 크다는 단점