为啥我的 jQuery 代码不更新加载到视频元素中的实时图像?

Posted

技术标签:

【中文标题】为啥我的 jQuery 代码不更新加载到视频元素中的实时图像?【英文标题】:Why doesn’t my jQuery code update live image loaded in a video element?为什么我的 jQuery 代码不更新加载到视频元素中的实时图像? 【发布时间】:2014-09-27 12:31:34 【问题描述】:

我有一个实时图像的 URL,我想将其显示为视频,但只显示第一帧而不是动画。我使用的是 Google Chrome 版本 36.0.1985.125。

我错过了什么?

<video id="one_frame_per_second"
       autoplay=autoplay 
       poster="http://ip.address/screensaver/now.jpeg"></video>

<script>
    $(document).ready(function() 
        $('#one_frame_per_second').show();

        mtimer = setInterval(function() 
            $('#one_frame_per_second').attr(
                'poster',
                'http://ip.address/screensaver/now.jpeg'
            );
        , 15);
    );
</script>

【问题讨论】:

您每 15 毫秒设置一次相同的 poster 属性,为什么? 因为 http://ip.address/screensaver/now.jpeg 是 JPEG 图像但实时更新,所以我需要每 15 毫秒渲染一次才能以无缝模式获取最新图像。 这是BUG吗???为什么不更新 now.jpeg 的最新版本? 在以前版本的 Google Chrome 版本 36.0.1985.125 中,这可以正常工作。一些废话删除或破坏了它。 有一个活生生的例子供我们使用吗?没有一个很难调试。 【参考方案1】:

请报告 Google Chrome、Canary、Opera、Firefox 以解决过去有效的此功能。

临时解决办法是:

<video id="one_frame_per_second"
       autoplay=autoplay 
       poster="http://82.143.92.19/video/now.jpeg" ></video>


<script>
  $(document).ready(function()
      $( "#one_frame_per_second" ).show();              
      var mtimer=setInterval(function()  
         $("#one_frame_per_second").attr('poster', 'http://82.143.92.19/video/now.jpeg?r'+Date.now());
       ,150);      
  );

</script> 

注意: ?r= Date.Now() ,缓存问题 + 最小间隔时间

【讨论】:

【参考方案2】:

您能否提供这个实时图像以便我们进行测试,或者提供一个可以工作的 jsfiddle?

如果没有进一步的知识,我猜这是因为您设置了相同的来源。

你可以试试这个吗:

   mtimer=setInterval(function()  
    var video = $("#one_frame_per_second");      
    video.attr('poster', '');
    video.attr('poster', 'http://ip.address/screensaver/now.jpeg');
  ,15);

【讨论】:

我用 Google Chrome 版本 36.0.1985.125 和 Google Canary 尝试了您的示例,但仍然相同。但是,当我使用较少的 Google Chrome 版本 36 时,我或你的相同代码就可以工作。 你能提供一个有效的例子(或应该有效的例子)吗? jsfiddle.net/ajn5ntcj - 不适用于 Google 36,但适用于旧版 Google【参考方案3】:

尝试先构造函数,然后调用它

$(document).ready(function()
  $( "#one_frame_per_second" ).show();              

  var mtimer = function() setInterval(function()        
    $("#one_frame_per_second").attr('poster', 'http://ip.address/screensaver/now.jpeg');  
  ,15); 

  mtimer
);

另外,如果您仍然遇到错误,请尝试将计时器增加到 10000 之类的值,并在计时器内执行 console.log($("#one_frame_per_second").attr('poster', 'http://ip.address/screensaver/now.jpeg'); ) 以查看您是否遇到任何奇怪的错误

更新

好的,我想我已经成功了:http://jsfiddle.net/ajn5ntcj/3/

  $(document).ready(function()
      $( "#one_frame_per_second" ).show();              
      var mtimer= function()
        var video_t = $("#one_frame_per_second");      
        //video_t.attr('poster', '')
        video_t.attr('poster', 'http://82.143.92.19/video/now.jpeg')
        //console.log('here im again2')
      
      setInterval(mtimer,1000)
      //console.log('here im again')
  );

【讨论】:

jsfiddle.net/ajn5ntcj - 请注意这适用于旧版 Google,但不适用于最新版 Google chrome 和 canary 否 - 如果您使用 Google Chrome 最新版本和 Google Canary jsfiddle.net/ajn5ntcj/3进行测试,则无法正常工作@【参考方案4】:

我认为它的帮助:

 <video id="one_frame_per_second"
       autoplay=autoplay 
       poster="http://82.143.92.19/video/now.jpeg" ></video>



     $(document).ready(function()
  $( "#one_frame_per_second" ).show();              
  var mtimer= function()
    var video_t = $("#one_frame_per_second");      
    video_t.attr('poster', 'http://82.143.92.19/video/now.jpeg')
    //console.log('here im again2')
  
  setInterval(mtimer,1000)

);

【讨论】:

以上是关于为啥我的 jQuery 代码不更新加载到视频元素中的实时图像?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 Django 中更新我的 HTML 之前必须重新加载两次?

为啥不从 jquery 工作和从 getElementById 创建视频变量呢?

为啥我的 Jquery Ajax 调用不起作用?(Asp.net MVC C#)

为啥不传递更新的元素值?

为啥 Jquery 加载在 Firefox 中不起作用?

3dsmax开启慢为啥?