javascript - 使用 Canvas 拍摄嵌入视频的快照

标签 javascript html html5-canvas embed vlc

我正在使用 VLC 网络插件来显示视频。它可以是本地保存的视频或通过 RTSP 传输的视频。下面是代码

<object classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921" width="640" height="480" id="vlc" events="True">
<param name="MRL" value="someRTSP" />
<param name="ShowDisplay" value="True" />
<param name="AutoLoop" value="False" />
<param name="AutoPlay" value="False" />
<param name="Volume" value="50" />
<param name="toolbar" value="true" />
<param name="StartTime" value="0" />
<EMBED pluginspage="http://www.videolan.org"
       type="application/x-vlc-plugin"
       version="VideoLAN.VLCPlugin.2"
       width="640"
       height="480"
       toolbar="true"
       loop="true"
       text="Waiting for video"
       target="someRTSP"
       name="vlc">
</EMBED>
</object>

this文档建议,我尝试使用其属性 vlc.video.takeSnapshot() 拍摄视频快照,但它似乎不起作用。所以我尝试使用 Canvas 进行相同的操作

<canvas id="canvas" width="640" height="480"></canvas>
<button id="snap" onclick="snap()">Snap Photo</button> 

 <script>
function getVLC(name)
{
    if (window.document[name])
    {
        return window.document[name];
    }
    if (navigator.appName.indexOf("Microsoft Internet")==-1)
    {
        if (document.embeds && document.embeds[name])
            return document.embeds[name];
    }
    else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
    {
        return document.getElementById(name);
    }
}
     var vlc = getVLC("vlc");
     var canvas=document.querySelector('canvas');
     var context=canvas.getContext('2d');

     var w,h,ratio;
        //add loadedmetadata which will helps to identify video attributes
          video.addEventListener('loadedmetadata',function()
          {
          ratio=video.videoWidth/video.videoHeight;
          w=video.videoWidth-100;
          h=parseInt(w/ratio,10);
          canvas.width=w;
          canvas.height=h;
          },false);

         function snap()
        {
              context.fillRect(0,0,w,h);
          context.drawImage(video,0,0,w,h);
          }
    </script>

如何使用 VLC 属性拍摄快照,如果不是,如何使用 Canvas 使其工作?

最佳答案

根据官方 VLC 文档 ( https://wiki.videolan.org/Documentation%3aWebPlugin )

vlc.video.takeSnapshot() 

仅在 ActiveX 中可用,因此仅在 Internet Explorer/Edge 中可用(我测试了它并且它有效......但无论如何它都会将快照图像文件保存到用户的桌面)。

尝试以 Canvas 方式捕获视频 - 我失败了。 视频元素必须由浏览器以 html5 模式呈现,而不是由 VLC 插件等第三方浏览器插件呈现。

您尝试作为参数传递给

的 DOM 元素
canvas.drawImage()

必须源自以下之一:

HTMLImageElement, HTMLCanvasElement, HTMLVideoElement, ImageBitmap

不是来自

object, embed

关于javascript - 使用 Canvas 拍摄嵌入视频的快照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39229030/

相关文章:

javascript - 附加元素未按预期工作

javascript - 如何通过js禁用网络摄像头?

javascript - 我们可以在html5中为canvas中的形状分配类吗

html - 当用户滚动到页面的那一部分时激活 CSS 动画

javascript - 如何在 Canvas 中旋转一个图像?

javascript - 每次元素进入 View 时从头开始重复动画

javascript - 过滤掉广告系统的机器人和蜘蛛。封锁太过分了

jquery - 悬停时过渡文本

javascript - 所选区域的图像的平均颜色给出了错误的图像

javascript - 使用 p2 旋转约束连接 2 个移相器 Sprite ,无需施加力