本页内容包含所有站内用户最新发表的博客.
最新发布
new
webrtc,srs,音视频
0
16
一、go语言环境搭建srs4.0安装需要go语言环境,所以如果服务器没有配置过go语言环境的话,需要先配置go语言环境。下载安装包官网:https://golang.google.cn/dl/下载和解析:[root@localhostopt]cd/usr/local/[root@localhostlocal]wgethttps://dl.google.com/go/go1.16.5.linux-amd64.tar.gz--no-check-certificate[root@localhostlocal]tar-C/usr/local-xzfgo1.16.5.linux-amd64.tar.gz配置GOROOT和PATH环境变量,在/etc/profile中配置。vi/etc/profile#将环境变量添加到/etc/profile文件末尾。exportGOROOT=/usr/local/goexportPATH=$PATH:$GOROOT/bin:$GOBIN使用source/etc/profile命令使配置文件生效[root@localhostlocal]source/etc/profile查看安装是否成功[root@localhostlocal]goversiongoversiongo1.16.5linux/amd64二、srs源码下载编译我把源码下载到了/opt/文件夹下[root@VM-0-13-centosopt]#gitclone-b4.0releasehttps://gitee.com/ossrs/srs.git编译,注意需要切换到srs/trunk目录:[root@VM-0-13-centossignaling]#cd/opt/srs/trunk[root@VM-0-13-centostrunk]#./configure[root@VM-0-13-centostrunk]#make编译信令服务器,信令服务在srs/trunk/3rdparty/signaling文件夹下[root@VM-0-13-centostrunk]#cd./3rdparty/signaling[root@VM-0-13-centossignaling]#make三、启动srs和信令服务修改rtc配置文件vi/opt/srs/trunk/conf/rtc.conf#WebRTCstreamingconfigforSRS.#@seefull.conffordetailconfig.listen1935;max_connections1000;daemonoff;srs_log_tankfile;srs_log_file/var/log/srs.log;http_server{enabledon;listen8080;dir./objs/nginx/html;}http_api{enabledon;listen1985;}stats{network0;}rtc_server{enabledon;listen8000;#UDPport#@seehttps://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidatecandidatedemo.com;}vhost__defaultVhost__{rtc{enabledon;#@seehttps://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtcrtmp_to_rtcoff;#@seehttps://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmprtc_to_rtmpoff;}http_remux{enabledon;mount[vhost]/[app]/[stream].flv;}}主要修改的配置如下:修改srs_log_tank,日志输出方式,原来是console,改成输出到文件file添加srs_log_file,配置日志文件路径值/var/log/srs.log修改candidate,改成服务端ip或域名启动srs服务,路径/opt/srs/trunk[root@VM-0-13-centostrunk]#./objs/srs-c./conf/rtc.conf&默认端口是:1985启动信令服务:[root@VM-0-13-centostrunk]#nohup./3rdparty/signaling/objs/signaling/var/log/signaling.log&disown默认端口是:1989三、配置nginx代理nginx安装#检查和安装nginx依赖[root@localhostlocal]#yum-yinstallgcczlibzlib-develpcre-developensslopenssl-devel#下载nginx[root@localhostlocal]#wgethttp://nginx.org/download/nginx-1.13.7.tar.gz#解压并进入目录[root@localhostlocal]tar-zxvfnginx-1.13.7.tar.gz[root@localhostnginx-1.13.7]cdnginx-1.13.7/#创建nginx安装目录[root@localhostnginx-1.13.7]mkdir/usr/local/nginx#配置,注意要配置安装ssl模块[root@localhostnginx-1.13.7]./configure--prefix=/usr/local/nginx/--pid-path=/var/run/nginx.pid--with-http_ssl_module#编译和安装[root@localhostnginx-1.13.7]make&&makeinstall[root@localhostnginx-1.13.7]test-d#启动nginx[root@localhostnginx-1.13.7]/usr/local/nginx/sbin/nginx生成ssl证书具体说明参考:https://www.cnblogs.com/pcx105/p/15434332.htmlopensslgenrsa-des3-outserver.key2048#需要输入两次密码,至少四位opensslrsa-inserver.key-outserver.key#需要输入密码opensslreq-new-x509-keyserver.key-outca.crt-days3650opensslreq-new-keyserver.key-outserver.csropensslx509-req-days3650-inserver.csr-CAca.crt-CAkeyserver.key-CAcreateserial-outserver.crtcatserver.keyserver.crtserver.pem修改nginx配置文件server{listen80;##配置httpslisten443ssl;##配置域名server_namewww.demo.com;#charsetkoi8-r;#access_loglogs/host.access.logmain;##配置证书ssl_certificate/usr/local/nginx/conf/ssl/server.pem;ssl_certificate_key/usr/local/nginx/conf/ssl/server.key;ssl_protocolsTLSv1TLSv1.1TLSv1.2;ssl_ciphersECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_cipherson;ssl_session_cacheshared:SSL:10m;ssl_session_timeout10m;##srs提供的demo文件路径location/{root/opt/srs/trunk/objs/nginx/html/;}##配置信令服务地址location/sig{proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_read_timeout3600s;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"upgrade";proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_headerX-NginX-Proxytrue;proxy_passhttp://127.0.0.1:1989/sig;}##配置rtc服务location/rtc{proxy_http_version1.1;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"Upgrade";proxy_passhttp://127.0.0.1:1985;}error_page500502503504/50x.html;location=/50x.html{roothtml;}}rtc服务端口是8000/udp,服务器需要放开该端口。firewall-cmd--zone=public--add-port=8000/udp--permanentfirewall-cmd--zone=public--add-port=443/tcp--permanentfirewall-cmd--reload因为webrtc必须在https、或localhost环境下才能访问,所以外网访问需要配置ssl,如果是在外网环境搭建,那么证书可以去阿里云购买,或申请免费的,服务都启动完成之后直接访问域名即可访问webrtc的测试页面。如果是在vm虚拟机上搭建的测试环境,则需要生成证书,证书生成完成后,在nginx上配置即可四、测试访问测试页面:https://192.168.127.128/点击进入srs播放器推流拉流

blog
javascript 计算值所占的百分比
前端
0
32
js计算值所占的百分比:functiongetPercentValue(arr){//求和letsum=0;if(sum=0){for(leti=0;iarr.length;i++){sum+=arr[i];}}//10的2次幂是100,用于计算精度。letdigits=1;//扩大比例100letvotesPerQuota=[];for(leti=0;iarr.length;i++){letva
blog
java计算值所占的百分比
java基础,算法基础
0
52
输入一个整数数组a,输出一个同样长度的数组b表示对应a数组各个位置上的元素值占a数组总值的百分比。publicstaticdouble[]getPercentValue(int[]arr){//求和doublesum=0;if(sum=0){for(inti=0;iarr.length;i++){sum+=arr[i];}}//10的2次幂是100,用于计算精度。doubledigits=1;//
blog
java实现mqtt客户端案例
mqtt协议
0
53
pom依赖dependencygroupIdorg.eclipse.paho/groupIdartifactIdorg.eclipse.paho.client.mqttv3/artifactIdversion1.2.0/version/dependency发布端importorg.eclipse.paho.client.mqttv3.MqttClient;importorg.eclipse.pah
mysql,数据库
0
96
MySQLgroup_concat()函数用法 在使用groupby对数据进行分组后,如果需要对select的数据项进行字符串拼接,这时就需要用到group_concat()函数。1、基本用法group_concat()完整语法如下:group_concat([DISTINCT]要连接的字段[OrderBY排序字段ASC/DESC][Separator'分隔符']) 通过distinct可以去

blog
redis哨兵模式环境搭建
redis
0
161
介绍 单机版的Redis存在性能瓶颈,Redis通过提高主从复制实现读写分离,提高了了Redis的可用性,另一方便也能实现数据在多个Redis直接的备份。 通过配置Redis的主从复制机制可以提高Redis的可用性,但是一旦主节点出现问题,就需要运维手工切换主从服务节点,即增加了人工成本,且容易出错,而且无法自动化切换,Redis的哨兵机制就能实现自动的主从切换,以及实现对Redis服务的切换。准备 本次测试环境搭建一主两从,三台虚拟机分别是192.168.127.14(主)、192.168.127.101(从)、192.168.127.102(从)。系统环境centos7。 单机搭建redis环境之前的文章中已经提到过,这里不再叙述,参考:http://www.jiajiajia.club/blog/artical/4ngaxn9dyq0t/537,我们在此文章的基础上继续。master主库配置介绍单机安装的时候redis.conf已经配置了如下参数:#绑定的主机,注释掉后允许所有主机登陆#bind127.0.0.1#关闭保护模式protected-modeno#端口,默认为6379port6379#开启后台运行模式daemonizeyes#redis日志文件路径logfile"/usr/local/redis/log/redis.log"#持久化数据文件路径dir"/usr/local/redis/data"#登陆redis数据库的密码认证requirepass"123456"#开启AOF持久化模式appendonlyyes配置哨兵模式时需要在redis.conf配置文件中增加一项配置如下:#哨兵模式中设定主库密码与当前库密码同步,保证从库能够提升为主库masterauth"123456"在/etc/redis/目录下创建sentinel.conf哨兵配置文件,该配置文件和redis.conf在同一个目录(非必须,随意)#关闭保护模式protected-modeno#sentinel默认端口port26379#允许后台运行daemonizeyes#pid文件默认就好pidfile"/var/run/redis-sentinel.pid"#sentinel日志文件logfile"/usr/local/redis/log/sentinel.log"#监听redis主节点是否失效#sentinelmonitormaster-redis-namemaster-redis-ipmaster-redis-portquorum#quorum是一个数字:指明当有多少个sentinel认为一个master失效时(值一般为:sentinel总数/2+1),master才算真正失效。#mymaster这个名字随便取,客户端访问时会用到sentinelmonitormymaster192.168.127.1463792sentinelauth-passmymaster123456sentinelannounce-ip"192.168.127.14"启动master节点的redis和sentinel[root@localhostlog]#/usr/local/bin/redis-server/etc/redis/redis.conf[root@localhostlog]#/usr/local/bin/redis-sentinel/etc/redis/sentinel.conf启动客户端,执行一下命令说明启动成功[root@localhostlog]#/usr/local/bin/redis-cli127.0.0.1:6379auth123456OK127.0.0.1:6379pingPONG127.0.0.1:6379三台服务器都记得开放6379和26379端口firewall-cmd--zone=public--add-port=6379/tcp--permanent&&firewall-cmd--zone=public--add-port=26379/tcp--permanent&&firewall-cmd--reloadslave从库配置 从库的服务安装和配置基本和主库一致,redis.conf和sentinel.conf配置文件可以直接从主库复制过来,做一些修改即可。两台从库的配置是一样的。在redis.conf配置文件中增加一项配置:#配置主从关系slaveof192.168.127.146379修改sentinel.conf配置文件sentinelannounce-ip192.168.127.101这项配置中的ip更换为本机ip,其余配置可不用更改,如果有sentinelmyid配置要将它删除。启动redis和sentinel,方式和启动master节点一样。待master节点和两台slave节点启动完成后,可以查看集群信息[root@localhostlog]#/usr/local/bin/redis-cli127.0.0.1:6379auth123456OK127.0.0.1:6379inforeplication#Replicationrole:master#节点角色,这个是主节点connected_slaves:2slave0:ip=192.168.127.101,port=6379,state=online,offset=172847,lag=1#从节点信息slave1:ip=192.168.127.102,port=6379,state=online,offset=172991,lag=1#从节点信息master_replid:5e9f379fedf9502122ea1bf0667fa135024958dbmaster_replid2:0000000000000000000000000000000000000000master_repl_offset:173278second_repl_offset:-1repl_backlog_active:1repl_backlog_size:1048576repl_backlog_first_byte_offset:1repl_backlog_histlen:173278127.0.0.1:6379至此,redis的一主两从三哨兵架构搭建完成。springboot配置redis哨兵模式pom文件添加配置dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactId/dependencyapplication.yml配置文件server:port:8080spring:redis:database:0password:123456timeout:3000sentinel:#哨兵模式master:mymaster#主服务器所在集群名称nodes:192.168.127.101:26379,192.168.127.102:26379,192.168.127.14:26379lettuce:pool:max-idle:50min-idle:10max-active:100max-wait:1000测试importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.data.redis.core.ValueOperations;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;importjavax.annotation.Resource;@RestControllerpublicclassTestController{@ResourceprivateRedisTemplateredisTemplate;@GetMapping("set")publicbooleanset(Stringkey,Stringvalue){finalValueOperationsvalueOperations=redisTemplate.opsForValue();valueOperations.set(key,value);returntrue;}@GetMapping("get")publicObjectget(Stringkey){finalValueOperationsvalueOperations=redisTemplate.opsForValue();finalObjecto=valueOperations.get(key);returno;}} 正常情况下测试,通过接口或者客户端在任意一台服务中添加一个key、value,都会同步到另外两台服务。如果我们手动关闭主节点的redis服务。2023-01-1316:50:59.626INFO9192---[nio-8080-exec-1]o.a.c.c.C.[Tomcat].[localhost].[/]:InitializingSpringDispatcherServlet'dispatcherServlet'2023-01-1316:50:59.626INFO9192---[nio-8080-exec-1]o.s.web.servlet.DispatcherServlet:InitializingServlet'dispatcherServlet'2023-01-1316:50:59.630INFO9192---[nio-8080-exec-1]o.s.web.servlet.DispatcherServlet:Completedinitializationin4ms2023-01-1316:54:10.211INFO9192---[xecutorLoop-1-5]i.l.core.protocol.ConnectionWatchdog:Reconnecting,lastdestinationwas/192.168.127.14:63792023-01-1316:54:12.233WARN9192---[ioEventLoop-4-4]i.l.core.protocol.ConnectionWatchdog:Cannotreconnectto[192.168.127.14:6379]:Connectionrefused:nofurtherinformation:/192.168.127.14:63792023-01-1316:54:16.497INFO9192---[ecutorLoop-1-11]i.l.core.protocol.ConnectionWatchdog:Reconnecting,lastdestinationwas192.168.127.14:63792023-01-1316:54:18.512WARN9192---[oEventLoop-4-10]i.l.core.protocol.ConnectionWatchdog:Cannotreconnectto[192.168.127.14:6379]:Connectionrefused:nofurtherinformation:/192.168.127.14:63792023-01-1316:54:22.799INFO9192---[xecutorLoop-1-5]i.l.core.protocol.ConnectionWatchdog:Reconnecting,lastdestinationwas192.168.127.14:63792023-01-1316:54:24.815WARN9192---[ioEventLoop-4-4]i.l.core.protocol.ConnectionWatchdog:Cannotreconnectto[192.168.127.14:6379]:Connectionrefused:nofurtherinformation:/192.168.127.14:63792023-01-1316:54:29.898INFO9192---[ecutorLoop-1-11]i.l.core.protocol.ConnectionWatchdog:Reconnecting,lastdestinationwas192.168.127.14:63792023-01-1316:54:31.910WARN9192---[oEventLoop-4-10]i.l.core.protocol.ConnectionWatchdog:Cannotreconnectto[192.168.127.14:6379]:Connectionrefused:nofurtherinformation:/192.168.127.14:63792023-01-1316:54:37.097INFO9192---[xecutorLoop-1-3]i.l.core.protocol.ConnectionWatchdog:Reconnecting,lastdestinationwas192.168.127.14:63792023-01-1316:54:39.116WARN9192---[ioEventLoop-4-2]i.l.core.protocol.ConnectionWatchdog:Cannotreconnectto[192.168.127.14:6379]:Connectionrefused:nofurtherinformation:/192.168.127.14:63792023-01-1316:54:43.298INFO9192---[xecutorLoop-1-5]i.l.core.protocol.ConnectionWatchdog:Reconnecting,lastdestinationwas192.168.127.14:63792023-01-1316:54:43.307INFO9192---[ioEventLoop-4-4]i.l.core.protocol.ReconnectionHandler:Reconnectedto192.168.127.102:6379 主节点(192.168.127.14)关闭后,业务服务进行重连,重连6次失败后连接到从服务器(192.168.127.102)
blog
redis单机安装
redis
0
173
操作系统linuxcentos7准备官网下载安装包:https://redis.io/download/将安装包上传到服务器,解压并进入文件目录[root@localhost~]#tar-zxvfredis-5.0.14.tar.gz&&cdredis-5.0.14[root@localhostredis-5.0.14]#ll总用量284-rw-rw-r--.1rootroot12
blog
git 删除分支
git
0
119
如果只有本地分支存在,则直接删除本地分支即可。如果本地分支和远程分支都存在,则先删除本地分支然后再删除远程分支。删除本地分支在git中,删除本地分支并不会影响远程仓库中的任何分支。删除本地分支的命令:gitbranch-dlocal_branch先列出所有本地分支D:\my_workspace\gitdemogitbranchmaster*test可以看到现在本地有三个分支,当前在test这个分支
rabbitmq,haproxy
0
153
搭建完成rabbitmq镜像集群后,客户端可以根据每个节点的ip进行连接,但是如果将某节点的ip地址写死在代码里,那将失去了扩展性,而且不利于维护。此时需要一个代理服务器,来让三台mq服务平摊压力,实现负载均衡。HAProxy简介HA-HighAvailable高可用,Proxy-代理。HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚

blog
rabbitmq集群搭建
rabbitmq,mqtt协议
0
139
集群目的就是为了实现rabbitmq的高可用性,集群分为2种普通集群:主备架构,只是实现主备方案,不至于主节点宕机导致整个服务无法使用镜像集群:同步结构,基于普通集群实现的队列同步普通集群 slave节点复制master节点的所有数据和状态,除了队列数据,队列数据只存在master节点,但是Rabbitmqslave节点可以实现队列的转发,也就是说消息消费者可以连接到slave节点,但是slav

springboot,java基础
0
171
产生原因:文件在进行maven打包后被损坏解决办法通过配置pom.xml过滤不需要maven进行重编码的文件,以下方法选其一即可buildplugins!--资源文件拷贝插件--plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-resources-plugin/artifactIdconfigurationencodingUT
前端
0
167
例如有一个含有固定格式字符串,/test/zzh/00a7700/dev/invock,而且/zzh/和它下一个/是一个一个固定格式。那么想获取/zzh/和它下一个/之间的内容方法如下:Stringanalysis(StringtopicName){RegExpexp=RegExp(r'/zzh/([^]*?)/');RegExpMatch?match=exp.firstMatch(topic
git
0
151
参数:—hard—soft—mixed参数:
参数
功能
场景
–hard
清空工作区与缓存区
放弃目标版本后所有的修改
–soft
保留工作区与缓存区,但是把版本之间的差异存放在缓存区
合并多个commit
–mixed(或缺省)
保留工作区清空缓存区,把版本之间的差异存放在工作区
1、有错误的commit需要修改;2、gitresetHEAD清空缓存区
—hard[r
blog
xxl-job部署和使用
xxl-job
0
360
一、xxl-job介绍 XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。系统组成调度模块(调度中心):负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;支持可视化、简单且动态的管理调度信息,包括任务新建,更新
blog
Aspose实现word转图片、pdf
其他
0
246
Aspose Aspose.Total是Aspose公司旗下的最全的一套office文档管理方案,主要提供.net跟java两个开发语言的控件套包,通过它,可以有计划地操纵一些商业中最流行的文件格式:Word,Excel,PowerPoint,Project,等office文档以及PDF文档。除了强大的文件操纵组件之外,Aspose.Total还提供了用于制图、写电子邮件、拼写检查、创建条形码、

blog
vrrp协议虚拟路由器配置
网络基础,ensp
0
302
VRRP【VirtualRouterRedundancyProtocol】全称是虚拟路由冗余协议,它是一种容错协议。该协议通过把几台路由设备联合组成一台虚拟的路由设备,该虚拟路由器在本地局域网拥有唯一的一个虚拟ID和虚拟IP地址。实际上,该虚拟路由器是由一个Master设备和若干Backup设备组成。正常情况下,业务全由Master承担,所有用户端仅需设置此虚拟IP为网关地址。当Master出

blog
mysql主从复制配置
数据库,mysql
0
389
主从复制的基本原理
(1)master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中;(2)slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件(3)同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地

blog
使用rclone管理minio文件
minio
0
715
rclone下载地址:https://rclone.org/downloads/
解压文件包:
unziprclone-v1.59.0-linux-amd64.zip
cdcdrclone-v1.59.0-linux-amd64/
#复制二进制文件
sudocprclone/usr/bin/
sudochownroot:root/usr/bin/rclone
sudochmod755/usr
blog
java使用minio上传文件
minio
0
1244
创建buckets
创建serviceaccounts
java上传文件
maven依赖:
dependency
groupIdio.minio/groupId
artifactIdminio/artifactId
version7.0.2/version
/dependency
java代码:
packageorg.example.controller;
importjava.io

blog
linux系统安装minio
minio,linux
0
475
创建minio的安装目录[root@VM-0-13-centos/]#mkdir/usr/local/minio
[root@VM-0-13-centos/]#cd/usr/local/minio/
使用wget下载minio的安装包wgethttps://dl.minio.io/server/minio/release/linux-amd64/minio
下载完成后赋予minio文件的执行权

blog
{{data.title}}
{{data.type}}
{{data.createTime}}
{{data.praise}}
{{data.viewNum}}
{{data.description}}
今日推荐
drec
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。