前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 ><video>的录制

<video>的录制

作者头像
Jean
发布2021-07-16 16:59:37
8340
发布2021-07-16 16:59:37
举报
文章被收录于专栏:Web行业观察Web行业观察

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

代码语言:javascript
复制
//   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
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WebHub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档