[이윰] 유튜브 "이 동영상은 볼 수 없습니다" 해결하기

페이지 정보

shadow2fox 976 5 3 2023.02.20 15:20

평점

  • - 평점 : 5점 (2명 참여)

본문

📝 유튜브 "이 동영상은 볼 수 없습니다" 해결하기
💎증상발현 조건
  1. 이윰빌더 기본값 동영상 퍼가기처럼 iframe으로 보여줄 경우
  2. 반복 재생을 위해 위 매개변수에 loop와 playlist가 공존하는 경우
수 많은 검색에도 iframe으로 보여주기 방식으론 이 문제를 해결할 수 없었다.
누구에게나 공개된 youtube iframe_api를 이용하면 위 문제를 해결할 수 있었다.

반복재생을 이용해야 한다면 동영상 퍼가기 방식에서 youtube iframe_api 방식으로 변경해 보도록 하자.
그누보드5/eyoom/classes/eyoom.class.php를 열어 // 수집된 동영상 정보를 iframe source로 구현를 검색한다.
수정 전

$source = '<iframe width="'.$video['width'].'" height="'.$video['height'].'" src="http://www.youtube.com/embed/'.$video['key1'].'?wmode=opaque&autohide=1'.$vlist.'" frameborder="0" allowfullscreen></iframe>';

수정 후

$source = '<div id="hplayer"></div><script type="text/javascript">var tag=document.createElement("script");tag.src="https://www.youtube.com/iframe_api";var firstScriptTag=document.getElementsByTagName("script")[0];firstScriptTag.parentNode.insertBefore(tag,firstScriptTag);var hplayer;function onYouTubeIframeAPIReady(){hplayer=new YT.Player("hplayer",{videoId:'"'.$video['key1'].'",width:"0",height:"0",playerVars:{playsinline:1,rel:0,showinfo:0,showsearch:0,controls:0},events:{onReady:onPlayerReady,onStateChange:onPlayerStateChange}})}function onPlayerReady(a){a.target.playVideo()}function onPlayerStateChange(b){if(b.data==YT.PlayerState.PLAYING){}else{}if(b.data==YT.PlayerState.ENDED){var a=b.target;a.seekTo(0);a.playVideo()}};</script>';

수정 된 소스로 유튜브 돟영상을 스크립트를 이용해 제어할 수 있게 된다.
위 수정된 소스를 보기 좋게 예제로 풀어 쓰면 아래와 같다.

<div id="hplayer"></div>
<script type="text/javascript">
var tag = document.createElement('script');
tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var hplayer;
function onYouTubeIframeAPIReady() {
    hplayer = new YT.Player('hplayer', {
        videoId:  '동영상 고유 키',
        width: '0',
        height: '0',
        playerVars : {
            'playsinline' : 1,
            'rel' : 0,
            'showinfo' : 0,
            'showsearch' : 0,
            'controls' : 0,   
            },            
            events: {
            'onReady': onPlayerReady,    //동영상이 준비되면 발생하는 함수
            'onStateChange': onPlayerStateChange    //상태가 따른 함수, 재생, 정지 등
        }
    });
};
function onPlayerReady(event) {
    // 준비된 동영상을 재생
    event.target.playVideo();
}
function onPlayerStateChange(event) {
    if(event.data == YT.PlayerState.PLAYING) {
        //재생일 때
    } else {
        //정지일 때
    }
    //동영상이 끝나면
    if (event.data == YT.PlayerState.ENDED) {
        //대상 지정
        var hplayer = event.target;
        //처음으로 돌아가기
        hplayer.seekTo(0);
        //동영상을 재생
        hplayer.playVideo();
    }
};
</script>

🔎다중 유튜브 동영상을 제어하고자 할 경우 아래 소스를 활용하자.


<div class="youtube" data-url="'.$video['key1'].'"></div>
<script type = "text/javascript" >
var idList = [], urlList = [];
$(".youtube").each(function(i) {
    $(this).attr("id", "hplayer" + i);
    idList.push("hplayer" + i);
    urlList.push($(this).data("url"));
});
var tag = document.createElement("script");
tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName("script")[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
function onYouTubeIframeAPIReady() {
    for (var i = 0; i < $(".youtube").length; i++) {
        var hplayerId = idList[i];
        var hplayer;
        hplayer = new YT.Player(hplayerId, {
            videoId: urlList[i],
            width: "360",
            height: "640",
            playerVars: {
                playsinline: 1,
                rel: 0,
                showinfo: 0,
                showsearch: 0,
                controls: 1
            },
            events: {
                "onStateChange": onPlayerStateChange    //상태가 따른 함수, 재생, 정지 등
            }
        });
        function onPlayerStateChange(a) {
            if (a.data == YT.PlayerState.ENDED ) {
                var hplayer = a.target;
                hplayer.seekTo(0);
                hplayer.playVideo();
            }
        };
    }
}
</script>

👉data-url가 $video['key1'] 값을 갖는 youtube 클래스명의 div를 먼저 생성하고 유튜브 iframe api를 통해 iframe으로 변경해 보여 준다.


💡유튜브 동영상을 스크립트로 제어하게 되면 좋은 점은 아래와 같다.
  • 원인을 알 수 없는 유튜브 동영상의 "이 동영상은 볼 수 없습니다" 오류가 발생하지 않는다.
  • 유튜브 동영상을 자동으로 플레이할 수 있다.
  • 유튜브 동영상을 무한 반복해 플레이할 수 있다.
  • 유튜브 동영상을 배경음으로 이용할 수 있다.
  • 유튜브 동영상에 여러 개의 트랙(타임라인)이 공존하는 경우 원하는 트랙으로 이동하여 재생할 수 있다.

끌어올림|2023.02.20 15:20|횟수 1

추천인 3
  • 내사랑
  • 랩퍼투혼
  • 하늘구장
10
shadow2fox - 회원등급 : 자연/Level 142 - 포인트 : 2,539,573
레벨 142
경험치 3,034,326

Progress Bar 73%

- 가입일 : 2015-03-10 12:21:44
- 서명 : 인간에게 가장 큰 선물은 자기 자신에게 기회를 주는 것이다. - 크리스 가드너, Chris Gardner -
- 자기소개 : There's never a shortcut to happiness.

댓글5

하늘구장님의 댓글

하늘구장 2023.02.20 22:42

왠지 넓이와 높이의 비율을 보니 유튜브 쇼츠를 위한 소스 풀이가 아닐까 싶고 하나의 동영상만 무한 반복이 아니라 여러 개의 동영상을 점프하면서 반복되는 것도 가능하지 않을까 싶어요 늘 고맙습니다

내사랑님의 댓글

내사랑 2023.02.20 22:33

다중 동영상 제어가 추가되었네요 전혀 몰랐던 1인 잘 응용해 보겠습니다

랩퍼투혼님의 댓글

랩퍼투혼 2023.01.16 07:47

뭔 얘긴지 모르겠지만 좋은글인거 같습니다? ㅋ

하늘구장님의 댓글

하늘구장 2023.01.14 21:38

새해 선물이 도착해 있었네요 고맙습니다 오늘은 좀 쉬고 내일부터 구글신과 조우 좀 해야겠어요 ㅎㅎㅎ

축하합니다. 지뢰폭탄 제거로 30경험치를 획득하였습니다.

내사랑님의 댓글

내사랑 2023.01.14 20:20

이야~ 진짜 간만에 기대하고 기대하던 훌륭한 유튜브 관련 팁이 올라왔네요 정말 감사 압도적 감사 유튜브 "이 동영상은 볼 수 없습니다" 해결하기 잘 응용해 볼께요

축하합니다. 첫 댓글로 4경험치를 획득하였습니다.

Total 241113 페이지
제목 글쓴이 날짜 조회 추천
이윰  댓글+2 PATH만 지원되는 filemtime을 curl 이용하여  URL을 지원하도록 확장하기 shadow2fox 2023.06.13 272 2
이윰  댓글+2 비메오 썸네일 추출 올바르게 적용하기 shadow2fox 2023.04.24 455 2
이윰  댓글+2 date 시간 형식으로 출력(~전) 올바르게 해결하기 shadow2fox 2023.03.10 429 2
이윰  댓글+5 🚩 유튜브 "이 동영상은 볼 수 없습니다" 해결하기 shadow2fox 2023.02.20 977 3
이윰  댓글+2 Prism.js 플러그인 사용 시 HTML 주석 처리가 삭제되는 문제 해결하기 shadow2fox 2022.04.24 533 2
이윰  댓글+7🏆 유튜브 플레이리스트(playlist) 썸네일 추출과 올바르게 적용하기 shadow2fox 2021.09.01 2,495 3
이윰  댓글+2🏆 이윰빌더 짧은주소를 그누보드 짧은주소로 교체하기 shadow2fox 2021.08.26 1,433 2
이윰  댓글+4🏆 📸 유튜브 썸네일 생성 개선하기 루루아빠 2021.06.24 3,460 3
이윰  댓글+2🏆 글, 댓글 작성시 불필요한 앞뒤 공백 제거해 DB에 저장하기 shadow2fox 2021.06.21 1,167 2
이윰  댓글+3🏆 첨부 이미지 alt 속성 값 게시글 제목으로 보여주기 shadow2fox 2021.06.11 1,150 2
이윰  댓글+3🏆 게시글 검색 단위에 맞는 메뉴 추가하기 shadow2fox 2021.05.18 1,661 2
이윰  댓글+2🏆 글 작성 시 alt 태그 게시글 제목으로 DB에 저장하기 shadow2fox 2021.05.05 1,442 2
이윰  댓글+4🏆 다중 태그 입력 올바르게 shadow2fox 2021.03.12 1,963 2
이윰  댓글+1🏆 PHP 8.x Fatal error : 중괄호 사용으로 인한 json.class.php 오류 shadow2fox 2021.02.17 1,834 1
이윰  댓글+3🏆 PHP 8.x 지원을 위한 암호화, 복호화 함수 shadow2fox 2021.02.16 2,570 3
이윰  댓글+2🏆 게시글 작성 중복 방지하기 shadow2fox 2021.02.03 1,676 2
이윰  댓글+2🏆 View 페이지에서 이전글, 다음글 버튼에 제목과 썸네일을 가져오기 shadow2fox 2021.01.10 1,541 2
이윰  댓글+5🏆 게시글 작성 시 외부 이미지를 저장하여 썸네일화하기 shadow2fox 2021.01.01 2,520 2
이윰  댓글+2🏆 EXIF 정보 이미지 넓이에 맞게 조정하기 shadow2fox 2020.11.21 1,808 2
이윰  댓글+2🏆 추천 베스트 최신글에서 블라인드 게시글은 제외하기 shadow2fox 2020.11.13 1,418 2