You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8中获取视频时长遇报错:不支持远程文件

解决Laravel 8中getID3无法获取视频时长的问题

问题原因

你当前传入getID3->analyze()的是通过URL::to()生成的远程URL地址,getID3默认不支持直接解析远程文件;同时代码里的单引号导致变量未被正确解析('$data->video_file'会被当作字符串而非变量值)。

修复步骤

  1. 使用本地文件物理路径替代URL传给getID3进行分析
  2. 从分析结果中提取视频时长,按需保存到数据库

修改后的完整代码

$data = new Video;
$data->video_name = $request->video_name;
$data->video_description = $request->video_description;

$imageName = time().'.'.$request->video_file->getClientOriginalExtension();
// 获取本地文件物理路径
$localFilePath = public_path('video/'.$imageName);
$request->video_file->move(public_path('video'),$imageName);
$data->video_file = !empty($imageName) ? URL::to('video/'.$imageName) : 'empty';

$data->lession_id=$request->lession_id;
$data->is_free=$request->is_free;
$data->course_id=$request->course_id;
$data->subject_id=$request->subject_id;
$data->module_id=$request->module_id;
$data->lecture_type="video";

// 初始化getID3并分析本地文件
$getID3 = new \getID3;
$fileInfo = $getID3->analyze($localFilePath);

// 提取视频时长(单位:秒)
$videoDuration = isset($fileInfo['playtime_seconds']) ? $fileInfo['playtime_seconds'] : 0;
// 可选:将时长转成时分秒格式,比如 00:15:30
// $formattedDuration = gmdate("H:i:s", $videoDuration);

// 将时长保存到数据库(假设Video模型有duration字段)
$data->duration = $videoDuration;
$query = $data->save();

return $fileInfo; // 或者返回时长等你需要的数据

关键说明

  • public_path('video/'.$imageName)直接指向服务器上的本地文件路径,getID3可以直接读取解析
  • 从$fileInfo['playtime_seconds']可以拿到以秒为单位的时长,若需要格式化显示,可用gmdate转换
  • 确保你的Video模型有对应的字段存储时长(比如duration),如果没有需要先迁移数据库添加字段

内容的提问来源于stack exchange,提问作者Muhammad Umair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:41:03