直播实现 php
直播功能实现(PHP)
基础架构选择 直播功能通常分为推流端、服务器端和播放端三部分。PHP主要处理服务器端的业务逻辑,实际流媒体传输需配合专业流媒体服务器(如Nginx-RTMP、SRS、Red5等)。
推流端实现 使用OBS、FFmpeg等工具推流到服务器:
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://your-server/live/streamkey
服务器配置(Nginx-RTMP示例)
- 安装Nginx with RTMP模块
- 配置nginx.conf:
rtmp { server { listen 1935; application live { live on; record off; allow publish 127.0.0.1; deny publish all; } } }
PHP业务逻辑处理 创建直播房间逻辑:

// 创建直播房间
function createLiveRoom($title, $userId) {
$streamKey = uniqid('live_');
// 存储到数据库
$db->insert('live_rooms', [
'title' => $title,
'user_id' => $userId,
'stream_key' => $streamKey,
'status' => 'created'
]);
return $streamKey;
}
播放端实现 HTML5播放器示例:
<video id="player" controls autoplay>
<source src="http://your-server/hls/streamkey.m3u8" type="application/x-mpegURL">
</video>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<script>
if(Hls.isSupported()) {
var video = document.getElementById('player');
var hls = new Hls();
hls.loadSource(video.src);
hls.attachMedia(video);
}
</script>
直播状态管理 PHP接口检查直播状态:
function checkLiveStatus($streamKey) {
$file = "/tmp/stream_status_{$streamKey}";
return file_exists($file) ? 'live' : 'offline';
}
录制功能实现 Nginx-RTMP配置录制:

application live {
record all;
record_path /var/recordings;
record_unique on;
}
安全控制 生成临时token防止盗播:
function generatePlayToken($streamKey) {
$expire = time() + 3600;
$signature = hash_hmac('sha256', $streamKey.$expire, 'secret_key');
return base64_encode("{$streamKey}:{$expire}:{$signature}");
}
注意事项
- 直播延迟与协议选择有关(RTMP延迟低,HLS兼容性好)
- 需要配置跨域策略支持网页播放
- 高并发场景需要CDN支持
- 监控服务资源占用情况
完整工作流程
- 主播通过PHP接口获取推流地址
- 推流工具连接RTMP服务器
- 服务器转码生成多种格式流
- 观众通过PHP接口获取播放地址
- 播放器根据设备能力选择最佳协议





