php直播 实现
实现 PHP 直播功能的关键步骤
选择直播协议 RTMP(Real-Time Messaging Protocol)是常用的直播推流协议,支持低延迟传输。HLS(HTTP Live Streaming)适合跨平台播放,但延迟较高。WebRTC 适合浏览器端实时通信。
搭建流媒体服务器 Nginx 搭配 RTMP 模块可快速搭建直播服务器。安装命令示例:
sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev
git clone https://github.com/arut/nginx-rtmp-module.git
./configure --add-module=../nginx-rtmp-module
make && make install
配置推流和拉流 在 nginx.conf 中添加 RTMP 配置块:
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
allow publish 127.0.0.1;
allow play all;
}
}
}
前端播放器集成 使用 video.js 或 hls.js 实现网页播放:
<video id="player" controls autoplay></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('http://yourserver.com/live/stream.m3u8');
hls.attachMedia(video);
}
</script>
PHP 后端处理 使用 shell_exec 调用 FFmpeg 进行转码:
$ffmpegCmd = "ffmpeg -i rtmp://localhost/live/stream -c:v libx264 -preset ultrafast -c:a aac -f flv rtmp://localhost/hls/stream";
shell_exec($ffmpegCmd);
实现聊天互动 通过 WebSocket 建立实时聊天:
// 使用 Ratchet 库实现 WebSocket 服务器
$app = new Ratchet\App('localhost', 8080);
$app->route('/chat', new MyChatComponent, ['*']);
$app->run();
性能优化方案
启用 CDN 加速 将直播流分发到 CDN 边缘节点,减轻源站压力。配置 GeoDNS 实现智能调度。
多码率自适应 使用 FFmpeg 生成不同分辨率的流:
ffmpeg -i input.mp4 \
-vf "scale=1280:720" -c:v libx264 -b:v 2500k -c:a aac -b:a 128k -f flv rtmp://server/hls/720p \
-vf "scale=854:480" -c:v libx264 -b:v 1000k -c:a aac -b:a 64k -f flv rtmp://server/hls/480p
硬件加速配置 启用 NVIDIA GPU 加速转码:
ffmpeg -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -c:v h264_nvenc -preset fast output.mp4
安全防护措施
推流鉴权实现 在 nginx 配置中添加 on_publish 回调:
application live {
live on;
on_publish http://localhost/auth.php;
}
防盗链设置 通过 referer 限制访问:
location ~ \.m3u8$ {
valid_referers none blocked server_names;
if ($invalid_referer) { return 403; }
}
DRM 加密 使用 AES-128 加密 HLS 流:
openssl rand 16 > enc.key
echo 'https://example.com/enc.key' > enc.keyinfo
ffmpeg -i input.mp4 -c copy -hls_key_info_file enc.keyinfo -hls_time 10 output.m3u8
监控与统计
流量监控实现 通过 Nginx 日志分析:
log_format rtmp 'bandwidth=$bytes_sent '
'client_ip=$remote_addr '
'stream=$name '
'app=$app';
用户行为统计 集成 Google Analytics 事件跟踪:
player.on('play', function() {
ga('send', 'event', 'Video', 'play', 'Live Stream');
});
QoS 质量监测 使用 FFprobe 获取流媒体信息:
ffprobe -v quiet -print_format json -show_streams rtmp://localhost/live/stream






