RTMP으로 Video Streaming 구현하기 (DASH, HLS) - 2 트러블 슈팅 및 정리
트러블 슈팅 1. Video.js에서 Shaka Player로 전환한 이유 ● 초기에는 Video.js를 사용하여 플레이어를 구성 하고자 하였음. ● 그러나 화질 선택 기능 을 원하는 방식으로 구현하는 데 한계가 있어, JavaScript로 화질 선택 버튼을 직접 구현하는 방향으로 변경함. → 이 방식은 기능적으로 대응 가능했으나, 브라우저 창 크기에 따라 화질 선택 버튼의 위치가 비정상적으로 표시되는 UI 문제 가 발생함. ● 이후 Video.js의 기본 화질 선택 기능을 활용하는 방향도 검토하였으나, HLS의 manifest.m3u8 정보를 정상적으로 읽어 화질 정보를 표시하지 못하는 문제 가 확인됨. ● 이에 따라 JavaScript에서 manifest 정보를 직접 파싱하여 화면에 출력하는 방식으로 다시 변경함. → 다만 이 과정에서 JavaScript 코드가 점차 복잡하고 비대해지면서, 유지보수가 어려운 스파게티 코드 형태 로 작성되는 문제가 발생함. → 즉, 초기에는 Video.js 기반으로 기능을 해결 하고자 하였으나, 화질 선택 기능과 UI 제어 측면에서 한계가 있었음. → 이후 직접 구현 방식으로 전환하면서 기능적 대응은 가능해졌지만, 코드 복잡도 증가와 유지보수성 저하 라는 새로운 문제가 발생함. → 따라서 단순한 기능 구현을 넘어, 플레이어 구조 자체를 보다 일관되고 유지보수 가능한 방향으로 재정비할 필요 가 있었음. 2. HLS / DASH 프로토콜 구분 논리 ● 처음에는 브라우저명을 기준으로 HLS / DASH 프로토콜을 구분 하고자 하였음. Safari - HLS iOS Safari - HLS iPadOS Safari - HLS Chrome - DASH Edge Chromium - DASH Firefox - DASH Opera - DASH ● 그러나 실제 브라우저 환경에서는 native HLS와 MediaSource 기반 재생을 모두 가질 수 있어 , 브...