지원봇
윤지원 블로그
지원봇
전체 방문자
오늘
어제
  • 분류 전체보기 (5)
    • 기록 (4)
    • ETC (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • React
  • MediaRecorder
  • Mimetype
  • Audio
  • javascript

최근 댓글

최근 글

티스토리

지원봇

윤지원 블로그

기록

디바이스 환경(하드웨어, 소프트웨어)에 따른 음성 녹음 및 재생 불가능 문제

2023. 4. 18. 19:52

안녕하세요 여러분! 이번 글에서는 제가 최근 프론트엔드 개발자로 참여한 프로젝트를 진행하면서 경험한

오디오 코덱 크로스브라우징 이슈의 원인과 해결 과정을 공유하려고 합니다.

 

1. 이슈 발생 배경? 🔥

해당 이슈는 프로젝트의 핵심 기능인 보이스리플 개발 과정에서 발견되었습니다. 작동 흐름을 간단히 설명하면 다음과 같습니다.

  1. 사용자가 보이스리플 녹음 버튼을 클릭합니다.
  2. 클라이언트 측에서 MediaRecorder를 이용하여 오디오를 녹음하고 Blob 형태로 저장합니다.
  3. FormData 객체를 생성하고, Blob 데이터를 추가합니다.
  4. axios를 사용하여 POST 요청을 생성하고, FormData 객체를 body로 설정하여 POST 요청을 전송합니다.
  5. 백엔드에서는 받은 파일을 AWS S3에 업로드합니다.
  6. 클라이언트 측에서 게시글을 조회하면 업로드된 파일의 S3 URL을 이용하여 녹음된 오디오를 재생합니다.

 

2. 문제점 파악 🤔

보이스리플 개발을 거의 완료한 후, 팀원들과 함께 진행한 기능 테스트 과정에서 다음과 같은 문제가 발생했습니다.

  • MacOS Chorme 브라우저에서 녹음 -> iOS Chorme 브라우저에서 재생 불가
  • iOS Chorme 브라우저에서 녹음 -> MacOS Chorme 브라우저에서 재생 가능

이런 문제를 만나 당황했지만, 배포 전에 발견된 것이 다행이라고 생각하며 원인을 착기 위해 자료 조사를 시작했습니다.

 

3. 원인은 무엇인가요? 🔍

같은 Chorme 브라우저임에도 불구하고 운영체제(OS)에 따른 문제가 발생한 것으로 추측하였고, 사용했던 MediaRecorder API 관련 MDN 문서들을 참조하여 원인을 파악했습니다.

  • MediaRecorder 생성자에서 mimeType 옵션을 사용하면 녹음이나 비디오 캡처 시 사용할 미디어 형식과 코덱을 지정할 수 있습니다.
  • 디바이스 환경(하드웨어,소프트웨어)에 따라 지원하는 미디어 유형과 코덱이 다르며, mimeType을 지정하지 않으면 디바이스 환경에 맞춰 기본값이 적용됩니다.
  • 미디어 형식과 코덱에 따라 미디어의 품질과 크기가 달라집니다.
  • 지원하지 않는 mimeType을 지정하면 에러(NotSupportedError)를 반환합니다.

위 정보를 바탕으로 원인은 디바이스 환경에 따른 오디오 형식의 차이 때문에 발생한 문제임을 알게 되었습니다.

 

4. 해결 방법 🎯

문제의 원인을 팀원들과 공유한 후, 보이스리플 백엔드 담당자와 함께 해결 방안에 대해 논의했습니다.

결론적으로 다음과 같은 방안을 세웠습니다.

  • 각 환경에서 기본값으로 녹음을 진행한 후, 재생 가능한 오디오 형식으로 인코딩 과정을 거칩니다.
  • 호환성과 압축률을 고려하여 MP3 형식으로 인코딩 합니다.(참고: https://caniuse.com/?search=mp3)
  • 오디오 인코딩은 클라이언트에서 진행하여 서버 부하를 줄입니다.

이에 따라 클라이언트에서 MP3로 인코딩하기 위해 ffmpeg 관련 라이브러리를 찾아 사용했습니다.이를 통해 MP3 변환에 성공하였고,크로스브라우징 이슈를 해결할 수 있었습니다.

 

5. 글을 마치며 🙇🏻‍♂️

이번 오디오 관련 이슈 해결을 통해 다양한 미디어 타입(video, audio, image 등)에 대한 이해를 높일 수 있었고, 개발자는 사용자를 위해 최적의 선택을 해야 한다는 것을 깨달았습니다.

 

또한, 오디오 인코딩을 클라이언트에서 진행함으로써 서버 부하를 줄일 수 있다는 생각은 했지만, 사용자의 단말기 사양 또한 중요한 역할을 한다는 것을 인지하게 되었습니다.

 

이상으로 오디오 코덱 크로스브라우징 이슈에 대한 글을 마치겠습니다.

 

 

참조한 자료들

iOS에서 지원하는 오디오 타입 찾기

  • iphone 6 제품 사양
  • iphone 제품 리스트(전체)

MediaRecorder 관련 MDN

  • MediaDevices와 관련 매서드
  • MediaStream_Recording_API
  • MediaRecorder() 생성자
  • 지원하는 미디어 타입 확인하는 매서드 isTypeSupported()

코덱을 이해하는데 도움이 된 자료

  • 웹 오디오 코덱 가이드(MDN)
  • 오디오 코덱 원리(유튜브)

mimeTpye과 종류에 대해

  • https://www.iana.org/assignments/media-types/media-types.xhtml
  • mimeTpye(MDN)

 

저작자표시 비영리 변경금지 (새창열림)

'기록' 카테고리의 다른 글

프론트엔드 개발자로서 첫 실무 경험 회고  (0) 2024.11.13
게임패드로 로봇 이슈 기록하기: 딸깍이 개발 과정  (0) 2024.11.07
현장에서 개발자로: 자율주행 로봇 회사에서의 성장 이야기  (2) 2024.11.05
    '기록' 카테고리의 다른 글
    • 프론트엔드 개발자로서 첫 실무 경험 회고
    • 게임패드로 로봇 이슈 기록하기: 딸깍이 개발 과정
    • 현장에서 개발자로: 자율주행 로봇 회사에서의 성장 이야기
    지원봇
    지원봇

    티스토리툴바