一款好用的基于vue的录屏插件recordrtc,拿走不谢

第一步:下载安装包

npm i recordrtc

第二步:复制代码,即可使用:

<template>
<div class="record-page">
        <div style="margin-bottom: 15px;">
            <el-button @click="startRecording" :disabled="videoStart" size="small">开始录制</el-button>
            <el-button @click="stopRecording" :disabled="!videoStart" size="small" id="btn-stop-recording">结束录制</el-button>
        </div>
        <video controls autoplay playsinline ref="video" width="400" height="300"></video>
 </div>
 </template>


<script>
    import RecordRTC from 'recordrtc';
    export default {
        name: "screenRecord",
        data() {
            return {
                video: null,
                videoStart: false,
                recorder: null,
            }
        },
        created() {
            if (!navigator.getDisplayMedia && !navigator.mediaDevices.getDisplayMedia) {
                let error = 'Your browser does NOT support the getDisplayMedia API.';
                throw new Error(error);
            }
        },
        mounted() {
            this.video = document.querySelector('video');
        },
        methods: {
            invokeGetDisplayMedia(success, error) {
                let displaymediastreamconstraints = {
                    video: {
                        displaySurface: 'monitor', // monitor, window, application, browser
                        logicalSurface: true,
                        cursor: 'always' // never, always, motion
                    }
                };
                // above constraints are NOT supported YET
                // that's why overridnig them
                displaymediastreamconstraints = {
                    video: true
                };
                if (navigator.mediaDevices.getDisplayMedia) {
                    navigator.mediaDevices.getDisplayMedia(displaymediastreamconstraints).then(success).catch(error);
                }
                else {
                    navigator.getDisplayMedia(displaymediastreamconstraints).then(success).catch(error);
                }
            },
            captureScreen(callback) {
                this.invokeGetDisplayMedia((screen) => {
                    this.addStreamStopListener(screen, () => {
                       //
                    });
                    callback(screen);
                }, function (error) {
                    console.error(error);
                    alert('Unable to capture your screen. Please check console logs.\n' + error);
                });
            },
            addStreamStopListener(stream, callback) {
                stream.addEventListener('ended', function () {
                    callback();
                    callback = function () { };
                }, false);
                stream.addEventListener('inactive', function () {
                    callback();
                    callback = function () { };
                }, false);
                stream.getTracks().forEach((track)=> {
                    track.addEventListener('ended', () =>{
                        this.stopRecording()
                        callback();
                        callback = function () { };
                    }, false);
                    track.addEventListener('inactive', function () {
                        callback();
                        callback = function () { };
                    }, false);
                });
            },
            startRecording() {
                this.captureScreen(screen=>{
                    this.video.srcObject = screen;
                    this.recorder = RecordRTC(screen, {
                        type: 'video'
                    });
                    this.recorder.startRecording();
                    // release screen on stopRecording
                    this.recorder.screen = screen;
                    this.videoStart = true;
                });
            },
            stopRecordingCallback() {
                this.video.src = this.video.srcObject = null;
                this.video.src = URL.createObjectURL(this.recorder.getBlob());
                // 如果需要下载录屏文件可加上下面代码
                let url=URL.createObjectURL(this.recorder.getBlob())
                const a = document.createElement("a");
                document.body.appendChild(a);
                a.style.display = "none";
                a.href = url;
                a.download = new Date() + ".mp4";
                a.click();
                window.URL.revokeObjectURL(url);
                //以上是下载所需代码
                this.recorder.screen.stop();
                this.recorder.destroy();
                this.recorder = null;
                this.videoStart = false;
            },
            stopRecording() {
                this.recorder.stopRecording(this.stopRecordingCallback);
            }
        },
    }
</script>

<style scoped>
 
</style>

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在VSCode中,有几个好用Vue插件可以提高开发效率。其中一些插件包括: 1. Chinese (Simplified):该插件可以将VSCode工具汉化,使得界面和菜单变为中文,方便中文用户使用。\[1\] 2. Live Server:这是一个内嵌的服务器插件,类似于后端Java的Tomcat。使用此插件,可以更方便地运行Vue项目,实时预览网页效果。\[1\] 3. Vetur:Vetur支持.vue文件的语法高亮显示,除了支持template模板以外,还支持大多数主流的前端开发脚本和插件,比如Sass和TypeScript。对前端开发Vue的小伙伴们非常友好。\[1\] 4. vue-helper:vue-helper是一个对学习Vue的小伙伴们非常有帮助的插件,可以给Vue代码进行代码提示,提高开发效率。\[1\] 5. Auto Close Tag:这是一个很好用的VSCode扩展,当我们在结束标记中键入结束括号时,它会自动添加结束标记。它支持HTML、Handlebars、XML、PHP、Vue、JavaScript、TypeScript、JSX等语言。\[2\] 需要注意的是,使用Vetur插件时,需要禁用Vetur插件以避免冲突。推荐使用CSS/LESS/SCSS作为<style>的语言,因为这些语言基于VSCode的CSS语言服务提供了可靠的语言支持。如果使用PostCSS/Stylus/Sass等语言,需要安装额外的语法高亮扩展。此外,Volar插件不包含ESLint和Prettier,但官方的ESLint和Prettier扩展支持Vue,所以需要自行安装。\[3\] 希望这些插件能够帮助你在VSCode中更好地开发Vue项目。 #### 引用[.reference_title] - *1* [vscode中推荐使用的插件](https://blog.csdn.net/qq_35148205/article/details/117306397)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [分享 6 个 Vue3 开发必备的 VSCode 插件](https://blog.csdn.net/qq_36380426/article/details/126255231)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值