node.js 实现html5视频播放截图

最近在做一个视频会议项目相关的预研,要实现桌面端的视频播放和截图等。
所有的js , html5 , css,electron 的技术对我来说都是全新的技术点,所以在开始前请先了解这些基本的语法和框架。

考虑到前期的投入时间短,技术点多,所以实现选择的是一个做桌面应用的的框架Electron。不打算部署B/S架构。直接在前端中用html5的video来实现,很简单,后期再考虑用Ext.js等框架来做。

先简单实现:
html:

         <div id="video_area">
             <!--video的样式可以自定义 -->
            <link rel="stylesheet" type="text/css" href="../../css/video.css" />
            <video id="video" autoplay="autoplay" style="width:100%;height:100%">
                <!--本地测试一个视频,可以改为其他网络地址,但是直接的rtsp的源是不支持的,需要转换,这个后面在研究通过ffmpeg怎么转换之类的。-->
                <source src="./test.mp4" type='video/mp4'/>
                你不支持这个视频播放!
            </video>
        </div>

      <div id="foot">
            <link rel="stylesheet" type="text/css" href="../../css/function.css" />
            <button id="home_btn" onclick="return Exit_function()" style="margin-top:5px;margin-left:15px;border-radius:20px;height:50px;width:12%;">主界面</button>
            <button id="record_btn" onclick="return start()" style="height:50px;width:16%;;font-size:15px ">录像</button>
            <button id="shoot_btn" onclick="return shoot()" style="height:50px;width:16%;;font-size:15px ">截屏</button>
            <button id="dial_btn" onclick="show_hide()" style="height:50px;width:16%;;font-size:15px ">拨号盘</button>
            <button id="address_book_btn" onclick="" style="height:50px;width:16%;;font-size:15px ">通讯录</button>
            <button id="back_btn" onclick="return Exit_function()" style="margin-top:5px;margin-right:15px;float:right;border-radius: 20px;height:50px;width:12%;">返回</button>
        </div>

截图按键绑定shoot函数,通过js中的shoot来实现图片保存到本地。

> /*视频截图 */ shoot = function() {
>     var player = document.getElementById("video");
>     var canvas = document.createElement("canvas");
>     canvas.width = 500;
>     canvas.height = 400;
>     canvas.getContext('2d').drawImage(player, 0, 0, canvas.width, canvas.height);
>     var img = document.createElement("img");
>     img.src = canvas.toDataURL('image/png');
> 
>     console.log(img.src);
>     console.log("shoot cut one!");
> 
>     //文件名
>     var filename = 'image_' + (new Date()).getTime() + '.' + 'png';
> 
>     //去掉前缀信息的图片内容
>     var base64Data = img.src.replace(/^data:image\/\w+;base64,/, "");
> 
>     var pictureBuff = new Buffer(base64Data, 'base64');
> 
>     //判断目录是否存在,不存在则创建
>     fs.exists(__dirname, function(exists) {
>         var ret = exists ? ret = '文件夹存在' : '文件夹不存在';
>         console.log(ret);
>         if (exists) {
> 
>         } else {
>             fs.mkdir(__dirname + m_dir, function(err) {
>                 if (err) {
>                     console.log("创建目录失败!");
>                 } else {
>                     console.log("创建目录成功!");
>                 }
>             });
>         }
>     });
> 
>     //将图片数据写入文件
>     fs.writeFile(path.join(__dirname, filename), pictureBuff, function(err) {
>         if (err) {
>             console.log("保存失败");
>             alert("保存失败");
>         } else {
>             console.log("保存成功!");
>             alert("截图" + filename + "保存成功!");
>         }
>     }); }

后期可以修改把目录设置为配置文件中读取。
当前是HTML中读取本地的视频资源,通过按键截图,并把截图绘制到canvas上,并输出到文件。最终保存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
video.js是一个开源的HTML5视频播放器库,可以在网页上播放各种格式的视频。当我们在本地测试播放视频源时,有时候会遇到跨域的问题。 跨域是由浏览器的同源策略所导致的。同源策略要求浏览器只能请求同源下的资源,即域名、端口和协议必须完全一致。而当我们在本地测试时,视频源与当前网页的域名、端口和协议可能不一致,导致浏览器拒绝请求该资源。 要解决这个问题,可以在前端自己处理跨域。一种常见的方法是通过服务器端代理来解决跨域。 具体步骤如下: 1. 在本地搭建一个简单的服务器,可以使用Node.js的http模块或其他服务器技术。 2. 将视频源请求转发到该本地服务器上。 3. 在本地服务器上进行跨域请求,并将请求到的视频源返回给前端。 4. 在前端使用video.js播放返回的视频源。 这样做的原理是,由于浏览器对服务端的请求没有跨域限制,而本地服务器将视频源的请求转发到目标服务器上,然后将返回结果返回给浏览器,这样就绕过了浏览器的同源策略,实现了跨域请求。 需要注意的是,这种方式只适用于本地测试阶段,如果将网站部署到真实环境中,应该使用真实的服务器来处理跨域请求,而不是通过本地服务器来解决跨域问题。 总结起来,video.js本地测试播放视频源前端自己处理跨域的方法是通过搭建一个本地服务器,并将视频源请求转发到该服务器上,然后在本地服务器上进行跨域请求,并将请求到的视频源返回给前端进行播放。这样就能够解决跨域的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值