PHP写在线视频直播技术详解 转自http://www.cnblogs.com/zx-admin/p/5697447.html

本文主要是介绍PHP写在线视频直播技术详解 转自http://www.cnblogs.com/zx-admin/p/5697447.html,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2016年7月22日 22:26:45 交流QQ:903464207 本文会不断更新

废话一句,如果你要做高性能服务器服务,请去读底层的东西 http tcp/ip socket 了解基础协议,你对如何建造高性能服务器会有一个深度的了解

目前楼主专注php开发,最直接的方法就是使用lnmp去直接做,搜索以下资料,发现还是行得通的,先把基础架构列出来

前端页面 php  

弹幕flash+js 数据来源是redis集群  

及时聊天 redis集群 +js长连接

礼物系统 

在线调用ffmpeg对流媒体进行转码

服务器流媒体 nginx-rtmp-module  的支持

 

基于HTTP的FLV/MP4 VOD点播
HLS (HTTP Live Streaming) M3U8的支持
基于http的操作(发布、播放、录制)
可以很好的协同现有的流媒体服务器以及播放器一起工作
在线调用ffmpeg对流媒体进行转码
H264/AAC音视频编码格式的支持

服务器端的并发和负载是很大的问题,在兼顾服务器数量+宽带的,后面在详解

视频加速 cdn

支持的pc 安卓 ios需要优化 因为 nginx-rtmp也是支持HLS 

视频源支持 obs 目前这个是pc开源的比较好的

安卓或者ios目前没有发现比较好的开源视频源推送的,欢迎推荐

 

背景和资料

目前流行的流媒体服务器

http://www.oschina.net/project/tag/111/streaming

进行综合对比,发现就PHP作为开发语言来说,nginx肯定是比较方便,因为大部分需要的东西都可以直接配置而且配置也不是很麻烦

又花了很多时间去搜索性能对比,发现nginx-rtmp的性能还是不错的,而且后期做负载和水平扩展,都是很方便的

开发文档

https://github.com/arut/nginx-rtmp-module/wiki/Directives

http://blog.csdn.net/defonds/article/details/9274479/

http://blog.csdn.net/cccallen/article/details/8440191/

 

 

所以最后决定是nginx-rtmp作为流媒体服务器,数据库上5.6+因为5.6+的版本把主从的日志复制变成了多线程复制,性能更好,配置更方便

 http://www.ttlsa.com/mysql/summary-of-the-new-features-of-mysql5_6/

建议上5.7 QPS 更强,最新版,因为是全新项目,编译 的时候可以把 memory存储引擎加上,在测试服在测试比较方便

 5.7版本新特性说明

http://www.oschina.net/translate/whats-new-in-mysql-5-7-generally-available?cmp&p=4

作为需要高并发的网站,建议最好上php7,因为官方鸟哥早就说了,性能增加30%左右,如果你需要超高并发,请上golang,就并发来说,php的资源消耗是很大的

php的并发扩展来说,多进程,虽然也有多线程,但是7以上的版本的扩展不知道是否已经更新,这个也是个问题,如果你了解go语言就会发现go在并发方面做得很好

协程比多线程的资源消耗更小,而且nginx也是支持go的,但是性能怎么样,目前没有测试过 

http://blog.csdn.net/win_lin/article/details/41379799    

内存数据库目前大部分都是redis集群,我也是选的这个

整体下来作为一个php来说,这样的开发成本是最低的

 目前基于php7的框架目前没有,所示自己开发一个小的耦合性低,方便可以扩展的标准mvc框架,模仿CI,目前3.X系列没有说明支持php7

据说CI 4 .x版本会支持

 http://codeigniter.org.cn/forums/thread-22318-1-1.html

 

网站开发测试

 测试服搭建

vmware

服务器 centos 6.5 和 centos 7.2

php7.1 mysql 5.7 nginx 1.9

组件基本都是最新版

 

 

 

复制代码
 


user nginx;
worker_processes 1;

 

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

 

#pid logs/nginx.pid;

 


events {
worker_connections 10240;
}

 

rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;

 


rtmp {
server {
listen 1935;

 

application mytv {  //千万不能使用myapp作为名字 ,不知道为什么就是始终无法播放 访问路径是rtmp://ip/mytv/ 可以使用vlc播放器播放,作为测试
live on;
}

 


application hls {
live on;
hls on;
hls_path /usr/local/nginx/hls;  //这个地址最好和
hls_fragment 5s; 
}
}
}

 

http {
include mime.types;
default_type application/octet-stream;

 


sendfile on;

 

access_log on; 

access_log /usr/local/nginx/html/rtmp_access.log;

 


server {
listen 8081;
server_name localhost 192.168.1.70 127.0.0.1;

 


location /hls {

types {
application/vnd.apple.mpegurl m3u8;            请注意是加上on_public url/x.php 在这个php文件做权限和id对应播放房间的判断,是根据传入的id进行生产id.m3u8文件的
video/mp2t ts;                                 访问url是http://ip/id.m3u8
}
root /usr/local/nginx/hls;

}

 

}

 

 

 

server {

 

listen 8080;
location /stat {

 

rtmp_stat all;

 

rtmp_stat_stylesheet stat.xsl;

 

}

 

 

 

location /stat.xsl {

 

root /usr/local/nginx/html/; #在nginx-rtmp-module源码根目录   查看当前服务器推流情况的xsl统计

 

}

 

}

 

 

 

server {

 

listen 8082;
location / {

 

root /usr/local/nginx/html/;

 

}
}

 

 

 

server {

 

listen 80;
location / {

 

root /usr/local/nginx/html/;

 

}
}
}

 
复制代码

 网页测试播放器hls可以直接使用h5直接播放

rtmp可以使用 ckplayer的flash进行播放,安卓手机端目前没有测试,因为手机uc默认是没有flash,但是使用hls就可以,因为ios默认就是支持的

obs 推流地址 :rtmp://ip/mytv/ 播放也是这个 

这个配置文件会再次更新,仅供参考

 

复制代码
./configure \
--prefix=/usr/local/nginx \
--add-module=/usr/local/src/nginx-rtmp-module-master \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/

这个编译其实已经把hls包含进去了
复制代码

 2016年8月16日16:46:20  今天下午测试,使用腾讯云作为服务器端的,rtmp测试效果延迟6-10s,本地串流到服务器,hls还没有测试

还有一个问题就是腾讯云的安全组,你需要把你的机器加入开放所有端口,默认只开放80端口,可以直接IP访问

 

复制代码
user  nginx;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;
events {worker_connections  10240;
}rtmp_auto_push on;rtmp_auto_push_reconnect 1s;rtmp {server {listen 1935;application mytv {live on;}application hls {live on;hls on;hls_path /usr/local/nginx/hls;hls_fragment 5s; }}
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;access_log on;   access_log /usr/local/nginx/html/rtmp_access.log;server {listen       8081;server_name  localhost 192.168.1.170 127.0.0.1;location /hls {types {# application/vnd.apple.mpegurl m3u8;application/x-mpegurl m3u8;video/mp2t ts;}alias /usr/local/nginx/hls;}}server {listen      8080;location /stat {rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}location /stat.xsl {root /usr/local/nginx/html/;  #在nginx-rtmp-module源码根目录
}}server {listen      80;server_name  localhost 192.168.1.170 127.0.0.1;location / {root /usr/local/nginx/html/;index index.php;}location ~ \.php$ {root           /usr/local/nginx/html/;fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;#fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}}
}
复制代码

 播放地址 http://192.168.1.170:8081/hls/.m3u8

实际开发就会根据用户ID.m3u8 来播放,所以需要一些nginx的知识,推流地址  rtmp://192.168.1.170/hls/  在加密的串流码 里面带上用户ID,是否是大主播,等等的标识,来分流服务器,pull push cdn等

 

所以nginx和nginx-rtmp的详细知识很重要

PHP交流群 247823727 博客文件如果不能下载请进群下载

这篇关于PHP写在线视频直播技术详解 转自http://www.cnblogs.com/zx-admin/p/5697447.html的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/989516

相关文章

乐鑫 Matter 技术体验日|快速落地 Matter 产品,引领智能家居生态新发展

随着 Matter 协议的推广和普及,智能家居行业正迎来新的发展机遇,众多厂商纷纷投身于 Matter 产品的研发与验证。然而,开发者普遍面临技术门槛高、认证流程繁琐、生产管理复杂等诸多挑战。  乐鑫信息科技 (688018.SH) 凭借深厚的研发实力与行业洞察力,推出了全面的 Matter 解决方案,包含基于乐鑫 SoC 的 Matter 硬件平台、基于开源 ESP-Matter SDK 的一

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

持久层 技术选型如何决策?JPA,Hibernate,ibatis(mybatis)

转自:http://t.51jdy.cn/thread-259-1-1.html 持久层 是一个项目 后台 最重要的部分。他直接 决定了 数据读写的性能,业务编写的复杂度,数据结构(对象结构)等问题。 因此 架构师在考虑 使用那个持久层框架的时候 要考虑清楚。 选择的 标准: 1,项目的场景。 2,团队的技能掌握情况。 3,开发周期(开发效率)。 传统的 业务系统,通常业

vue, 左右布局宽,可拖动改变

1:建立一个draggableMixin.js  混入的方式使用 2:代码如下draggableMixin.js  export default {data() {return {leftWidth: 330,isDragging: false,startX: 0,startWidth: 0,};},methods: {startDragging(e) {this.isDragging = tr

十四、观察者模式与访问者模式详解

21.观察者模式 21.1.课程目标 1、 掌握观察者模式和访问者模式的应用场景。 2、 掌握观察者模式在具体业务场景中的应用。 3、 了解访问者模式的双分派。 4、 观察者模式和访问者模式的优、缺点。 21.2.内容定位 1、 有 Swing开发经验的人群更容易理解观察者模式。 2、 访问者模式被称为最复杂的设计模式。 21.3.观察者模式 观 察 者 模 式 ( Obser

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

vue项目集成CanvasEditor实现Word在线编辑器

CanvasEditor实现Word在线编辑器 官网文档:https://hufe.club/canvas-editor-docs/guide/schema.html 源码地址:https://github.com/Hufe921/canvas-editor 前提声明: 由于CanvasEditor目前不支持vue、react 等框架开箱即用版,所以需要我们去Git下载源码,拿到其中两个主

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

Jitter Injection详解

一、定义与作用 Jitter Injection,即抖动注入,是一种在通信系统中人为地添加抖动的技术。该技术通过在发送端对数据包进行延迟和抖动调整,以实现对整个通信系统的时延和抖动的控制。其主要作用包括: 改善传输质量:通过调整数据包的时延和抖动,可以有效地降低误码率,提高数据传输的可靠性。均衡网络负载:通过对不同的数据流进行不同程度的抖动注入,可以实现网络资源的合理分配,提高整体传输效率。增