<video>的录制

MediaRecorder是最新推出的API,可以实现对MediaStream对象对录制。以前经常苦于H5视频的下载,因为它们经常使用blob:开头的url,但现在可以通过简单的API录制一个<video>元素,目前在Bilibili和YouTube都通过了测试。

//   ffmpeg -i input.webm -c copy output.mp4
const record = (HTMLVideoElement.prototype.record = async function (
  duration_seconds = 60
) {
  const video =
    this instanceof HTMLVideoElement ? this : document.querySelector("video");
  video.captureStream = video.captureStream || video.mozCaptureStream;
  const stream = video.captureStream();
  // stream.removeTrack(stream.getAudioTracks()[0]);
  const recorder = new MediaRecorder(stream, {
    mimeType: "video/webm",
  });


  setTimeout(
    () => recorder.state === "recording" && recorder.stop(),
    duration_seconds * 1000
  );


  console.log(`recording for ${duration_seconds} seconds...`);


  const blobs = [];
  await new Promise((resolve, reject) => {
    // The stop event is thrown either as a result of the MediaRecorder.stop() method being invoked, or when the media stream being captured ends.
    // In each case, the stop event is preceded by a dataavailable event, making the Blob captured up to that point available for you to use in your application.
    recorder.onstop = resolve;
    recorder.onerror = reject;
    recorder.ondataavailable = (event) => blobs.push(event.data);
    recorder.start();
  });


  // recorder.stream.getTracks().forEach((track) => track.stop());


  const webm = new Blob(blobs, { type: "video/webm" });
  // The URL lifetime is tied to the document in the window on which it was created
  open(URL.createObjectURL(webm));
  // URL.revokeObjectURL(href);   // 否则不好下载


  return webm;
});


使用方法:

  1. 推荐Chrome或者Firefox

  2. 在浏览器控制台输入以上代码,定义了一个record函数

  3. 网页检查元素,找到<video>元素,并存储为变量

  4. 播放视频,运行代码:

  5. await video.record(duration)

  6. 在新打开的网页中预览,或下载视频

  7. 如果网页只有1个<video>则不用寻找,直接:await record(10)

  8. 目前浏览器似乎只支持webm格式的视频,可通过ffmpeg转换

参考:

  • https://developer.mozilla.org/en-US/docs/Web/API/MediaStream

  • https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder

  • https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xosg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值