RecordRTC应用
装置
npm install recordrtc -S
import RecordRTC from 'recordrtc';
代码:
<template> <view> </view></template><script> import RecordRTC from 'recordrtc'; export default { data() { return { videoStart: false, recorder: null, } }, props:{ fileName:{ type:String, default:new Date().getTime() } }, onLoad() { }, methods:{ /** * 开始录制 */ startRecording(callback){ this.captureScreen((screenStream)=>{ this.addStreamStopListener(screenStream,()=>{ console.log("流进行监听"); this.$emit("streamStop",{}) // this.stopRecording(); }); var options = { type: 'video', mimeType: 'video/webm', disableLogs: false, getNativeBlob: false, // enable it for longer recordings ignoreMutedMedia:false }; // this.video.srcObject = screenStream; this.recorder = RecordRTC(screenStream, options); this.recorder.startRecording(); this.recorder.screen = screenStream; this.videoStart = true; callback(true); }); }, /** * 进行录制 */ stopRecording(callback){ this.recorder.stopRecording(()=>{ // this.video.src = this.video.srcObject = null; // this.video.src = URL.createObjectURL(this.recorder.getBlob()); const url = URL.createObjectURL(this.recorder.getBlob()); const a = document.createElement("a"); let videoFile = new File([this.recorder.getBlob()], this.fileName+".mp4", { type: 'video/mp4' }) let downloadUrl = URL.createObjectURL(videoFile); document.body.appendChild(a); a.style.display = "none"; a.href = url; a.download = this.fileName + ".mp4"; a.click(); this.recorder.screen.stop(); this.recorder.destroy(); this.recorder = null; this.videoStart = false; callback(false); }); }, //初始化 captureScreen(callback) { if (navigator.getDisplayMedia) { //录制完结,文件下载 navigator.getDisplayMedia({ video: true }).then(screenStream => { navigator.mediaDevices.getUserMedia({audio:true}).then((mic)=>{ screenStream.addTrack(mic.getTracks()[0]); callback(screenStream); }); }).catch(function(error) { console.log('error',error); }); } else if (navigator.mediaDevices.getDisplayMedia) { navigator.mediaDevices.getDisplayMedia({ video: true }).then(screenStream => { navigator.mediaDevices.getUserMedia({audio:true}).then((mic)=>{ screenStream.addTrack(mic.getTracks()[0]); callback(screenStream); }); }).catch(function(error) { console.log('error',error); }); } else { var error = 'getDisplayMedia API are not supported in this browser.'; console.log('error',error); alert(error); } }, //流监听 addStreamStopListener(stream, callback) { stream.addEventListener('ended', function () { callback(); callback = function () { }; }, false); stream.addEventListener('inactive', function () { callback(); callback = function () { }; }, false); stream.getTracks().forEach(function (track) { track.addEventListener('ended', function () { callback(); callback = function () { }; }, false); track.addEventListener('inactive', function () { callback(); callback = function () { }; }, false); }); }, } }</script><style></style>
引入
import screenRecording from '@/components/screen-recording/screen-recording';
注册....
组件:
<screen-recording ref="screen-recording" @streamStop="streamStop" :fileName="fileName"></screen-recording>
开启录屏:
//开始录制this.$refs['screen-recording'].startRecording((start)=>{ this.start= start;});
完结录屏:
this.fileName =`${this.mNm}-录屏-${this.$util.dateFormat(new Date())}`;this.$refs['screen-recording'].stopRecording((start)=>{ this.start= start;});
监听敞开:
//流进行监听streamStop(){ if(this.start){ this.fileName =`${this.mNm}-录屏-${this.$util.dateFormat(new Date())}`; this.$refs['screen-recording'].stopRecording((start)=>{ this.start= start; }); }},