vue3实现浏览器屏幕录制

let timer
const videoChunks = ref([])
const mediaRecorder = ref(null)
const recordingBtn = async () => {
  if (!navigator.mediaDevices.getUserMedia){
    console.log('浏览器不支持录制')
    return
  }
    try {
        const stream = await navigator.mediaDevices.getDisplayMedia({ video: true, audio: true })
        const mimeType = MediaRecorder.isTypeSupported('video/webm;codecs=h264') ? 'video/webm;codecs=h264' : ''
        if (!mimeType) return
        mediaRecorder.value = new MediaRecorder(stream, { mimeType })
        mediaRecorder.value.addEventListener('dataavailable', (e) => {videoChunks.value.push(e.data)}) 
        mediaRecorder.value.addEventListener('stop', () => {
            blobToFileSave(videoChunks.value)
            mediaRecorder.value = null
            videoChunks.value.length = 0
        })
        // 暂停录制
        mediaRecorder.value.addEventListener('pause', () => {console.log('暂停录制')}) 
        // 恢复录制
        mediaRecorder.value.addEventListener('resume', () => {console.log('恢复录制')})
        // 录制错误
        mediaRecorder.value.addEventListener('error', (err) => {console.log(err)})
        // 开始录制
          mediaRecorder.value.start()
          if(timer) clearTimeout(timer)
            timer = setTimeout(() => {
               mediaRecorder.value.stop()
            }, 10000)
        console.log('开始录制?');
        var element = document.documentElement;
         //录制时开启全屏
        if (element.requestFullscreen) {
            element.requestFullscreen();
        } else if (element.mozRequestFullScreen) {
            element.mozRequestFullScreen();
        } else if (element.msRequestFullscreen) {
            element.msRequestFullscreen();
        } else if (element.webkitRequestFullscreen) {
            element.webkitRequestFullscreen();
        }
    } catch (error) {console.log('选择和授权error', error)}
}
const blobToFileSave = async (blobData, type = 'video/mp4') => {
      console.log('======================');
    proxy.$modal.loading("视频上传中,请稍候...");
    const date = new Date()
    const upName = date.getTime()
    const nowTime = date.toLocaleString().replace(/\//g, '-')
    const params = useDictStore().upVedioData
    params.time = nowTime
    params.type = "0"
    const blob = new Blob(blobData, { type })
    //实现上传和下载都可以
    let formate = new FormData()
    formate.append('file',blob,'video.map4')
    formate.append('bucketName',upName)
    const res = await vedioUploadAPI(formate)
    if (document.exitFullscreen) {
      document.exitFullscreen();
    } else if (document.webkitCancelFullScreen) {
      document.webkitCancelFullScreen();
    } else if (document.mozCancelFullScreen) {
      document.mozCancelFullScreen();
    } else if (document.msExitFullscreen) {
      document.msExitFullscreen();
    }
    params.url = res.data
    const res1 = await vedioUploadIdAPI(params)
    if(res1.code == 200){
      ElMessage({ message:'上传成功',grouping: true,type: 'success'})
    }else{
      ElMessage.error('上传失败')
    }
    proxy.$modal.closeLoading()

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值