答案是需手动配置github仓库并显式指定ffmpeg/ffprobe路径:在composer.json中添加vcs类型repositories指向php-ffmpeg/video-streaming,require php-ffmpeg/video-streaming为dev-master;创建streaming实例时必须传入ffmpeg.binaries和ffprobe.binaries绝对路径,且web服务器需正确配置.m3u8/.ts mime类型。

Composer 安装 php-ffmpeg-video-streaming 时提示找不到包
这个库没有发布到 Packagist 官方源,直接 composer require php-ffmpeg-video-streaming 会报错:Could not find package php-ffmpeg-video-streaming。它只托管在 GitHub,必须手动添加仓库配置。
正确做法是:在项目根目录的 composer.json 里追加 "repositories" 块,并指定 GitHub 地址:
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/PHP-FFMpeg/Video-Streaming"
}
],
"require": {
"php-ffmpeg/php-ffmpeg": "^4.0",
"php-ffmpeg/video-streaming": "dev-master"
}
}
然后运行 composer update。注意别用 composer install —— 如果 lock 文件里没记录这个私有源,安装会失败。
初始化 Streaming 对象前必须确认 ffmpeg 和 ffprobe 可执行路径
库本身不自带二进制文件,依赖系统已安装的 ffmpeg 和 ffprobe。默认会从 $PATH 查找,但很多生产环境(比如 Docker 或某些 Linux 发行版)路径不在标准位置。
常见问题:调用 Streaming::create() 时抛出 FFMpeg\Exception\RuntimeException: Unable to load FFProbe 或类似错误。
- 先用命令行验证:运行
which ffmpeg和which ffprobe,记下完整路径(例如/usr/local/bin/ffmpeg) - 初始化时显式传入路径:
$streaming = Streaming::create([ 'ffmpeg.binaries' => '/usr/local/bin/ffmpeg', 'ffprobe.binaries' => '/usr/local/bin/ffprobe' ]); - 如果用的是 Alpine Linux(Docker 常见),需额外安装
ffmpeg包并确保启用non-free编码器(HLS 切片依赖libx264和aac)
HLS 切片生成后 m3u8 文件无法播放或缺少分片
默认调用 $streaming->hls() 生成的只是单码率流,且输出路径、分片命名、编码参数都容易踩坑。
关键点:
-
hls()返回的是HLS实例,必须显式调用save()才真正写入文件,否则只是构建配置 - 输出目录必须已存在且 Web 服务器有读写权限(比如 Nginx 的
www-data用户能访问) - 推荐显式设置关键参数:
$hls = $streaming->hls() ->setSegmentLength(10) // 每个 ts 片段时长(秒) ->setOutputDir('/var/www/html/hls/') ->setFilename('video'); // 生成 video.m3u8 和 video_0.ts 等 $hls->save(); - 若要多码率自适应(如 720p/480p),得手动创建多个
HLS实例并调用save(),库不自动合并成主 manifest
Web 服务访问 .m3u8 时返回 404 或 MIME 类型错误
HLS 依赖正确的 HTTP 响应头和静态文件可访问性。Nginx/Apache 默认不识别 .m3u8 和 .ts 后缀。
Nginx 配置片段示例(加在 server 块内):
location ~ \.m3u8$ {
add_header Content-Type application/vnd.apple.mpegurl;
add_header Cache-Control no-cache;
}
location ~ \.ts$ {
add_header Cache-Control no-cache;
}
Apache 需在 .htaccess 或虚拟主机配置中添加:
AddType application/vnd.apple.mpegurl .m3u8 AddType video/MP2T .ts
另外检查:生成的 .m3u8 文件里引用的 .ts 路径是否相对正确?比如 video_0.ts 是否真在同目录下?路径错位会导致播放器请求 404。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











