html5打开视频摄像头源码

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script>document.createElement("myHero")</script>
<style>
 
</style> 
</head>

<body>
<video id="video" width="640" height="480" autoplay></video>
<button id="snap">Snap Photo</button>
<canvas id="canvas" width="640" height="480"></canvas>
 
<script type="text/javascript">
 
var aVideo=document.getElementById('video');
                var aCanvas=document.getElementById('canvas');
                var ctx=aCanvas.getContext('2d');
                 
                navigator.getUserMedia  = navigator.getUserMedia ||
                          navigator.webkitGetUserMedia ||
                          navigator.mozGetUserMedia ||
                          navigator.msGetUserMedia;//获取媒体对象(这里指摄像头)
              navigator.getUserMedia({video:true}, gotStream, noStream);//参数1获取用户打开权限;参数二成功打开后调用,并传一个视频流对象,参数三打开失败后调用,传错误信息
                 
                function gotStream(stream) {
                        video.src = URL.createObjectURL(stream);
                        video.onerror = function () {
                          stream.stop();
                        };
                        stream.onended = noStream;
                        video.onloadedmetadata = function () {
                          alert('摄像头成功打开!');
                        };
                }
                function noStream(err) {
                        alert(err);
      }
       
      document.getElementById("snap").addEventListener("click", function() {
                 
                ctx.drawImage(aVideo, 0, 0, 640, 480);//将获取视频绘制在画布上
        });
</script>
</body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DirectShow是一种基于COM的Microsoft多媒体框架,它可以在Windows上用于捕获,处理和渲染音频和视频数据。使用DirectShow,可以轻松地从摄像机或其他视频设备中捕获视频流并将其发送到计算机。下面是一些关于如何使用DirectShow打开摄像头源代码的详细信息。 首先,要使用DirectShow,需要导入相应的库和头文件。在Visual Studio中,可以使用以下代码来导入必要的库和头文件: #include <dshow.h> #pragma comment(lib, "strmiids.lib") 接下来,要打开摄像头,需要使用以下步骤: 1.创建一个DirectShow图形,这可以在以下代码中完成: IGraphBuilder *pGraph = NULL; CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph); 这将创建一个名为pGraph的IGraphBuilder对象。 2.添加捕获过滤器到图形中: ICaptureGraphBuilder2 *pBuilder = NULL; CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void **)&pBuilder); pBuilder->SetFiltergraph(pGraph); IBaseFilter *pCaptureFilter = NULL; pBuilder->FindInterface(NULL, &MEDIATYPE_Video, CLSID_VideoInputDeviceCategory, IID_IBaseFilter, (void **)&pCaptureFilter); pGraph->AddFilter(pCaptureFilter, L"Video Capture"); 在这里,我们创建了一个名为pBuilder的ICaptureGraphBuilder2对象,并使用它来添加捕获过滤器到图形中。FindInterface方法用于查找与摄像头相关联的过滤器。这将创建一个名为pCaptureFilter的IBaseFilter对象,并将其添加到图形中。 3.创建渲染过滤器: IBaseFilter *pRenderFilter = NULL; CoCreateInstance(CLSID_VideoRenderer, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter,(void**)&pRenderFilter); pGraph->AddFilter(pRenderFilter, L"Video Renderer"); 该代码将创建一个名为pRenderFilter的IBaseFilter对象,并将其添加到图形中。 4.连接过滤器: pGraph->ConnectDirect(GetPin(pCaptureFilter, PINDIR_OUTPUT), GetPin(pRenderFilter, PINDIR_INPUT), NULL); 这将使用ConnectDirect方法连接过滤器,从捕获过滤器输出到渲染过滤器输入。 5.运行图形: IMediaControl *pControl = NULL; pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl); pControl->Run(); 此代码段将创建名为pControl的IMediaControl对象,并使用Run方法运行DirectShow图形,此时摄像头应该已可以正常工作。 这就是使用DirectShow打开摄像头源代码的基本步骤。但需要注意的是,有时候会出现不同的设备和SDK,可能会需要进行不同的步骤才能在DirectShow中打开摄像头
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值