HTML5 Video poster attribute in Safari and Chrome

后端 未结 3 1028
情书的邮戳
情书的邮戳 2021-02-13 10:20

In Firefox the image specified by the poster attribute of the VIDEO tag remains on screen until the play button is pressed. However in the Webkit browsers (Safari a

相关标签:
3条回答
  • 2021-02-13 11:14

    It seems that WebKit strips the attribute as soon as the video is fethced, because iOS 3.x for Iphone and Ipad has a serious bug where it is not possible to play the video at all when there is a poster attribute specified. This was fixed in iOS 4, but the workaround still stays, even in Safari 5...There are a lot of users who didn't upgrade to iOS 4 yet, so no luck with the poster...

    I'm going to try and position the image absolutely over the video using Javascript, and removing it when the video is played - that seems like the best solution...

    0 讨论(0)
  • 2021-02-13 11:16

    If you can get away with not preloading the video you can set preload="none" on the video element. In Safari this results in the poster being displayed.

    Safari on iOS probably sets preload="none" as the default to save bandwidth, while the desktop version preloads unless you explicitly tell it not to.

    0 讨论(0)
  • 2021-02-13 11:23

    It's 2020 Jan. so you may figure out the solution. but I left my solution for other people. Many people say it's a bug. but I disagree. It's just a difference between firefox and chrome/edge.

    Suppose you have <video preload="metadata"> in your HTML and post to the server thumbnail image. then you'll change the poster value to the src server gives to you. like this:

    xhr.addEventListener("load", function() {
        if (this.status === 200) {
          const data = JSON.parse(this.responseText);
          player.poster = `/image/${data.thumbnailMain}`; // change the poster value
          player.load();                                  // then load.
        } else {
          console.error(this.responseText);
        }
      });
    

    In firefox, video tag is designed when poster property value changes, it will load automatically. but chrome/edge won't load(); so you should player.load() manually;

    0 讨论(0)
提交回复
热议问题