新闻
我们更期待的是,能在与您的沟通交流中获得启迪,
因为这是我们一起经历的时代。
分类
相关文章
热门标签

开发指南php如何使用cdn看视频 流地址生成与播放兼容性

2026年8月23日

1.

概述:为何用 CDN + 流式播放

说明:CDN 能降低延迟、消减源站带宽并增强并发;流式(HLS/DASH)支持按需分片、快进和自适应码率,适合移动与桌面。

要点:本文以 PHP 为中心,覆盖如何生成 HLS/DASH、在 CDN 上发布、用签名 URL 控制权限并用前端播放器保证兼容性。

2.

准备工作与文件格式

步骤:准备原始 MP4/原始视频文件;安装 ffmpeg(用于切片)和 PHP 环境(例如 PHP7+)。

小分段:目标格式优先 HLS(.m3u8 + .ts)用于 iOS 原生,DASH(.mpd + .mp4/frag)用于部分浏览器和低延迟场景。

3.

用 FFmpeg 生成 HLS 切片(实际命令)

示例命令(生成多码率):
ffmpeg -i input.mp4 -preset veryfast -g 48 -sc_threshold 0 \ -map 0:v:0 -map 0:a:0 -s:v:0 1280x720 -b:v:0 3000k -maxrate:v:0 3210k -bufsize:v:0 6000k \ -map 0:v:0 -map 0:a:0 -s:v:1 854x480 -b:v:1 1200k -maxrate:v:1 1284k -bufsize:v:1 2400k \ -var_stream_map "v:0,a:0 v:1,a:0" -master_pl_name master.m3u8 \ -f hls -hls_time 6 -hls_playlist_type vod -hls_segment_filename "v%v/fileSequence%d.ts" v%v/prog_index.m3u8

说明:生成 master.m3u8 与分辨率子 m3u8。上传这些文件到源站或对象存储。

4.

将切片发布到对象存储并接入 CDN

步骤:把生成的 m3u8 和 ts 推到 S3/OSS/对象存储;在 CDN 控制台新建 Pull Zone,设置源站为对象存储的 URL。

配置项:开启支持 Range 请求、正确的 MIME(m3u8 -> application/vnd.apple.mpegurl,ts -> video/mp2t),设置缓存规则和缓存失效策略。

5.

在 PHP 中生成并签名流地址(示例代码)

思路:为防盗链,用带过期时间和签名的 URL。示例(伪码):

$url = '/path/to/master.m3u8'; $expiry = time()+3600; $secret='KEY'; $token = hash_hmac('sha256', $url.'|'.$expiry, $secret); $signed = $url.'?exp='.$expiry.'&sig='.$token; echo $signed;

部署提示:签名规则需与 CDN 或后端验证一致;对于对象存储,可能在 CDN 层做签名或用存储提供的预签名 URL。

6.

CDN 与服务器端配置要点

Headers:设置正确的 Content-Type、Accept-Ranges: bytes、Cache-Control,根据需要加上 Access-Control-Allow-Origin:* 或指定域名。

缓存策略:m3u8 可设置短缓存(例如 30s),ts 段可设置较长缓存,遇到实时或低延迟需求调整 hls_time 与缓存。

7.

前端播放器集成与兼容实现

推荐:使用 video.js + hls.js(非 iOS),在 iOS Safari 可直接使用 HTML5 video 加 HLS 原生支持。

示例 HTML(伪代码):
<video id="player" controls></video> <script>if(Hls.isSupported()){var hls=new Hls();hls.loadSource('SIGNED_URL_HERE');hls.attachMedia(document.getElementById('player'));}else{document.getElementById('player').src='SIGNED_URL_HERE';}</script>

8.

兼容性细节与常见问题

iOS:仅支持 HLS 原生,不需 hls.js;DASH 在 iOS 上不被原生支持。

安卓与桌面:现代浏览器可用 hls.js 播 HLS,也可用 dash.js 播 DASH。注意 MSE 支持和 CORS。

9.

调试与验证步骤(必做)

验证 URL:用 curl -I 检查 Content-Type、Accept-Ranges、Cache-Control;用浏览器 DevTools 看网络请求与 206 响应。

日志:检查 CDN 报表、源站访问日志,若出现 403/404,先验证签名和路径是否一致、对象存储权限是否公开或已授权。

10.

问:如何在 PHP 中生成带过期且防篡改的流地址?

答:用 HMAC 签名结合过期时间。步骤:1) 统一 URL 路径规则;2) 在 PHP 中计算 token=hash_hmac('sha256', path+'|'+expiry, secret);3) 将 ?exp=expiry&sig=token 附加到 URL;4) 在 CDN 回源或应用层验证签名与 expiry,拒绝过期或签名不符的请求。

11.

问:如何保证不同设备的播放兼容性?

答:优先发布 HLS(适配 iOS);同时提供 DASH(用于支持 DASH 的浏览器)。前端根据环境选择:iOS 用原生 video;其他现代浏览器用 hls.js 或 dash.js 回退。确保 CORS、MIME、Range 支持和自适应码率切片。

12.

问:遇到跨域、403 或 206 问题如何排查?

答:排查顺序:1) 用 curl -I 检查响应头(Content-Type、Access-Control-Allow-Origin、Accept-Ranges);2) 检查签名和过期时间;3) 查看对象存储权限与 CDN 源站回源设置;4) CDN 控制台查看缓存规则与防盗链配置;5) 若为 206 问题,确保源支持 Range 并返回 Accept-Ranges。

视频CDN

来源:开发指南php如何使用cdn看视频 流地址生成与播放兼容性

TG客服-1 TG客服-2 在线客服