Video 如果视频是“YouTube”,是否有跳过播放列表中YouTube视频的修复程序;“不可用”;

Video 如果视频是“YouTube”,是否有跳过播放列表中YouTube视频的修复程序;“不可用”;,video,youtube,playlist,Video,Youtube,Playlist,我在HTML5媒体播放器播放列表中有一个YouTube视频的聚合列表(从mySql数据库查询)。但随着时间的推移,YouTube将因版权或判断问题禁用某些视频,但链接仍在我的列表中。任何人都可以推荐一个JS或其他解决方案或文章,看看视频链接是否在x时间内没有启动以启动跳过或下一个操作。请告知 没有解决方案,因为大量的谷歌搜索没有任何建议 我的基本逻辑是,如果x秒后视频不播放,则跳过,否则播放 // THIS ACTUALLY CHECKS PLAYTIME AND ADD TO A COUNTE

我在HTML5媒体播放器播放列表中有一个YouTube视频的聚合列表(从mySql数据库查询)。但随着时间的推移,YouTube将因版权或判断问题禁用某些视频,但链接仍在我的列表中。任何人都可以推荐一个JS或其他解决方案或文章,看看视频链接是否在x时间内没有启动以启动跳过或下一个操作。请告知

没有解决方案,因为大量的谷歌搜索没有任何建议

我的基本逻辑是,如果x秒后视频不播放,则跳过,否则播放

// THIS ACTUALLY CHECKS PLAYTIME AND ADD TO A COUNTER - CAN I USE SOMETHING SIMILAR?

var counter = 0;
var currentIndex_inc = 0;
function onProgress() {

if(player.currentTime() <= 1){
    counter = 0;
}

//-- ------------------------------------- -->
// ----- COUNTER - If track plays longer than 30 seconds - add 1 --------
//-- ------------------------------------- -->
if(player.currentTime() >= 30  && trackURL != ''){
    if(counter==0){
    counter = 1;
    var playlist_name = "<?php echo $playlist ; ?>";
    var play_type = "<?php echo $type ; ?>";
    var trackURL = player.currentSrc();
    track_source = trackURL.src ;

        if(typeof(track_source)==="undefined"){
         track_source = trackURL;
        };

    $.ajax({
        type: "POST",
        url: "_inc/2018_process_counter.php",
        dataType: "text",
            data: { 
                playlist_name: playlist_name,track_source:track_source }
    }).done(function( data ) {
});
    }
    return false;
}

Logic:
If (video link does not start || video link == live){ 
   skip 
} else if (video link does start || video link == dead) {
   play 
}
//这实际上是检查播放时间并添加到计数器-我可以使用类似的东西吗?
var计数器=0;
var currentIndex_inc=0;
函数onProgress(){
if(player.currentTime()
//-----计数器-如果曲目播放时间超过30秒-添加1--------
//-- ------------------------------------- -->
如果(player.currentTime()>=30&&trackURL!=''){
如果(计数器==0){
计数器=1;
var playlist_name=“”;
var play_type=“”;
var trackURL=player.currentSrc();
track_source=trackURL.src;
if(类型(轨道源)=“未定义”){
track_source=trackURL;
};
$.ajax({
类型:“POST”,
url:“\u inc/2018\u process\u counter.php”,
数据类型:“文本”,
数据:{
播放列表\名称:播放列表\名称,曲目\来源:曲目\来源}
}).完成(功能(数据){
});
}
返回false;
}
逻辑:
如果(视频链接未启动| |视频链接==live){
跳过
}else if(视频链接确实启动| |视频链接==停止){
玩
}
使用Queru列出代码-基于成功的回复。答案适用于单个id,但不适用于列表…请参阅下面的我的代码:

if ($result_a->num_rows > 0) {
        // output data of each row
        while($row = $result_a->fetch_assoc()) {
            $id = $row['id'];
            $share_key = $row['share_key'];
            echo $row['id'];
            echo '<br>';
            echo $row['artist'];
            echo '<br>';
            echo $row['title'];
            echo '<br>';
            echo $row['source_url'];
            echo '<br>';            
            $my_link = $row['source_url'];

            $testlink = substr($my_link, strrpos($my_link, '/' )+1)."\n";

            echo '<p style="color:#ff0000">';
            echo $testlink;
            echo '</p>';            

            //# is ERROR = https://www.youtube.com/watch?v=R5mpcDWpYSA
            // $url = "https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=R5mpcDWpYSA"; //# test video deleted.

            //# is OK = https://www.youtube.com/watch?v=mLuh_O4mYbA
            $url = "https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=".$testlink; //# test working (not deleted).
            echo $url;
            echo '<br>';
            try
            {
                set_error_handler(function() { /* # temp ignore Warnings/Errors */ });

                $fop = fopen($url, "rb");
                if ( !$fop && $fop==false) { throw new Exception(); }

                restore_error_handler(); //# restore Warnings/Errors

                echo "OK 200 ::: Youtube video was found";
            }
            catch ( Exception $e ) 
            { echo "Error 404 ::: Youtube video not found (deleted or bad link)"; }




            echo '<hr>';









        }
    } else {
        // echo "0 results";
    }
if($result\u a->num\u rows>0){
//每行的输出数据
而($row=$result\u a->fetch\u assoc()){
$id=$row['id'];
$share_key=$row['share_key'];
echo$row['id'];
回声“
”; echo$row['artist']; 回声“
”; echo$row['title']; 回声“
”; echo$row['source_url']; 回声“
”; $my_link=$row['source_url']; $testlink=substr($my_-link,strrpos($my_-link,“/”)+1)。“\n”; echo'

; echo$testlink; 回声“

”; //#是错误=https://www.youtube.com/watch?v=R5mpcDWpYSA //$url=”https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=R5mpcDWpYSA“;/#测试视频已删除。 //#是否可以=https://www.youtube.com/watch?v=mLuh_O4mYbA $url=”https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=“$testlink;//#测试工作(未删除)。 echo$url; 回声“
”; 尝试 { set_error_handler(函数(){/*#temp ignore Warnings/Errors*/}); $fop=fopen($url,“rb”); 如果(!$fop&&$fop==false){抛出新异常();} 还原错误处理程序();/#还原警告/错误 echo“OK 200:::找到Youtube视频”; } 捕获(例外$e) {echo“错误404:::找不到Youtube视频(已删除或链接错误)”;} 回声“
”; } }否则{ //回显“0结果”; }
“…由于版权或判断问题,YouTube将禁用某些视频,但链接仍在我的列表中。是否有人可以推荐一个JS或其他解决方案或文章,查看视频链接是否在x时间内未启动以启动跳过或下一个操作。请提出建议。”

由于您已经涉及PHP代码,因此一个可能的选择是以下步骤:

1) 向
https://www.youtube.com/oembed?
+
Youtube视频URL

请求示例:

https://www.youtube.com/oembed?url=https://www.youtube.com/watch?v=R5mpcDWpYSA
2) 使用
fopen
检查视频可用性。注意
文件($url)
无法与Youtube服务器正常工作(即使视频本身已被删除,它们也会返回一些页面内容)

下面的可测试示例代码:
(根据视频状态,将回显“
正常200
”或“
错误404
”)

示例代码:

<?php

    //# ERROR = https://www.youtube.com/watch?v=R5mpcDWpYSA
    $url = "https://www.youtube.com/get_video_info?video_id=R5mpcDWpYSA"; //# test video deleted.

    //# OK = https://www.youtube.com/watch?v=mLuh_O4mYbA
    //$url = "https://www.youtube.com/get_video_info?video_id=mLuh_O4mYbA"; //# test working (not deleted).

    $src = file_get_contents($url);

    //# find text... playabilityStatus%22%3A%7B%22status%22%3A%22OK ...
    $str1 = "playabilityStatus%22%3A%7B%22status%22%3A%22";
    $pos = strpos($src, $str1);

    $result = substr( $src, $pos + (strlen($str1)), 5);

    if( $result{0} == "O" && $result{1} == "K" )
    { echo "OK 200 ::: Youtube video was found"; }
    else 
    { echo "Error 404 ::: Youtube video not found (deleted or bad link)"; }

?>


Plus+1用于有趣的问题并积极尝试找到解决方案。这很有效……您认为可以将其放入查询/while循环以显示列表(即报告)吗尽管如此,谢谢你!我会尝试这个列表。事实上,当我查询一个列表时,它不起作用?有什么建议吗?请参阅org post.UPDATE的补充:这两个都不起作用。在进一步的谷歌搜索后,YouTube说视频“仍然存在”但不可用-无论这意味着什么-因此,我们似乎需要一种方法来查看视频是否真正开始播放-即使只有一两秒钟?有什么建议吗?这里有一个很好的例子:---视频显示“不可用”,但“oembed”查询返回实际数据。
https://www.youtube.com/get_video_info?video_id=R5mpcDWpYSA
<?php

    //# ERROR = https://www.youtube.com/watch?v=R5mpcDWpYSA
    $url = "https://www.youtube.com/get_video_info?video_id=R5mpcDWpYSA"; //# test video deleted.

    //# OK = https://www.youtube.com/watch?v=mLuh_O4mYbA
    //$url = "https://www.youtube.com/get_video_info?video_id=mLuh_O4mYbA"; //# test working (not deleted).

    $src = file_get_contents($url);

    //# find text... playabilityStatus%22%3A%7B%22status%22%3A%22OK ...
    $str1 = "playabilityStatus%22%3A%7B%22status%22%3A%22";
    $pos = strpos($src, $str1);

    $result = substr( $src, $pos + (strlen($str1)), 5);

    if( $result{0} == "O" && $result{1} == "K" )
    { echo "OK 200 ::: Youtube video was found"; }
    else 
    { echo "Error 404 ::: Youtube video not found (deleted or bad link)"; }

?>