如果你使用 ffmpeg
生成了 HLS(.m3u8
+ .ts
)但播放时「没有图像」,常见原因如下:
✅ 1. 使用了 -codec copy
,但源视频编码不兼容 HLS 或播放器
某些播放器(尤其是浏览器播放)不支持原始编码格式(如 HEVC/H.265),所以虽然你拷贝了原始流(-codec: copy
),但它在播放时无法解码显示。
解决方法:转码为 HLS 支持的编码格式:
ffmpeg -i adiao.mp4 \
-c:v libx264 -c:a aac \
-start_number 0 \
-hls_time 10 \
-hls_list_size 0 \
-f hls \
-hls_segment_filename "./adiao/segment_%03d.ts" \
./adiao/index.m3u8
✅ libx264
是最兼容的视频编码器,aac
是 HLS 推荐的音频编码格式。
✅ 2. 视频原本没有图像轨(比如只有音频或封面)
确认原始视频是有画面的。你可以运行:
ffprobe adiao.mp4
检查是否存在 Video:
轨道。如果没有,那就只有音频。
✅ 3. 播放器不支持播放 .m3u8
✅ 4. m3u8 中的路径不正确
index.m3u8
中引用的 .ts
路径必须是相对播放器访问位置可用的。
- 比如如果你用网页播放器播放,路径可能需要改为:
segment_000.ts
segment_001.ts
...
而不是硬编码为 ./adiao/segment_000.ts
✅ 5. 跨域或服务器设置问题
如果你用网页播放并托管 .m3u8/.ts
文件,确保服务器:
- 设置正确的 MIME 类型(
.m3u8
应为 application/vnd.apple.mpegurl
,.ts
为 video/MP2T
)。
- 允许跨域访问(CORS 设置)。
如果你可以提供以下任意信息,我可以帮你更精准定位:
- 你是用什么播放器播放的?(VLC?浏览器?手机?)
ffprobe adiao.mp4
输出中是否有 video stream?
- 浏览器控制台是否有报错(如 CORS、404)?
- 播放是完全黑屏?还是只有音频没有图像?
可以根据这些逐步排查。要不要我帮你检查一下具体的视频编码信息?