目前,我正在使用新的iframe API在YouTube上的uiwebview中嵌入YouTube视频,并且我已经能够在没有用户交互的情况下自动播放。 在iframe API中,它描述了如何使用onstatechange事件但在我的应用程序中它似乎不起作用,不幸的是我在uiwebview中看不到任何调试。
我只是希望能够检测到视频何时结束,您对此有任何建议吗? 有没有人让它上班?
答案 0 :(得分:14)
您是否尝试(从文档中)为电影结束事件分配一个整数?:
onStateChange只要玩家的状态发生变化,就会触发此事件。 API传递给您的事件对象的data属性 event listener函数将指定一个对应的整数 新玩家状态。可能的数据值是:
-1 (unstarted)
0 (ended)
1 (playing)
2 (paused)
3 (buffering)
5 (video cued).
当玩家首次加载视频时,它将播放未启动的视频 (-1)事件。当视频被提示并准备好播放时,播放器将会播放 播放视频提示(5)事件。在您的代码中,您可以指定 整数值或您可以使用以下命名空间之一 变量:
YT.PlayerState.ENDED
YT.PlayerState.PLAYING
YT.PlayerState.PAUSED
YT.PlayerState.BUFFERING
YT.PlayerState.CUED
所以,比如:
if(event.data==YT.PlayerState.ENDED){
//do stuff here
}
答案 1 :(得分:1)
答案 2 :(得分:0)
要检测视频何时结束,则视频的状态为0或YT.PlayerState.ENDED
这是jsfiddle a link的链接!
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Page 1</title>
</head>
<body>
<h1>Video page</h1>
<br>
<!-- 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.
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. This function creates an <iframe> (and YouTube player)
// after the API code downloads.
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
height: '390',
width: '640',
videoId: 'ussCHoQttyQ',
playerVars: {
'autoplay': 0,
'controls': 0,
'showinfo': 0,
'rel': 0
},
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),
// -1 unstarted
// 0 ended
// 1 playing
// 2 paused
// 3 buffering
// 5 video cued
var done = false;
function onPlayerStateChange(event) {
console.log(event);
if (event.data == YT.PlayerState.ENDED) {
alert(1);
}
}
</script>
</body>
</html>
答案 3 :(得分:0)
它可能与浏览器中的自动播放策略相关联(在移动浏览器中默认为禁用)。
如果您的浏览器是Chrome浏览器,则可以使用其他命令行标记--autoplay-policy=no-user-gesture-required
来启动它-对我有用。
答案 4 :(得分:-1)
你需要为此使用JavaScript。
请参阅此链接:https://developers.google.com/youtube/js_api_reference