18910140161

JavaScript-带有自定义控件的视频不能在iOS(safari和chrome)上播放-堆栈溢出

顺晟科技

2022-10-19 11:28:06

62

我正在用Django开发一个平台,它承载直接上传到服务器上的视频。 我正在测试这个应用程序,结果是视频在桌面上播放得很好,但在移动iOS(safari和chrome)上播放不了,而是在安卓10上播放。视频遵循正确的格式(mp4)和编码标准(H264,AAC)。

我阅读了不同的主题,这些主题讨论了如何在iOS上触发和播放视频(ex.1ex.2),但即使我遵循此准则,在按播放按钮时也无法触发视频播放。我不知道它出了什么问题。

代码如下:

     <div class="c-video">

      <video class="video" id="video" src="{{ video.video.url }}" type='video/mp4' poster="{{ video.image.url }}"> </video>

      <div class="controls">
        <div class="bar">
          <div class="dragger"></div>
          <div class="barline"></div>
        </div>
        <div class="buttons">
          <button id="play-pause"></button>
        </div>
        <div class="volume-slider">
          <input id="vol-control" type="range" min="0" max="100" step="1" oninput="SetVolume(this.value)" onchange="SetVolume(this.value)"></input>
        </div>
      </div>
     </div>


    <script>

    var video = document.getElementById("video");
    var btn = document.getElementById("play-pause");

    btn.addEventListener('click', function(e) {
        if (video.paused || video.ended) video.play();
        else video.pause();
    });
    </script>

我还尝试从按钮直接触发play事件,如下所示,但没有任何变化:

     <div class="c-video">

      <video class="video" id="video" src="{{ video.video.url }}" type='video/mp4' poster="{{ video.image.url }}"> </video>

      <div class="controls">
        <div class="bar">
          <div class="dragger"></div>
          <div class="barline"></div>
        </div>
        <div class="buttons">
          <button id="play-pause"></button>
        </div>
        <div class="volume-slider">
          <input id="vol-control" type="range" min="0" max="100" step="1" oninput="SetVolume(this.value)" onchange="SetVolume(this.value)"></input>
        </div>
      </div>
     </div>


    <script>

    var video = document.getElementById("video");
    var btn = document.getElementById("play-pause");

    btn.addEventListener('click', function(e) {
        if (video.paused || video.ended) video.play();
        else video.pause();
    });
    </script>

顺晟科技:

我正在处理类似的问题,问题不是视频格式,而是我的API不支持iOS设备需要的HTTP范围请求。Django devel服务器在默认情况下似乎不支持范围请求,根据此ticket,但是如果您设置apache或nginx为您的视频文件提供服务,它应该可以正常工作。

我解决了这个问题,将视频上传到AWS S3,并使用预先签名的URL直接从那里提供这些视频。此解决方案为我提供了对视频的iOS支持和访问控制。

正如@mick所建议的,问题可能出在视频文件的编码上,这是在上传到应用程序的一个视频文件上运行ffprobe时的输出结果:

     <div class="c-video">

      <video class="video" id="video" src="{{ video.video.url }}" type='video/mp4' poster="{{ video.image.url }}"> </video>

      <div class="controls">
        <div class="bar">
          <div class="dragger"></div>
          <div class="barline"></div>
        </div>
        <div class="buttons">
          <button id="play-pause"></button>
        </div>
        <div class="volume-slider">
          <input id="vol-control" type="range" min="0" max="100" step="1" oninput="SetVolume(this.value)" onchange="SetVolume(this.value)"></input>
        </div>
      </div>
     </div>


    <script>

    var video = document.getElementById("video");
    var btn = document.getElementById("play-pause");

    btn.addEventListener('click', function(e) {
        if (video.paused || video.ended) video.play();
        else video.pause();
    });
    </script>
  • TAG:
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航