본문 바로가기
웹 개발/JavaScript

[JS] Youtube Iframe API - 유튜브 영상을 사이트에 삽입하기

by NanaJ 2021. 7. 19.

유튜브 영상을 내 사이트에 삽입하는 방법은 2가지가 있다.

(URL 링크 클릭해서 유튜브로 페이지 이동을 하는 게 아니라 영상을 내 웹사이트 그 자리에서 바로 재생해서 볼 수 있도록 하는!)

 

[유튜브 iframe api 공식문서]

https://developers.google.com/youtube/iframe_api_reference


1. 영상 퍼가기

  • 삽입하고자 하는 영상을 공유하기 버튼을 클릭하여 iframe 태그를 임베드(embed) 하는 방법.
  • 해당 영상 > 공유하기 버튼 > 퍼가기 버튼 > HTML 태그 복사 > 원하는 곳에 붙여넣기
  • 코드에 파라미터를 추가적으로 덧붙여서 자동재생, 음소거, 동영상 재생 목록, 재생 반복여부 등등의 기능을 설정할 수 있다.
<iframe 
	width="560" height="315" 
	src="https://www.youtube.com/embed/영상아이디" 
	title="YouTube video player" frameborder="0" 
	allow="accelerometer; autoplay; clipboard-write; 
    encrypted-media; gyroscope; picture-in-picture" allowfullscreen>
</iframe>
  • 플레이어 매개변수
    • 사용방법 : <iframe src="https://www.youtube.com/embed/영상아이디"> 에서 영상아이디 뒤에 덧붙인다.
    • 예) 매개변수 중 autoplay(자동재생)를 추가하면 다음과 같다. ?autoplay=1 이 추가됨
      <iframe src="https://www.youtube.com/embed/영상주소?autoplay=1"></iframe>​
    • 이 외에도 다양한 매개변수가 있으니, 자세한 건 유튜브 공식문서 참고.
  • 주의사항
    • autoplay(자동재생)은 반드시 mute=1 (음소거)와 함께 덧붙여야 정상적으로 작동된다.
    • 그러나 mute=1과 같이 작성했더라도 모바일(android,iOS)에서는 제대로 작동하지 않는다. 이럴 경우엔 2번째 방법을 사용해야 한다.

2.  youtube iframe API

  • 1번의 방법보다 좀 더 심화되고 다양하게 이벤트 컨트롤이 가능한 API
  • HTML 구조에는 영상이 삽입될 영역만 확보하고, 그 확보된 영역에 스크립트를 이용하여 영상을 불러와 노출 및 재생시킨다.
  • 무서워할 것 없다. 공식문서 보고 엄청 쫄았는데, 찬찬히 살펴보면 slick처럼 사용방법 어렵지 않다! 쫄지말자

 

<!DOCTYPE html>
<html>
  <body>
    <!-- 1. 영상이 노출될 영역을 확보한다. 
    	 api가 제대로 작동하면 <div>에 자동으로 <iframe> 태그가 load될 것 이다. -->
    <div id="player"></div>

    <script>
      // 2. 이 코드는 Iframe Player API를 비동기적으로 로드한다. !!필수!!
      var tag = document.createElement('script');

      tag.src = "https://www.youtube.com/iframe_api";
      var firstScriptTag = document.getElementsByTagName('script')[0];
      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

      // 3. API 코드를 다운로드 받은 다음에 <iframe>을 생성하는 기능 (youtube player도 더불어)
      var player;
      function onYouTubeIframeAPIReady() {
        player = new YT.Player('player', {
          height: '360',  //변경가능-영상 높이
          width: '640',  //변경가능-영상 너비
          videoId: 'M7lc1UVf-VE',  //변경-영상ID
          playerVars: {
          	'rel': 0,    //연관동영상 표시여부(0:표시안함)
            'controls': 0,    //플레이어 컨트롤러 표시여부(0:표시안함)
            'autoplay' : 1,   //자동재생 여부(1:자동재생 함, mute와 함께 설정)
            'mute' : 1,   //음소거여부(1:음소거 함)
            'loop' : 1,    //반복재생여부(1:반복재생 함)
            'playsinline' : 1    //iOS환경에서 전체화면으로 재생하지 않게
            'playlist' : 'M7lc1UVf-VE'   //재생할 영상 리스트
          },
          events: {
            'onReady': onPlayerReady, //onReady 상태일 때 작동하는 function이름
            'onStateChange': onPlayerStateChange //onStateChange 상태일 때 작동하는 function이름
          }
        });
      }

      // 4. API는 비디오 플레이어가 준비되면 아래의 function을 불러올 것이다.
      function onPlayerReady(event) {
        event.target.playVideo();
      }

      // 5. API는 플레이어의 상태가 변화될 때 아래의 function을 불러올 것이다.
      //    이 function은 비디오가 재생되고 있을 때를 가르킨다.(state=1),
      //    플레이어는 6초 이상 재생되고 정지되어야 한다.
      var done = false;
      function onPlayerStateChange(event) {
        if (event.data == YT.PlayerState.PLAYING && !done) {
          setTimeout(stopVideo, 6000);
          done = true;
        }
      }
      function stopVideo() {
        player.stopVideo();
      }
    </script>
  </body>
</html>
  • 쉽게말해
    • 위의 코드블럭에서 사실상 3번 항목만 커스텀해서 사용하면 된다.
  • playerVars 속성
    • : 대부분 0 또는 1로 설정.
    • rel  →  연관 동영상 제공 여부. (0 일 경우 연관동영상 안 보임)
    • controls  →  플레이어 컨트롤러 노출 여부 (0일 경우 안 보임)
    • autoplay  → 자동재생 여부(1일 경우 자동재생함). mute와 함께 사용
    • mute  →   음소거 여부(1일 경우 음소거)
    • loop  →  반복 재생 여부(1일 경우 반복재생함)
    • playsinline  →  iOS 에서 전체화면으로 재생여부(1일 경우 전체화면으로 재생 안함)
    • playlist  → 영상을 여러개 재생시킬 경우에 사용
    • showinfo  →  영상에 대한 정보를 감추는 속성이었지만 2018년 이후로 지원하지 않음. 삽입해도 기능이 안 한다는 말... 영상에 마우스 호버했을 때 보여지는 영상 제목과 우측하단에 유튜브 작은 로고는 없앨 수 없음...
반응형

댓글