2012-11-08 32 views
7

Tôi đang gặp một số sự cố khi nhúng YouTube để hoạt động.Nhúng YouTube trên iPad: Bộ nhớ tạm thời khi bắt đầu qua Javascript API

Tôi đang sử dụng API YouTube để tải video. Trên đầu trang của video được tải, tôi có một điều khiển tùy chỉnh <div> (trong suốt) chỉ với một nút phát (một <img>). Nó được thực hiện theo cách này để ẩn trình phát YouTube mặc định sau nút phát đi kèm với phần còn lại của thiết kế trên trang web.

Các <div> phủ toàn bộ iFrame nạp, do đó người chơi chính nó là không thể nhấp - Tôi sử dụng một sự kiện click trên <div> để bắt đầu video thay vì:

// Inside onYouTubePlayerAPIReady(): 
var player = new YT.Player(playerId, { 
    height: height, 
    width: '100%', 
    videoId: videoId, 
    playerVars: { 
    html5: '1', 
    controls: '0', 
    rel: '0', 
    showinfo: '0', 
    modestbranding: '1', 
    theme: 'light', 
    color: 'white', 
    wmode: 'transparent', 
    suggestedQuality: "large" 
    } 
}); 

$(".youtube-player-controls").bind("click", function(e){ 
    if (!player || !player.getPlayerState) return false; 
    if (player.getPlayerState() == YT.PlayerState.PLAYING) player.pauseVideo(); 
    else player.playVideo(); 
    return false; 
}); 

trình tốt trên iPhone, nhưng trên iPad (và Android quá dường như) video chuyển sang khung đầu tiên của video, nhưng sau đó các quầy hàng ở trạng thái đệm (được kiểm tra qua player.getPlayerState()).

Tôi đã thử bắt đầu video với player.loadVideoById() không hoạt động (cùng một lỗi).

Nếu tôi xóa các điều khiển lớp phủ <div> và do đó cho phép người dùng thực sự nhấp vào video, nó hoạt động tốt.

Bất kỳ đề xuất nào về cách tôi có thể phát video bằng cách sử dụng API Javascript?

Edit:

tôi đã thay đổi mã nhúng một chút, ví dụ: Tôi được thêm vào html5=1 như mô tả trong Force HTML5 youtube video. Điều này thay đổi nội dung của iFrame được nhúng để sử dụng trình phát HTML5 nhưng không giải quyết được sự cố.

Tôi đã thử nó để xem nó có thể hoạt động như được mô tả trong http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html hay không.

+1

tôi cũng dường như gặp phải vấn đề này là tốt. Video tiếp tục tải mãi mãi trên iPad và thậm chí cả iPhone 4. – mr1031011

+0

Đối với tôi, nó thực sự hoạt động như dự định trên iPhone 4. Chưa thể kiểm tra iPhone 5. – Woodgnome

+0

Tôi đang gặp vấn đề tương tự. Trong trường hợp của tôi, nó dường như không liên quan đến lớp phủ trên các điều khiển, bởi vì nút của tôi nằm phía sau video. Tải video, bắt đầu để đệm và dính trên màn hình màu đen. –

Trả lời

0

Apple không cho phép tải thẻ qua các tập lệnh trên iOS (để tránh sử dụng băng thông không cần thiết trong khi trên mạng di động). Một số phiên bản Android hiển thị cùng một hành vi.

Bạn sẽ phải yêu cầu người dùng bắt đầu video đầu tiên bằng cách nhấp vào chính video đó - sau đó bạn sẽ có thể kiểm soát video thông qua API như trên thiết bị máy tính để bàn.

+0

Điều này chỉ áp dụng cho tải trước/tự động phát như được mô tả trong http://developer.apple.com/library/safari/# documentation/AudioVideo/Khái niệm/Sử dụng_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html và có thể bị phá vỡ bằng cách sử dụng sự kiện Javascript onclick. Tuy nhiên, điều này được mô tả cho nhúng âm thanh/video HTML5, do đó, nó có thể không áp dụng hoàn toàn cho các video nhúng trên YouTube (đừng quên, điều gì đó * không * xảy ra khi nút phát tùy chỉnh được nhấp). – Woodgnome

+0

Trong khi đúng đối với các thẻ HTML5

-1

Hiện tại, chúng tôi chỉ đang thực hiện kiểm tra trước khi gửi trong player.playVideo(); chức năng. Nó không lý tưởng nhưng nó hoạt động cho đến khi chúng tôi nhận được bản sửa lỗi cấp API tốt hơn từ Google.

Ở phía trên của kịch bản nhúng bạn thiết var của bạn:

var isiPad = navigator.userAgent.match(/iPad/i) != null; 

Sau đó, trong chức năng nhấp chuột bạn sử dụng:

if (!isiPad) { 
player.playVideo(); 
} 
+1

Không phát video không phải là một giải pháp. – mikemaccana

+0

@mikemaccana giải pháp là định tuyến sự kiện khác với iPad. Vì vậy, trong trường hợp của chúng tôi, chúng tôi đã cho phép sự kiện nhấp để xóa khung áp phích và bắt đầu video qua JS cho các trình duyệt được hỗ trợ. Đối với những thứ như iPad, chúng tôi chỉ xóa khung áp phích khi nhấp và người dùng sẽ nhấp lại để bắt đầu video. Nó chắc chắn không hoàn hảo nhưng nó hoạt động. – btburton42

+0

@jabberlope Tôi không phải là một fan hâm mộ lớn về phát hiện thiết bị. Ngoài ra, tôi thấy điều này trên một số thiết bị di động khác nhau (iPad thế hệ thứ 3, iPod thế hệ thứ 5, Moto X). Có cách nào để phát hiện thời gian của hàm playVideo() hoặc phần không hoạt động chính xác được hỗ trợ không? 'if (! CanPlayViaJS) { player.playVideo(); } ' –

Các vấn đề liên quan