当前位置:网站首页>JS实现视频录制-以Cesium为例
JS实现视频录制-以Cesium为例
2022-07-27 17:33:00 【giao00000】
JS实现视频录制-以Cesium为例
1. 需求描述
要求能够将Cesium三维地球的运动过程录制成视频。
2. 具体实现
2.1 主要原理
可以直接调用前端中的MediaStream Recording API,实现视频录制。核心示例代码如下:
var canvas = document.querySelector("canvas");
// Optional frames per second argument.
var stream = canvas.captureStream(25);
var recordedChunks = [];
console.log(stream);
var options = {
mimeType: "video/webm; codecs=vp9" };
mediaRecorder = new MediaRecorder(stream, options);
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start();
function handleDataAvailable(event) {
console.log("data-available");
if (event.data.size > 0) {
recordedChunks.push(event.data);
console.log(recordedChunks);
download();
} else {
// ...
}
}
function download() {
var blob = new Blob(recordedChunks, {
type: "video/webm"
});
// 创建指向二进制数据的URL
var url = URL.createObjectURL(blob);
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = url;
a.download = "test.webm";
a.click();
// 释放URL
window.URL.revokeObjectURL(url);
}
// demo: to download after 9sec
setTimeout(event => {
console.log("stopping");
mediaRecorder.stop();
}, 9000);
2.2 完整示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<!-- Include the CesiumJS JavaScript and CSS files -->
<script src="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Cesium.js"></script>
<link href="https://cesium.com/downloads/cesiumjs/releases/1.95/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
</head>
<body>
<div id="cesiumContainer">
<button onclick="startRecord()">录制视频</button>
<button onclick="stopRecord()">结束录制</button>
</div>
<script> // Your access token can be found at: https://cesium.com/ion/tokens. // Replace `your_access_token` with your Cesium ion access token. // Cesium.Ion.defaultAccessToken = 'your_access_token'; // Initialize the Cesium Viewer in the HTML element with the `cesiumContainer` ID. const viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: Cesium.createWorldTerrain() }); // Fly the camera to San Francisco at the given longitude, latitude, and height. viewer.camera.flyTo({
destination: Cesium.Cartesian3.fromDegrees(-122.4175, 37.655, 400), orientation: {
heading: Cesium.Math.toRadians(0.0), pitch: Cesium.Math.toRadians(-15.0), } }); var mediaRecorder, recordedChunks; setTimeout(() => {
// 视频录制 var canvas = document.querySelector(".cesium-widget>canvas"); // Optional frames per second argument. var stream = canvas.captureStream(25); recordedChunks = []; console.log(stream); var options = {
mimeType: "video/webm; codecs=vp9" }; mediaRecorder = new MediaRecorder(stream, options); mediaRecorder.ondataavailable = handleDataAvailable; }, 2000); function handleDataAvailable(event) {
console.log("data-available"); if (event.data.size > 0) {
recordedChunks.push(event.data); console.log(recordedChunks); download(); } else {
// ... } } function download() {
var blob = new Blob(recordedChunks, {
type: "video/webm" }); var url = URL.createObjectURL(blob); var a = document.createElement("a"); document.body.appendChild(a); a.style = "display: none"; a.href = url; a.download = "test.webm"; a.click(); window.URL.revokeObjectURL(url); } // 开始录制 function startRecord() {
console.log("starting"); mediaRecorder.start(); } // 结束录制 function stopRecord() {
console.log("stopping"); mediaRecorder.stop(); } </script>
</div>
</body>
</html>
3. 示例效果

4. 参考链接
边栏推荐
猜你喜欢

Static test. 2021.01 .13

Underlying principle of mvcc

电容串联与并联以及电容串联与平衡电阻

Hacker introductory tutorial (very detailed) from zero basic introduction to proficiency, it is enough to read this one.

ECU的软硬件架构

新库上线 | CnOpenData中国全部专利详细地址数据

如何运行 kevinchappell / formBuilder

Common errors reported by pytorch

1.2、基于增量式生成遮挡与对抗抑制的行人再识别(代码理解与实验进度+报告)

focal loss
随机推荐
Qtexttospeech class of QT realizes voice broadcast function
1.2、基于增量式生成遮挡与对抗抑制的行人再识别(代码理解与实验进度+报告)
VALN 11.9
长安链数据存储源码分析
New library online | cnopendata detailed address data of all patents in China
如何运行 kevinchappell / formBuilder
NAT 11.16
C # network application programming, experiment 1: WPF exercise
ACL11.12
C191:密码编译
‘vite‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
2022 love analysis · smart community manufacturer panoramic report manufacturer solicitation
新库上线 | CnOpenData中国全部专利详细地址数据
华为全联接大会2022开启曼谷之旅;Facebook推视频收入分成功能,创作者可获20%分成…
内置模块10.18
PC博物馆(3) MITS Altair 8800
化工巨头巴斯夫&Pasqal:利用量子神经网络优化天气预报
真实案例,大学生接单被骗,希望大家不要被骗了【惨痛教训】
剑指 Offer 25. 合并两个排序的链表
transformers-bert