web/javascript

youtube html에 삽입하기(youtube iframe_api)

blackbearwow 2023. 8. 31. 04:01

웹 개발을 하다보면 youtube를 브라우저에서 재생시키고싶을 때가 있다.

1. iframe삽입

공유 - 퍼가기를 하면

iframe태그가 나오는데, 복사해 html에 삽입하면 된다.

2. youtube iframe_api

youtube iframe_api를 사용하면 더욱 정교한 컨트롤이 가능해진다.

<!DOCTYPE html>
<html>
  <body>
    <!-- 1. The <iframe> (and video player) will replace this <div> tag. -->
    <div id="player"></div>

    <script>
      // 2. This code loads the IFrame Player API code asynchronously.
      let tag = document.createElement('script');

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

      // 3. This function creates an <iframe> (and YouTube player)
      //    after the API code downloads.
      let player;
      function onYouTubeIframeAPIReady() {
        player = new YT.Player('player', {
          height: '390',
          width: '640',
          videoId: 'M7lc1UVf-VE',
          playerVars: {
            'playsinline': 1
          },
          events: {
            'onReady': onPlayerReady,
            'onStateChange': onPlayerStateChange
          }
        });
      }

      // 4. The API will call this function when the video player is ready.
      function onPlayerReady(event) {
        event.target.playVideo();
      }

      // 5. The API calls this function when the player's state changes.
      //    The function indicates that when playing a video (state=1),
      //    the player should play for six seconds and then stop.
      let done = false;
      function onPlayerStateChange(event) {
        if (event.data == YT.PlayerState.PLAYING && !done) {
          setTimeout(stopVideo, 6000);
          done = true;
        }
      }
      function stopVideo() {
        player.stopVideo();
      }
    </script>
  </body>
</html>

1. <div> 태그는 IFrame API의 비디오 플레이어가 어디에 위치할지 식별한다. id는 3번의 video player를 로딩할 때 구분자로 쓰인다.

 

2. 해당 코드는 iframe_api 코드를 비동기적으로 불러온다.

 

3. onYouTubeIframeAPIReady함수는 API코드가 전부 다운로드 되면, 호출되는 함수이다.

여기서 YT.Player 오브젝트를 만들면 된다. 

new YT.Player 첫번째 매개변수는 HTML element의 id로 API가 <iframe>태그를 삽일할 곳을 명시한다.

new YT.Player 두번째 매개변수는 player options를 명시한 객체입니다. 해당 객체는 다음을 포함합니다:

width (number) – 비디오 플레이어의 가로. default는 640.

height (number) – 비디오 플레이어의 세로. defalut는 390.

videoId (string) – Youtube video ID로 비디오를 식별하는 것

playerVars (object) – player를 커스터마이징 할 수 있는 player parameters를 속성으로 가지는 객체

  • autoplay - 1로 하면 자동재생이 된다. (브라우저 정책으로 mute상태에서 해야함)
  • controls - 0으로 하면 플레이어 컨트롤러가 보이지 않는다.
  • disablekb - 1로하면 플레이어가 키보드 컨트롤을 응답하지 않는다.
  • rel - 0으로 하면 연관 동영상이 보이지 않는다.
  • loop - 1일경우 하나의 동영상이면 해당 비디오를 반복하고 플레이리스트일경우 처음 동영상에서 마지막 동영상까지 반복한다
  • playsinline - ios에서 전체화면으로 재생할 건지. 1일경우 전체화면이 안된다.
  • mute - 1일경우 음소거?(공식 문서에서는 없다. 블로그에는 있는데)

events (object) – 이 객체의 속성은 이벤트가 발생할 때 지정된 함수를 호출하는 것을 알아보게 한다.

 

4. onPlayerReady함수는 onReady이벤트가 발생할 때 실행되는 함수이다. 이 예제에서, video player가 준비되면 플레이가 시작될 것이다.

 

5. API는 플레이어가 재생, 멈춤, 끝내기 등의 플레이어 상태가 변할 때 onPlayerStateChange함수를 호출한다.


Operation

플레이어 API 메소드를 호출하기 위해서는 player object의 참조를 얻어야만 한다. 위에서는 new YT.Player를 하며 player라는 변수가 해당 역할이다.

Queueing functions

생략

Playback controls and player settings

player.playVideo():Void

비디오를 재생한다. 이 함수가 실행된 후 플레이어 상태는 playing(1)이다.

player.pauseVideo():Void

비디오를 멈춘다. 이 함수가 실행된 후 플레이어 상태는 ended(0) 또는 paused(2)이다.

player.stopVideo():Void

비디오를 멈추고 로딩을 취소한다. 보통 pauseVideo를 사용하지 해당 함수는 잘 사용하지 않는다.

player.seekTo(seconds:Number, allowSeekAhead:Boolean):Void

seconds에 명시된 시간으로 이동한다. allowSeekAhead는 버퍼링된 동영상을 벗어날경우 서버에 요청할지에 관한 것이다. true로 하면 된다.

player.mute():Void

플레이어를 음소거한다.

player.unMute():Void

플레이어를 음소거 해제한다.

player.isMuted():Boolean

플레이어가 음소거라면 true, 아니면 false를 반환한다.

player.setVolume(volume:Number):Void

볼륨을 세팅한다. 0에서 100사이의 정수만 가능하다.

player.getVolume():Number

현재의 볼륨을 0에서 100사이의 정수를 반환한다. 이 함수는 플레이어가 음소거라도 볼륨을 반환한다.

player.setSize(width:Number, height:Number):Object

플레이어가 담긴 <iframe>을 픽셀 단위로 사이즈를 설정한다.

player.getPlaybackRate():Number

재생속도를 얻는다. 0.25, 0.5, 1, 1.5, 2 같은 수치를 얻을 것이다.

player.setPlaybackRate(suggestedRate:Number):Void

재생속도를 설정한다.

player.getAvailablePlaybackRates():Array

가능한 재생 속도를 배열 형태로 얻는다.

player.getPlayerState():Number

-1 – unstarted 0 – ended 1 – playing 2 – paused 3 – buffering 5 – video cued

player.addEventListener(event:String, listener:String):Void

player.removeEventListener(event:String, listener:String):Void

Events

onReady

onStateChange

onPlaybackQualityChange

onPlaybackRateChange

onError

플레이어에 event객체를 전달한다. 객체의 data속성은 오류유형을 식별하는 정수이다.

100 – 요청한 동영상을 찾을 수 없습니다. 어떠한 이유로든 동영상이 삭제되었거나 비공개로 표시된 경우에 이 오류가 발생합니다.

101,150 - 요청한 동영상의 소유자가 내장 플레이어에서 동영상을 재생하는 것을 허용하지 않습니다.

onApiChange

 

참조: https://developers.google.com/youtube/iframe_api_reference?hl=ko

https://nanaj.tistory.com/12

https://mslilsunshine.tistory.com/98