HEVC编码HLS(.m3u8)视频无法在Safari播放,其他视频正常
Safari无法播放自制HEVC HLS流但VLC可正常播放的问题
我使用以下FFmpeg命令将视频转码为支持HLS的HEVC编码格式:
ffmpeg -i originalName.mp4 -c:v libx265 -tag:v hvc1 -g 60 -hls_time 2 -hls_playlist_type vod -hls_segment_type fmp4 originalName-8000-fmp4-1080p.m3u8"
上传至服务器后,通过Safari访问存储地址时仅显示破损播放器图标(Safari原生支持HEVC HLS),但相同路径下用VLC播放器可正常播放。
我曾怀疑是服务器问题,但上传从其他来源下载的.m3u8及分段文件后,在Safari中可正常播放。对比VSCode中两个m3u8文件的结构,未发现差异。
补充说明:将编码改为H.264后,生成的HLS流可在Safari正常播放;且通过ffprobe检测,能正常播放的参考视频同样是hvc1编码的HEVC格式。
排查与解决建议
- 修正FFmpeg命令的语法错误:原命令末尾多了一个多余的双引号,可能导致潜在的生成异常,修正后的命令:
ffmpeg -i originalName.mp4 -c:v libx265 -tag:v hvc1 -g 60 -hls_time 2 -hls_playlist_type vod -hls_segment_type fmp4 originalName-8000-fmp4-1080p.m3u8 - 强制生成Safari兼容的fMP4分段:Safari对HEVC的fMP4结构要求严格,需确保分段文件的moov原子位于头部。添加
-movflags参数优化fMP4格式:ffmpeg -i originalName.mp4 -c:v libx265 -tag:v hvc1 -g 60 -hls_time 2 -hls_playlist_type vod -hls_segment_type fmp4 -movflags frag_keyframe+empty_moov+default_base_moof originalName-8000-fmp4-1080p.m3u8 - 验证服务器MIME类型配置:确保服务器对HLS相关文件设置正确的MIME类型:
.m3u8:application/vnd.apple.mpegurl.m4s/.mp4分段:video/mp4
- 对比码流参数差异:用ffprobe导出正常视频与自制视频的流信息,对比核心参数(如HEVC profile/level、色彩空间、音频编码):
重点检查视频流的ffprobe -show_streams -print_format json your-video.m3u8 > your-video.json ffprobe -show_streams -print_format json working-video.m3u8 > working-video.jsonprofile、level、color_space、color_transfer、color_primaries,以及音频是否为Safari支持的AAC-LC格式。
内容的提问来源于stack exchange,提问作者user1207524
相关产品推荐
相关产品推荐

