当前位置:首页 > PHP

php实现录像功能

2026-04-03 09:04:46PHP

PHP实现录像功能的基本方法

PHP本身是服务器端脚本语言,无法直接操作客户端摄像头进行录像。需要通过前端技术(如HTML5、JavaScript)结合PHP后端实现。以下是实现方案:

前端采集视频流

使用HTML5的getUserMedia API获取摄像头视频流,并通过MediaRecorder录制:

<video id="preview" autoplay muted></video>
<button id="start">开始录制</button>
<button id="stop">停止录制</button>

<script>
const preview = document.getElementById('preview');
const startBtn = document.getElementById('start');
const stopBtn = document.getElementById('stop');
let mediaRecorder;
let recordedChunks = [];

navigator.mediaDevices.getUserMedia({ video: true, audio: true })
  .then(stream => {
    preview.srcObject = stream;
    mediaRecorder = new MediaRecorder(stream);

    mediaRecorder.ondataavailable = e => {
      if (e.data.size > 0) recordedChunks.push(e.data);
    };

    mediaRecorder.onstop = () => {
      const blob = new Blob(recordedChunks, { type: 'video/webm' });
      recordedChunks = [];
      uploadVideo(blob);
    };
  });

startBtn.addEventListener('click', () => mediaRecorder.start());
stopBtn.addEventListener('click', () => mediaRecorder.stop());

function uploadVideo(blob) {
  const formData = new FormData();
  formData.append('video', blob, 'recording.webm');

  fetch('upload.php', {
    method: 'POST',
    body: formData
  });
}
</script>

PHP接收并保存视频

创建upload.php处理上传的视频文件:

php实现录像功能

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['video'])) {
    $uploadDir = 'uploads/';
    $filename = uniqid() . '.webm';
    $destination = $uploadDir . $filename;

    if (!is_dir($uploadDir)) {
        mkdir($uploadDir, 0755, true);
    }

    if (move_uploaded_file($_FILES['video']['tmp_name'], $destination)) {
        echo json_encode(['status' => 'success', 'file' => $filename]);
    } else {
        echo json_encode(['status' => 'error']);
    }
}
?>

视频格式转换处理

WEBM格式可能需要转换为MP4等更通用格式。可使用FFmpeg:

$inputFile = 'uploads/recording.webm';
$outputFile = 'uploads/recording.mp4';

exec("ffmpeg -i $inputFile -c:v libx264 -c:a aac $outputFile");

安全注意事项

设置上传文件大小限制:

php实现录像功能

ini_set('upload_max_filesize', '100M');
ini_set('post_max_size', '100M');

验证文件类型:

$allowedTypes = ['video/webm', 'video/mp4'];
if (!in_array($_FILES['video']['type'], $allowedTypes)) {
    die('Invalid file type');
}

数据库记录存储

将视频信息存入MySQL数据库:

$pdo = new PDO('mysql:host=localhost;dbname=video_db', 'username', 'password');
$stmt = $pdo->prepare("INSERT INTO videos (filename, path, created_at) VALUES (?, ?, NOW())");
$stmt->execute([$filename, $destination]);

视频流直播方案

如需实现直播而非录制,可使用WebRTC技术配合PHP信令服务器,或使用RTMP协议推流到媒体服务器如Nginx-RTMP。

标签: 录像功能
分享给朋友:

相关文章

vue功能实现

vue功能实现

Vue 功能实现指南 Vue.js 是一个流行的前端框架,用于构建用户界面和单页应用。以下是 Vue 功能实现的关键方法和技术。 数据绑定与响应式 Vue 的核心特性是数据绑定和响应式系统。通过 d…

vue实现全选功能

vue实现全选功能

实现全选功能的基本思路 在Vue中实现全选功能通常需要绑定一个全选复选框的状态,并通过v-model或事件监听控制子选项的选中状态。核心逻辑包括全选按钮与子选项的双向数据绑定,以及状态同步。 数据准…

vue留言功能实现

vue留言功能实现

Vue 留言功能实现 数据模型设计 留言功能通常需要以下数据结构: id: 唯一标识符 content: 留言内容 createdAt: 创建时间 author: 作者信息(可选) 示例数据结构:…

vue实现销假功能

vue实现销假功能

实现销假功能的Vue方案 在Vue中实现销假功能通常需要结合前端界面、状态管理和后端API交互。以下是完整的实现方案: 基础组件结构 创建请假表单组件LeaveForm.vue: <temp…

vue实现小功能

vue实现小功能

Vue.js 是一个渐进式 JavaScript 框架,适合实现各种小型功能。以下是几个常见小功能的实现方法: 计数器功能 通过 Vue 的响应式数据绑定实现简单的计数器: <tem…

vue实现页面功能

vue实现页面功能

Vue 实现页面功能的常见方法 组件化开发 使用 Vue 的单文件组件(.vue 文件)将页面拆分为可复用的模块。每个组件包含模板(HTML)、脚本(JavaScript)和样式(CSS)三部分。…