GU直播-简易直播站

性能指标:

  • 支持统计观众个数
  • 支持在线聊天
  • 支持多个房间推流[RTMP流]
  • 支持流鉴权
  • 支持直播流播放

一些想说的:

之所以会写这个东西,仅仅是为了满足我的小愿望[自己做一个直播站试试],这个直播站从功能以及框架上都非常的羸弱,不足以应对复杂场景,仅仅是做着玩,所以有兴趣的朋友可以下下来玩玩,但不建议应用至生产环境之中。这次的下载站代码会放到Github,并且会在这个文章中附上Nginx(带RTMP模块)的下载链接,以及我的Nginx的配置。

安装:

1.下载Nginx-RTMP windows版

[理论上是可以自己编译的,但win版真的超级难编译]

链接:https://github.com/xaccc/nginx-rtmp-win32

2.修改conf/nginx.conf

worker_processes  1;
daemon off;
master_process off;</code>

error_log logs/error.log info;

events {
worker_connections 1024;
}

rtmp {
server {
listen 1935;//本配置文件是使用1935作为直播服务器的端口

application live {
live on;
notify_method POST;
publish_notify on;
on_publish http://localhost:8080/rtmp/index.php?publish;//网站域名在服务器上使用时也要修改成对外的域名
on_publish_done http://localhost:8080/rtmp/index.php?publish&amp;done;
on_play http://localhost:8080/rtmp/index.php?publish&amp;play;
on_play_done http://localhost:8080/rtmp/index.php?publish&amp;play_done;
}
}
}

http {
include mime.types;
default_type application/octet-stream;
server {
listen 8080;
location / {
root D:/phpstudy/PHPTutorial/WWW;//把这个路径改成你的网站的根目录
index index.html index.htm index.php l.php;
autoindex off;
}
location ~ \.php(.*)$ {
root D:/phpstudy/PHPTutorial/WWW;//把这个路径改成你的网站的根目录
fastcgi_pass 127.0.0.1:9000;//Nginx使用php脚本要单独启用php来监听
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
}

[不过TX云会屏蔽1935端口,所以使用时要自己修改一下]

3.启用Nginx服务器nginx.exe -c conf/nginx.conf

4.启用php服务器php-cgi -b 127.0.0.1:9000 -c php.ini

5.导入SQL到MYSQL中

6.修改config.php

date_default_timezone_set('Asia/Shanghai');
define("DBIP","localhost");//数据库IP
define("DBPORT","3306");//数据库端口
define("DBUSERNAME","root");//数据库用户名
define("DBPASSWORD","root");//数据库密码
define("DBNAME","rmtp");//数据库名
define('SYSTEM_VER','1.0.0');//系统版本号
define('SYSTEM_NAME',"GU直播");//系统名称
define('SYSTEM_ROOT','D:\phpstudy\PHPTutorial\WWW\rtmp\\');//系统网站根目录
define('SUPPORT_URL', 'https://www.7gugu.com');
define('SYSTEM_NO_ERROR', false );//是否开启DEBUG模式
define('AUTH_STATE', true );//是否开启注册
define('RTMP_URL', "rtmp://localhost:1935/live/" );//RTMP链接

7.安装完成!
 

预览图:

登录页面
登录页面
房间信息
房间信息-推流状态自动识别
直播房间
直播房间

范例&Github链接:

http://www.gu-studio.cn/rtmp/

https://github.com/7gugu/gu-rtmp

Lebu-乐步H5计步系统

本项目是基于H5 API开发的健身类网页应用

可改造后使其成为”微信小程序”

Github地址:https://github.com/7gugu/umarket

功能:
1.记录用户运动里程
2.记录用户运动消耗卡路里
3.记录用户运动配速
4.生成配速图
5.统计运动趋势
6.管理用户信息

预览:

计步页面

 

历史记录页面
个人信息页面

 

[笔记]什么是扇入扇出?

科学定义:

扇入:是指直接调用该模块的上级模块的个数。扇入大表示模块的复用程序高。

扇出:是指该模块直接调用的下级模块的个数。扇出大表示模块的复杂度高,需要控制和协调过多的下级模块;但扇出过小(例如总是1)也不好。


通俗理解:

扇入:该模块的上面有几条线,则该模块的扇入数即为几

扇出:该模块的下面有几根线,则该模块的扇出数为几


图例:

如果还是不理解,可以看看以下的图例,帮助理解与记忆。

扇出:


扇入:


引用&工具:

什么是扇入和扇出

https://zhidao.baidu.com/question/584542954.html

制作工具

https://www.processon.com

[笔记][Java]Scanner的一个注意事项

序:

最近入坑Java开发,学习到使用scanner获取用户输入,并且发现了一些入门的坑点,在此写一点笔记方便以后查找。

问题代码:

import java.util.*;

public class Mathmatic {

	public static void main(String[] args) {
		Mathmatic math = new Mathmatic();
		int result;
		result = math.compare();
		System.out.println(result);
		result = math.isPrime();
		System.out.println(result);
	}
	
	public int compare() {
		int num1,num2;
		Scanner input = new Scanner(System.in);
		System.out.println("请输入第一个数字:");
		num1=input.nextInt();
		System.out.println("请输入第二个数字:");
		num2=input.nextInt();
                input.close();
		if(num1==num2) {
			return 0;
		}else if(num1>num2) {
			return 1;
		}else if(num1<num2) {
			return -1;
		}
		return 2;
	}
	
	public int isPrime() {
		int prime;
		Scanner input = new Scanner(System.in);
		System.out.println("请输入一个数字:");
		prime=input.nextInt();
		for(int i=2;i<prime;i++) {
			if(prime%i==0) {
				return 0;
			}
		}
		return 1;
	}
}

此段代码在运行过程中,如果调用了compare函数之后,再调用isPrime函数,将会报以下错误。

错误定位:

 

		num2=input.nextInt();
             -->input.close();<--

这是因为在函数中,声明了一个scanner对象,并且调用了close方法。这可能是由于所有的scanner类共享一个输入流,当其中一个调用关闭函数的时候,所有的scanner对象都关闭了。

解决方法:

在程序的最后,再使用close方法

[转载][笔记]Java 中的 static 使用之静态方法

1、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如:

如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。如:

2、 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量,如下所示:

3、 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。如:

[笔记]Laravel开发笔记-1

说说最近我干了啥.距离上次发文章已经20天了,这段时间里我跑去海南玩了,回来就写了一周的laravel项目了。这次是第一次写,写的挺菜的,被dalao摁在地面上摩擦了,不过还好经过这次开发,我还是学到了一些东西,在这里Mark一下,方便以后差错。

Laravel Auth组件之坑

这次是第一次用auth组件来开发登录模块。由于应用的美工已经规定好了,我就直接手动认证了。

attempt()方法

文档写的是

attempt(["email"=>$email,"password"=>$password])

,这个组件是只能用email来作为username,不能自定义username。

login()方法

login组件需要传入的参数是用户实例。

啥是用户实例?

用户实例的意思是你一定查到的那一条数据,比如你通过ORM查到了一条password符合的数据,此时这条数据就是一个用户实例。

为啥跳转后Auth::check()返回值为false?

可能的原因如下:

  1. modal继承错误
  2. 中间件组件未加载
  3. 数据库字段错误

modal继承错误:

modal原代码:


namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
}

要把代码改成这样子才行!

modal改动后的代码:


<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;//要改成继承这个Auth组件
class User extends Authenticatable
{
}

中间件组件未加载:

Kernel原代码:

有可能是这个组件被注释了,此时需要的是取消注释。

数据库字段错误:

login方法定位用户靠的是数据库的字段名id。

这个字段名必须是id,不能是Id、iD、ID。不然Auth组件将不能够正常工作

logout方法

数据表,必须有remember_token用于存储辨识用户session的凭证。

不然laravel会报错。

 

 

 

 

 

 

[笔记]关于Laravel传值的一个笔记

若出现下图所示的报错

可能出错的定位在下图

简明的原因:

input中的值写错了

解决方法:

检查前端与后端的数据名称是否相同,大小写,下划线,特殊字符的位置等

详细的原因:

有可能是因为前端传参至控制器时,input里面的数组名写错了,此处是前端是Student[],而后端写成了input(‘student’)导致laravel无法获取到正确的值,直接报错

Rule34自动爬虫脚本

Rule34-Downloader

php爬虫,用于爬Rule34图站的数据,自动下载特定标签的图片


特性:

– 支持指定标签,多标签搜索
– 支持轮候任务
– 支持微信通知运行状态
– 低占用


安装向导:

1. 安装php环境
2. 把该程序拖至php.exe同目录中
3. 编辑php内的PATHS,该常量用于定义爬下来的数据的缓存路径
4. 保存
5. 打开ready.txt,按照格式填入待下载标签
6. 保存
7. 运行start.bat


标签格式

female:0:42
标签:开始的pid数(0开始的42的倍数):结束的pid数(0开始的42的倍数,需要比开始的pid大)


下载地址

https://git.dev.tencent.com/7gugu/Rule34-Downloader.git


有问题反馈

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

  • 邮件(gz_7gugu@outlook.com)
  • 博客(https://www.7gugu.com)

尬吹

其实这玩意儿我去年(2018)二月就写好了,不过那时候处于要备考的节点了,就没太多的精力去管理,现在有空了就来把爬虫修好发上来