Tự động phát video HTML5 trên iPhone


89

Tôi có một số loại vấn đề kỳ lạ. Tôi cố gắng tạo một trang web với video nền lặp lại. Mã trông giống như sau:

<video src="video/bg.mp4" style="z-index: -1;object-fit: cover;" poster="video/bg.jpg" autobuffer autoplay loop muted></video>

Điều này hoạt động hoàn toàn tốt trên hầu hết các trình duyệt (IE gặp khó khăn với thứ phù hợp với đối tượng này nhưng tôi không bận tâm) nhưng trên iPhone, video sẽ không tự động phát nhưng trên iPad thì có. Tôi đã đọc Chính sách mới dành cho iOS và tôi nghĩ rằng tôi đáp ứng các yêu cầu (nếu không iPad sẽ không tự động phát). Tôi đã thực hiện một số thử nghiệm khác:

  • Xóa các div chồng chéo sẽ không khắc phục được
  • Xóa z-index sẽ không sửa được
  • Wifi hoặc di động không tạo ra sự khác biệt
  • Kích thước tệp video cũng không tạo ra sự khác biệt

Tôi làm sai hay iPhone không tự động phát video và luôn yêu cầu tương tác? Tôi chỉ quan tâm đến iOS 10, tôi biết rằng các yêu cầu trên iOS 9 khác nhau


Bạn có thể tìm thấy một số trợ giúp tại đây: stackoverflow.com/questions/41360490/… Cá nhân tôi vẫn chưa nhận được bất kỳ video nào để tự động phát trên iPhone, ngay cả sau khi làm theo tất cả các mẹo đó và chính sách của Apples.
Đánh dấu

Tôi đã mất hàng giờ để tìm ra. Để cố gắng tiết kiệm hàng giờ của những người khác, tôi đã tổng hợp những phát hiện của mình trong một blog. Hy vọng nó giúp. medium.com/@BoltAssaults/…
BoltCoder

Câu trả lời:


217

Liệu playsinlinesự giúp đỡ thuộc tính?

Đây là những gì tôi có:

<video autoplay loop muted playsinline class="video-background ">
  <source src="videos/intro-video3.mp4" type="video/mp4">
</video>

Xem bình luận tại playsinlineđây: https://webkit.org/blog/6784/new-video-policies-for-ios/


1
Halleluja! Cảm ơn bạn vì điều này, đã thử khoảng một tá giải pháp khác nhưng không có kết quả.
tolmark

23
playsinlinelàm việc cho tôi kết hợp với mutedgiữ trong tâm trí sức mạnh chế độ điều không minh bạch thấp trên iPhone
Ken

1
Đây là câu trả lời.
JCraine

1
playsinlineĐã cứu sống ngày!!!! Cảm ơn anh bạn. BTW, các chính sách trình duyệt mới yêu cầu rằng nếu bạn muốn tự động khởi động video, hãy tắt tiếng khởi động video, nếu không bạn sẽ không thể thực hiện được. +1 đến @ken Ví dụ cho chrome: [ developers.google.com/web/updates/2017/09/...
Nuno Prata

19
Nếu bạn đang sử dụng phản ứng, lưu ý rằng thuộc tính playsinlinephải được viết bằng camelCase: playsInline. Nếu không nó sẽ không hoạt động.
Quentin D

62

iOs 10+ cho phép video tự động phát nội tuyến. nhưng bạn phải tắt "Chế độ nguồn điện thấp" trên iPhone của mình.


2
mẹo tuyệt vời nhưng tôi có một câu hỏi về điều này mà tôi đã gửi: stackoverflow.com/questions/50400902/…
Mathieu

7
Tôi đã dành khoảng một giờ trước để tìm hiểu lý do tại sao video của tôi không tự động phát. Cảm ơn vì điều này!
lior

2
Cảm ơn vì điều này!
Nikita Rogatnev

4
Điều đáng nói là chúng tôi không thể điều khiển thiết bị của người dùng và chuyển sang Chế độ nguồn điện thấp. Điều duy nhất chúng ta có thể làm là nhắc nhở người sử dụng để "Tắt chế độ công suất thấp" để có một trải nghiệm tốt hơn
Muhammad Osama

1
Cũng đã xảy ra với tôi và khiến tôi phát điên cho đến khi tôi tìm thấy bài đăng của bạn. Tôi đã xem xét các thông số kỹ thuật của Safari 11 và 11.1 nếu chúng có thể tắt hoàn toàn tính năng tự động phát nhưng đó chỉ là chế độ năng lượng thấp ... cuộc sống của một nhà phát triển có thể khó khăn. :-)
haeki

7

Dưới đây là thủ thuật nhỏ để vượt qua tất cả những khó khăn bạn gặp phải đối với tính năng tự động phát video trong một trang web:

  1. Kiểm tra video đang phát hay không.
  2. Kích hoạt phát video trên sự kiện như nhấp hoặc chạm vào cơ thể.

Lưu ý: Một số trình duyệt không cho phép video tự động phát trừ khi người dùng tương tác với thiết bị.

Vì vậy, các tập lệnh để kiểm tra xem video có đang phát hay không là:

Object.defineProperty(HTMLMediaElement.prototype, 'playing', {
get: function () {
    return !!(this.currentTime > 0 && !this.paused && !this.ended && this.readyState > 2);
}});

Và sau đó, bạn có thể chỉ cần tự động phát video bằng cách gắn trình nghe sự kiện vào phần nội dung:

$('body').on('click touchstart', function () {
        const videoElement = document.getElementById('home_video');
        if (videoElement.playing) {
            // video is already playing so do nothing
        }
        else {
            // video is not playing
            // so play video now
            videoElement.play();
        }
});

Lưu ý: autoplaythuộc tính rất cơ bản cần được thêm vào thẻ video ngoài các tập lệnh này.

Bạn có thể xem ví dụ làm việc với mã ở đây tại liên kết này:

Cách tự động phát video khi thiết bị ở chế độ nguồn điện thấp / chế độ tiết kiệm dữ liệu / sự cố trình duyệt safari

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.