2012-08-07 154 views
10

我暂停使用其pause()方法的视频..问题是音频继续播放...我也尝试从Firefox的Javascript控制台中暂停它。 。 什么都没发生。该视频格式为.ogg,甚至没有在Chrome中播放(因为我认为它不受支持)。 我在Amazon S3上托管了视频,并且完美流传。我正在动态创建元素,从JSON请求中加载它的信息。 下面是一些代码:暂停视频不会停止HTML5视频标签中的音频

function showVideo() { 
     var video = videodata; 

     var videobox = $('#videobox').first(); 
     var videoplayer = document.getElementById('videoplayer'); 

     if (video.Enabled) { 
      if ((videoplayer != null && videoplayer.currentSrc != video.Location) || videoplayer == null) { 
       console.log('Creating video elem'); 
       videobox.empty(); 
       videobox.append('<video id="videoplayer" preload="auto" src="' + 
        video.Location + '" width="100%" height="100%" autoplay="autoplay" loop="loop" />'); 
       videobox.show(); 
      } 
     } else { 
      if (videoplayer != null) { 
       videoplayer.pause(); 
       console.log('Pausing video...'); 
      } 
      console.log('Deleting video elem'); 
      videobox.hide(); 
      videobox.empty(); 
     } 
    } 

我已经发布了类似的问题之前......但现在我使用的是其他浏览器,所以我想我必须创建一个新的问题。


这里是工作的代码(感谢用户heff!)

function showVideo() { 
    var video = videodata; 

    var videobox = $('#videobox').first(); 
    var videoplayer = document.getElementById('videoplayer'); 

    if (video.Enabled) { 
     if ((videoplayer.src != video.Location) || videoplayer.src == '') { 
      console.log('Playing video: ' + video.Location); 
      videoplayer.src = video.Location; 
      videoplayer.load(); 
      videoplayer.play(); 
      videobox.show(); 
     } 
    } else { 
     if (videoplayer.src != '') { 
      console.log('Pausing video...'); 
      videoplayer.pause(); 
      videoplayer.src = ''; 
      videobox.hide(); 
     } 
    } 
} 

回答

4

我的猜测是,showVideo被称为两次一些如何和创建两个副本,其中一个保持甚至在你打电话给另一个人的时候也会打。

在您的代码中,videoplayer var不会引用稍后创建的视频标签并附加,它会指向之前拥有该id的任何视频标签,我假设在您清空该框时会被删除,但可能会留在记忆中(并继续播放声音)。

只是我最好的猜测,但无论哪种方式,最好使用视频元素的API来设置源和其他参数,而不是清空盒子和重建标记。

videoplayer.src = video.Location; 
videoplayer.autoplay = true; 
// etc. 

此外,100%不是width/height属性的有效值。您需要使用CSS来制作视频以填充区域。

+0

我按照你的建议,不要每次重新创建元素,它的工作原理。但我检查了方法是否两次输入相同的if块:不行。我认为这是一个错误..顺便说一句,我发布了工作代码,如果有人有同样的问题。 ;-) – 2012-08-09 14:07:33

+0

太棒了!很高兴帮助。 – heff 2012-08-09 22:25:50

8

嘿家伙我有一个类似的问题,这是与真棒编码器解决。看看这篇文章。这可能是非常有用的。 HTML5 Video Controls do not work

如果您使用HTML属性:

<video id="yourvideoID" poster="Pic.jpg" loop autoplay controls width="100%"> 
 
<source src="//example.website/InnovoThermometer.mp4" type="video/mp4">   
 
</video>

删除自动播放。

然后使用jquery使用自动播放代替:

$(document).ready(function() { $("#bigvid3").get(0).play(); });

至于源有多个位置: html5 video playing twice (audio doubled) with JQuery .append()

Auto-play an HTML5 video on Dom Load using jQuery

+4

虽然这可能在理论上回答这个问题,但[这将是更可取的](// meta.stackoverflow.com/q/8259)在这里包含答案的基本部分,并提供供参考的链接。 – 2016-03-16 19:11:53

+3

谁给了我一件不错的工作。我修正了我的答案,以反映更完整的回应。我只是想帮助。 – 2016-03-16 20:20:32

+4

忘记-1s,你已经编辑了你的帖子,并作出了很好的回答。随着时间的推移,你会得到更多的+1。仇恨者会恨:) – 2016-03-16 20:21:52