用于从用户的网络摄像头录制视频的 Web 应用程序
Web application for recording video from user's web camera
我有兴趣构建一个 Web 应用程序,它将由 nginx
提供服务,它将要求用户访问他们的网络摄像头,在给定的时间段内进行记录,可能会向用户重播,并且将其存储在服务器中。
我也在考虑基本的用户界面。那会不会是纯HTML+PHP?。会不会是python?
这里类似的问题好像不是很relevant/helpful.
你有什么建议?
没有。通过浏览器访问用户的网络摄像头需要 JavaScript and APIs provided to it by the browser.
服务器端程序不 运行 在用户的计算机上,因此无法访问其硬件(并且 Python 和 PHP 不能 运行 网页客户端) .
您可以使用 MediaRecorder 从网络摄像头录制视频。
录制视频并将其数据保存到recordedBlobs
:
function handleDataAvailable(event) {
if (event.data && event.data.size > 0) {
recordedBlobs.push(event.data);
}
}
function startRecording() {
recordedBlobs = [];
let options = { mimeType: 'video/webm;codecs=vp8' };
let types = ['video/webm;codecs=vp9', 'video/webm\;codecs=h264', 'video/webm', 'video/mpeg', ''];
for (let i in types) {
try {
if (MediaRecorder.isTypeSupported(types[i])) {
options = { mimeType: types[i] };
break;
}
}
catch (e) {
console.log('Exception while creating MediaRecorder: ${JSON.stringify(e)}');
}
}
try {
mediaRecorder = new MediaRecorder(window.stream, options);
} catch (e) {
console.error('Exception while creating MediaRecorder: ${JSON.stringify(e)}');
return;
}
mediaRecorder.onstop = (event) => {
console.log('Recorder stopped: ', event);
};
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(10); // collect 10ms of data
}
function stopRecording() {
mediaRecorder.stop();
}
将视频数据上传到您的操作页面:
function upload() {
const blob = new Blob(recordedBlobs, { type: 'video/webm' });
var formData = new FormData();
formData.append("video", blob, fileName + ".webm");
var xhr = new XMLHttpRequest();
xhr.open("POST", "upload.aspx");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
}
}
};
xhr.onerror = function () {
alert(`Network Error`);
};
xhr.send(formData);
}
您可以使用任何编程语言实现操作页面,PHP、Java、Python 或 C#。
我有兴趣构建一个 Web 应用程序,它将由 nginx
提供服务,它将要求用户访问他们的网络摄像头,在给定的时间段内进行记录,可能会向用户重播,并且将其存储在服务器中。
我也在考虑基本的用户界面。那会不会是纯HTML+PHP?。会不会是python?
这里类似的问题好像不是很relevant/helpful.
你有什么建议?
没有。通过浏览器访问用户的网络摄像头需要 JavaScript and APIs provided to it by the browser.
服务器端程序不 运行 在用户的计算机上,因此无法访问其硬件(并且 Python 和 PHP 不能 运行 网页客户端) .
您可以使用 MediaRecorder 从网络摄像头录制视频。
录制视频并将其数据保存到recordedBlobs
:
function handleDataAvailable(event) {
if (event.data && event.data.size > 0) {
recordedBlobs.push(event.data);
}
}
function startRecording() {
recordedBlobs = [];
let options = { mimeType: 'video/webm;codecs=vp8' };
let types = ['video/webm;codecs=vp9', 'video/webm\;codecs=h264', 'video/webm', 'video/mpeg', ''];
for (let i in types) {
try {
if (MediaRecorder.isTypeSupported(types[i])) {
options = { mimeType: types[i] };
break;
}
}
catch (e) {
console.log('Exception while creating MediaRecorder: ${JSON.stringify(e)}');
}
}
try {
mediaRecorder = new MediaRecorder(window.stream, options);
} catch (e) {
console.error('Exception while creating MediaRecorder: ${JSON.stringify(e)}');
return;
}
mediaRecorder.onstop = (event) => {
console.log('Recorder stopped: ', event);
};
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(10); // collect 10ms of data
}
function stopRecording() {
mediaRecorder.stop();
}
将视频数据上传到您的操作页面:
function upload() {
const blob = new Blob(recordedBlobs, { type: 'video/webm' });
var formData = new FormData();
formData.append("video", blob, fileName + ".webm");
var xhr = new XMLHttpRequest();
xhr.open("POST", "upload.aspx");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
}
}
};
xhr.onerror = function () {
alert(`Network Error`);
};
xhr.send(formData);
}
您可以使用任何编程语言实现操作页面,PHP、Java、Python 或 C#。