본문 바로가기

프로그래밍 회고록/Javascript & FrontFramework

Java(Spring)와 JavaScript(vue.js)로 서버단 Mp3파일 클라이언트로 보내 재생하기 - 2.JavaScript

728x90
반응형

# 앞선 글

Java(Spring)와 JavaScript(vue.js)로 서버단 Mp3파일 클라이언트로 보내 재생하기 - 1.Java

https://meotlog.tistory.com/40

 

Java(Spring)와 JavaScript(vue.js)로 서버단 Mp3파일 클라이언트로 보내 재생하기 - 1.Java

# 서론  브라우저에서 곧바로 내 로컬 파일에 있는 Mp3를 재생시키는 기능을 구현하려고 하니 Chrome에서는 정책상 불가능했다. 방법에 대해 고민하다 지인에게 파일을 서버단에서 읽어 클라이언

meotlog.tistory.com

#본론

 구현하는 흐름은 다음과 같다.

첫째, 자바(서버)에서 파일을 읽어들인다.

둘째, 해당 파일을 통신가능하게 인코딩한다.

셋째, 클라이언트에서 해당 파일을 받는다.

넷째, 해당 파일을 재생하기위해 디코딩한다.

다섯째, 재생한다.

3. 클라이언트에서 해당 파일을 받는다 -2 (서버와 통신하기 위해 ajax를 활용한다.) &디코딩한다. & 재생한다.

//fileSrc는 DB에서 읽어온 파일의 경로를 UI에서 클릭했을 시 보내주는 파라미터이다.
function setAudio(fileSrc){
	var v = this;
				
  $.ajax({
      type : 'post',
      url : '/cusvoice/cusvoice/audio', 
      dataType : json, 
      data : {fileSrc : fileSrc},
      success : function(res) { 
      
      //Controller에서 통신해 받아온 값을 base64인코딩을 해제한다.
      const data = v.base64ToArrayBuffer(res.audio);

	  //base64인코딩을 해제한 바이너리data를 변수에 담는다.
      const uInt8Array = new Uint8Array(data);
      
      // Blob Object 를 생성한다.
      const blob = new Blob([uInt8Array], {type: 'audio/mp3'});
      
      //blob으로 만든 객체를 재생시키기 위해 url로 주소를 만들어 객체에 담는다.
      const url = URL.createObjectURL(blob);
      
      //해당 주소를 audio객체를 만들어 소스에 넣고 플레이시킨다.
      const audio = new Audio();
      audio.src = url;
      audio.play();
      }
  })

}


//base64 인코딩을 해제하기 위한 함수
function base64ToArrayBuffer(base64){
	//인코딩 해제해 바이너리 스트링으로 받기
    const binary_string = window.atob(base64);
    //해당 길이가 필요해 변수에 적재
    const len = binary_string.length;
    //??이부분 ~ 밑에 루프가 이해가 잘 되지 않는다.
    const bytes = new Uint8Array(len);

    for (var i = 0; i < len; i++) {
    	bytes[i] = binary_string.charCodeAt(i);
    }

    return bytes.buffer;
}

 

# 여담

파일을 바이너리로 변환해서 그걸 다시 base64로 인코딩한다는건 통신과 컴퓨터일반에 대한 기본지식을 가지고 있어야 떠올릴 수 있는 해결방법 이었다. 그렇기 때문에 오늘도 컴퓨터와 통신과 같은 이론지식의 갈고닦음이 필요함을 깨닳았다.

728x90