Tôi đã tạo một tập lệnh phát trực tuyến trên YouTube để phát ngẫu nhiên các video nhạc trên YouTube hoặc từ hàng đợi. Nó hoạt động tốt trong nhiều tháng cho đến tuần này, trong đó nó dường như không muốn tải các video khi sử dụng iPad/iPhone. Tôi nhận được lỗi sau thay vì:Cách khắc phục "Nếu phát lại không bắt đầu ngay, hãy thử khởi động lại thiết bị của bạn" bằng cách sử dụng API Youtube iFrame trên iPad?
Nếu phát lại không bắt đầu ngay, hãy thử khởi động lại thiết bị của bạn
Những gì tôi đã cố gắng:
Tôi đã thử Safari, Chrome , Firefox và Opera và tất cả đều là lỗi. Tôi đã thử xóa dữ liệu trang web/bộ nhớ cache, khởi động lại thiết bị, khởi động lại toàn bộ thiết bị. Không có gì hiệu quả. Điều kỳ lạ là, nó hoạt động hoàn toàn tốt trên một máy tính để bàn Windows mà dẫn tôi tin rằng nó không phải là một lỗi trong mã, nhưng cái gì đó đã hoặc là thay đổi với các API hoặc với Safari. Mã của tôi chưa được chỉnh sửa gần đây hoặc có thể đã khiến nó ngừng hoạt động.
Tôi đã thử gỡ lỗi nó bằng cách sử dụng jsconsole.com, không có gì đáng ngờ bật lên. Trong một số trường hợp, trình phát sẽ tải, tiêu đề của video sẽ hiển thị và hình ảnh sẽ như vậy, nhưng sau khoảng 30 giây, lỗi ở trên sẽ hiển thị cùng với trình quay tải.
Tôi biết rằng playVideo(); không hoạt động (tự động phát) trên thiết bị iOS. Điều này là tốt, và một lần nữa, kịch bản đã làm việc trước đây, tôi chỉ phải bấm phát trên video đầu tiên. Nhưng bây giờ, có vẻ như iOS đang cố gắng tự động phát video. Vì vậy, tôi cũng đã thử nghiệm bằng cách xóa các cuộc gọi playVideo(), sự cố vẫn tiếp diễn.
Được thử nghiệm trên iPad 2, iPad mini và iPhone 4 (tất cả đều có iOS mới nhất có sẵn trên thiết bị và tất cả đã hoạt động trước đó).
Tôi đang thua lỗ và cố gắng sửa lỗi này trước ngày cuối tuần cho bữa tiệc nhà :) Vì vậy, tôi đánh giá cao mọi trợ giúp hoặc gợi ý về những gì có thể gây ra lỗi trên iOS.
Đây là đoạn mã javascript:
// 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',
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange
}
});
}
// 4. The API will call this function when the video player is ready.
function onPlayerReady(event) {
check_queue_timer = setTimeout(check_queue(),3000);
}
// 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.
var done = false;
function onPlayerStateChange(event) {
if (event.data === 0) {
// TRACK AS DONE, REFRESH QUEUE AND GET NEXT SONG
// POST TO WRITE TO FILE
$.ajax({
type: 'POST',
url: site_url+'ajax_next_track',
dataType: 'json',
data: 'queue_id='+$('#queue_id').val(),
cache: false,
success:
function(data){
if(data.status == 'success'){
$("#queue_table").empty();
if(data.queue.length == 0){
check_queue_timer = setTimeout(check_queue(),3000);
}
$.each(data.queue, function(i, item) {
if(i == 0){
event.target.loadVideoById(item.video_id);
event.target.playVideo();
$('#queue_id').val(item.queue_id);
}
$('#queue_table').append('<tr><td>'+item.title+'</td></tr>');
});
}
else{
console(data.message);
}
},
error:
function(jqXHR, textStatus, errorThrown){
$('#error_msg').html('Something broke.').fadeIn();
}
});
}
}
function stopVideo() {
player.stopVideo();
}
function check_queue(){
$.ajax({
type: 'POST',
url: site_url+'ajax_next_track',
dataType: 'json',
data: 'no_delete=1',
cache: false,
success:
function(data){
if(data.status == 'success'){
$("#queue_table").empty();
if(data.queue.length == 0){
clearTimeout(check_queue_timer);
check_queue_timer = setTimeout(check_queue(),3000);
}
$.each(data.queue, function(i, item) {
if(i == 0){
player.loadVideoById(item.video_id);
player.playVideo();
$('#queue_id').val(item.queue_id);
clearTimeout(check_queue_timer);
}
$('#queue_table').append('<tr><td>'+item.title+'</td></tr>');
});
}
else{
console(data.message);
}
},
error:
function(jqXHR, textStatus, errorThrown){
$('#error_msg').html('Something broke.').fadeIn();
}
});
}
UPDATE 1 (25TH NOV 2015)
tôi đã quyết định bắt đầu từ đầu và làm việc với mã ví dụ trên https://developers.google.com/youtube/iframe_api_reference. Dường như loadVideoById() không còn hoạt động trên iPad nữa. Đó là trước kia. Nếu tôi không bao gồm loadVideoById() hoặc playVideo() nó hoạt động. Lý tưởng nhất, tôi muốn nó hoạt động với loadVideoById().
Điều này xảy ra với tôi hôm nay, tất cả các video đều không hoạt động trên tất cả trình duyệt youtube và fb. – XBasic3000