php实现在线直播
PHP实现在线直播的关键步骤
流媒体服务器搭建 选择Nginx-RTMP、SRS或Red5等开源流媒体服务器,配置推流和拉流地址。Nginx-RTMP需在配置文件中添加RTMP模块:
rtmp {
server {
listen 1935;
application live {
live on;
record off;
}
}
}
推流端实现 使用OBS Studio或FFmpeg进行推流测试,PHP可通过exec()调用FFmpeg命令:
$ffmpegCmd = 'ffmpeg -i input.mp4 -c:v libx264 -preset ultrafast -f flv rtmp://server/live/streamkey';
exec($ffmpegCmd);
播放器集成 网页端采用HLS或RTMP协议播放,推荐使用video.js或JW Player:
<video id="player" class="video-js" controls>
<source src="http://server/live/stream.m3u8" type="application/x-mpegURL">
</video>
鉴权与安全 实现token验证机制,推流/播放URL需携带动态生成的token:

$token = md5($streamKey . $timestamp . $secret);
$url = "rtmp://server/live/streamkey?token=$token&t=$timestamp";
录制与回放 在流媒体服务器配置录制功能,Nginx-RTMP添加配置:
record all;
record_path /var/rec;
record_unique on;
技术选型建议
协议选择
- 低延迟场景:RTMP/WebRTC
- 兼容性优先:HLS/DASH
- 移动端适配:HLS+HTTP-FLV
CDN加速 对于高并发场景,需集成云服务商直播解决方案(如阿里云直播、腾讯云LVB),通过API实现推流/播放地址的动态生成。

性能优化
- 开启GOP缓存减少首屏时间
- 采用多码率自适应转码
- 使用QUIC协议提升传输效率
完整示例代码
推流地址生成
function generatePushUrl($userId) {
$expire = time() + 3600;
$key = "YOUR_SECRET_KEY";
$streamName = "user_" . $userId;
$hash = md5("/live/$streamName-$expire-$key");
return "rtmp://YOUR_SERVER/live/$streamName?expire=$expire&hash=$hash";
}
播放页集成
$playUrl = "http://YOUR_CDN/live/stream.m3u8";
echo <<<HTML
<video id="example-video" width=600 height=300 class="video-js" controls>
<source src="$playUrl" type="application/x-mpegURL">
</video>
<script src="video.js"></script>
HTML;
实际部署时需要根据业务规模选择合适架构,小型应用可直接使用开源方案,大型平台建议采用专业直播云服务。注意遵守《网络视听许可证》等法规要求。






