Download the PHP package xiaosongshu/rtmp_server without Composer
On this page you can find all versions of the php package xiaosongshu/rtmp_server. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download xiaosongshu/rtmp_server
More information about xiaosongshu/rtmp_server
Files in xiaosongshu/rtmp_server
Package rtmp_server
Short Description A RTMP live streaming server written in PHP
License MIT
Informations about the package rtmp_server
rtmp_server
简介
一个使用纯php开发的rtmp直播服务器,支持rtmp协议推流,rtmp拉流,支持flv格式拉流,可以使用http或者ws协议拉流。
安装
环境配置
本项目使用php8.1,建议新手使用phpstudy这个集成环境,一键搞定环境搭建工作。
或者使用本项目提供的docker环境,在本项目根目录下命令行执行以下命令:
本项目自带的docker配置已经集成了php相关扩展和ffmpeg。
本项目默认使用三个端口:
开启服务
进入本项目的根目录,在命令行执行以下命令:
关闭服务
windows系统
linux系统
推流
我自己调试使用的OBS,使用方法可以参考
网上教程,
OBS工具下载。
你也可以使用ffmpeg工具,命令如下
命令详解
拉流
播放工具可以使用:
VLC打开网络串流地址
ffplay
本项目提供网页播放,直接使用浏览器打开index.html即可,访问地址 http://127.0.0.1:80/index.html
。
本项目提供网页播放,直接使用浏览器打开play.html即可,访问地址 href="http://127.0.0.1:80/play.html
。
延迟问题
在理想状态的情况下测试,延迟在1秒以内。理想状态就是:直播服务器和推流,拉流都在同一台电脑,减少了网络波动的影响。
另外,如果使用浏览器播放,某些浏览器如果切换到后台,因为节能的关系,浏览器不会播放直播,当浏览器切换到前台才会接着上一次的位置重新播放,这样子延迟
就相当高了。
当然了如果服务端处理器性能拉胯,延迟也会很高,因为直播服务很耗性能的。
关于对hls协议的支持
本项目非常抱歉没有实现对hls的支持,但是提供了一个解决办法,使用ffmpeg工具对协议的转换,以上面的rtmp://127.0.0.1/a/b
流为例,本项目默认将
hls协议的文件保存在hls目录下,所以你需要在项目根目录手动创建一个/a/目录。然后在命令行执行以下命令即可完成rtmp协议转换为hls协议。
若需要退出协议转换,请在命令行输入q
即可退出。
命令详解
直播代理转发服务
本项目提供直播转发服务,使用多进程转发音视频数据。因为如果所有的播放器都接入到主进程,一旦播放器客户端数量上升到一定数量级后,只靠一个进程处理延迟会很高。
所以加入了子进程转发数据的服务。开启子进程转发服务后,播放器客户端可以接入到子进程。
操作方法
启动主进程服务
启动子进程服务
子进程转发的是flv数据流。子进程可以设置一个flv的端口,不要和主进程server.php
一样。你可以开启多个子进程转发,每一个子进程的端口都不一样。你的播放器
可以接入子进程的服务器。
比如:开启一个主进程服务推流服务器,开启一个子进程,端口好为8504
,创建一个直播应用为/a/b
,使用ffmpeg
或者obs
推流到服务器。那么子进程的拉流
地址是
。如果播放不了,可能是因为转发延迟,刷新一下重新播放。
本项目提供了两个测试播放转发数据页面。访问地址是:http://127.0.0.1:80/daili.html
和 http://127.0.0.1:80/flv.html
。
存在的问题
转发后的数据,可能是因为数据还原有问题,或者丢失了关键帧,或者关键帧之间的数据顺序错乱了,或者关键帧之间的时间相距过长,导致花屏马赛克,不清晰。
尚未找到具体原因,等待后面解决吧。
转发后,使用vlc播放器可以立即解码播放(虽然花屏有马赛克,可终究可以播放是吧),但是使用js的浏览器不能立即解码(目测是js不够强大,不能还原数据),
看运气,有时候能够立刻解码,有时候要很久才能解码。猜测是缺少完整的连续帧引起的,但是检测连续帧是正确的,奇了怪了。
另外,经过测试,项目在Linux环境能够正常工作。但是在windows环境下,如果使用移动端拉流,可能无法播放,转发功能也不能正常工作。目前还不知道原因,大概
是和windows环境有关吧。
其他
需要注意的是,本项目使用的是php的cli模式,和传统的fpm模式有根本的区别。
如果在运行的时候报错,请检查报错信息,多半是缺少php扩展,根据报错信息安装对应扩展,如果使用本项目的docker配置,一般不会报错的。
本项目已经添加了自定义的hls协议,在Root\HLSDemo::class
,开启hls协议在MediaServer::publisherOnFrame()
方法里面。不过本协议尚有问题。有兴趣的
朋友可以帮忙修正一下。
声明
本项目只用于学习,里面很多资料来源于网络,如有侵权,请联系删除。本项目完全开源,用于相互学习交流,如有问题,欢迎联系我。
如果你觉得项目还将就,请点个星星吧。
联系我
参考资料
- FFmpeg https://ffmpeg.xianwaizhiyin.net/ 虽然这里面大多数讲的都是ffmpeg工具,但是里面涉及到了很多音视频开发的基础知识。
All versions of rtmp_server with dependencies
react/promise Version ^2.9
evenement/evenement Version ^3.0
apix/log Version ^1.2
ext-zlib Version *
phpbg/mpegts Version ^0.2.0
ext-simplexml Version *