php实现rtmp
PHP 实现 RTMP 流媒体
RTMP(Real-Time Messaging Protocol)是一种用于实时数据传输的协议,常用于直播和视频流传输。PHP 本身并不直接支持 RTMP 协议,但可以通过与其他工具或扩展结合来实现 RTMP 相关功能。
使用 FFmpeg 推流
FFmpeg 是一个强大的多媒体处理工具,可以通过 PHP 调用 FFmpeg 实现 RTMP 推流。
$ffmpegPath = '/usr/bin/ffmpeg'; // FFmpeg 路径
$inputFile = 'input.mp4'; // 输入文件
$rtmpUrl = 'rtmp://example.com/live/streamkey'; // RTMP 服务器地址
$command = "$ffmpegPath -re -i $inputFile -c:v libx264 -preset fast -c:a aac -f flv $rtmpUrl";
exec($command, $output, $returnCode);
if ($returnCode === 0) {
echo "推流成功";
} else {
echo "推流失败";
}
-re参数表示以实时速度读取输入文件。-c:v libx264指定视频编码为 H.264。-c:a aac指定音频编码为 AAC。-f flv指定输出格式为 FLV。
使用 PHP 扩展
某些 PHP 扩展(如 php-ffmpeg)可以简化 FFmpeg 的调用。
安装 php-ffmpeg:

composer require php-ffmpeg/php-ffmpeg
示例代码:
require 'vendor/autoload.php';
use FFMpeg\FFMpeg;
$ffmpeg = FFMpeg::create();
$video = $ffmpeg->open('input.mp4');
$video->save(new FFMpeg\Format\Video\FLV(), 'rtmp://example.com/live/streamkey');
使用 RTMP 服务器
搭建 RTMP 服务器(如 Nginx-RTMP 或 SRS)后,可以通过 PHP 控制流的分发和管理。
Nginx-RTMP 配置示例:

rtmp {
server {
listen 1935;
application live {
live on;
allow publish 127.0.0.1;
deny publish all;
}
}
}
PHP 可以通过调用 FFmpeg 将流推送到 RTMP 服务器。
使用 WebSocket 和 JavaScript
对于浏览器端的 RTMP 播放,可以使用 JavaScript 库(如 flv.js)播放 RTMP 流。
HTML 示例:
<script src="https://cdn.jsdelivr.net/npm/flv.js"></script>
<video id="video"></video>
<script>
if (flvjs.isSupported()) {
var videoElement = document.getElementById('video');
var flvPlayer = flvjs.createPlayer({
type: 'flv',
url: 'rtmp://example.com/live/streamkey'
});
flvPlayer.attachMediaElement(videoElement);
flvPlayer.load();
flvPlayer.play();
}
</script>
注意事项
- RTMP 协议需要服务器支持,通常使用 Nginx-RTMP 或 SRS。
- FFmpeg 需要正确安装并配置路径。
- 确保防火墙允许 RTMP 端口(默认 1935)的通信。
通过以上方法,可以在 PHP 中实现 RTMP 推流或播放功能。






