Laravel 8中获取视频时长遇报错:不支持远程文件
解决Laravel 8中getID3无法获取视频时长的问题
问题原因
你当前传入getID3->analyze()的是通过URL::to()生成的远程URL地址,getID3默认不支持直接解析远程文件;同时代码里的单引号导致变量未被正确解析('$data->video_file'会被当作字符串而非变量值)。
修复步骤
- 使用本地文件物理路径替代URL传给getID3进行分析
- 从分析结果中提取视频时长,按需保存到数据库
修改后的完整代码
$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
相关产品推荐
相关产品推荐

