调用的是TokenGuard 这个类
数据库user 表有 字段名为 api_token 的校验 用来存放token
用户登录后会获取该token 之后所有请求 都要带上该token
该token没有超时机制 每次获取user个人信息需要根据token查一次数据库 比jwttoken 性能要差
调用的是TokenGuard 这个类
数据库user 表有 字段名为 api_token 的校验 用来存放token
用户登录后会获取该token 之后所有请求 都要带上该token
该token没有超时机制 每次获取user个人信息需要根据token查一次数据库 比jwttoken 性能要差
为api 调用提供身份校验功能
docs https://jwt-auth.readthedocs.io/
install
composer require tymon/jwt-auth
Add the service provider to the providers array in the config/app.php config file as follows:
'providers' => [
...
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
]
Run the following command to publish the package config file:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
Generate secret key
This will update your .env file with something like JWT_SECRET=XXX
php artisan jwt:secret
该包 修改laravel api 路径下默认的 token校验方式 把token改为JWT token
其实生成流程和校验流程和之前没变化
login 通过用户账号密码 作为 credentials 然后去数据库获取用户信息 该用户信息会生成JWT token 放在laravel 默认缓存管理器
后续请求 在请求头带上 Authorazation : bear $token
通过auth:api 中间件校验
docs https://docs.guzzlephp.org/
install
composer require guzzlehttp/guzzle
sync get
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle');
echo $response->getStatusCode(); // 200
echo $response->getHeaderLine('content-type'); // 'application/json; charset=utf8'
echo $response->getBody(); // '{"id": 1420053, "name": "guzzle", ...}'
async get
$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org');
$promise = $client->sendAsync($request)->then(function ($response) {
echo 'I completed! ' . $response->getBody();
});
$promise->wait();
post
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.github.com/repos/guzzle/guzzle',
[
'headers' => [
'User-Agent' => 'testing/1.0',
'Accept' => 'application/json',
'X-Foo' => ['Bar', 'Baz']
],
//'query' => ['foo' => 'bar'] //query params
//'body' => 'foo' // plain string BODY
/* 'form_params' => [ // application/x-www-form-urlencoded
'foo' => 'bar',
'baz' => ['hi', 'there!']
]*/
//'json' => ['foo' => 'bar']] //json body application/json
/*'multipart' => [ multipart multipart/form-data
[
'name' => 'foo',
'contents' => 'data',
'headers' => ['X-Baz' => 'bar']
],
[
'name' => 'baz',
'contents' => Psr7\Utils::tryFopen('/path/to/file', 'r')
],
[
'name' => 'qux',
'contents' => Psr7\Utils::tryFopen('/path/to/file', 'r'),
'filename' => 'custom_filename.txt'
],
]*/
],
);
echo $response->getStatusCode(); // 200
echo $response->getHeaderLine('content-type'); // 'application/json; charset=utf8'
echo $response->getBody(); // '{"id": 1420053, "name": "guzzle", ...}'
pacman 实在msys2 下的包管理器
常用命令
pacman -Ss xxx 包搜索
pacman -S xxx 包安装
用法
pacman [...]
操作
pacman {-h --help} //帮助
pacman {-V --version} //查看版本
pacman {-D --database} //pacman管理数据库选项
pacman {-Q --query} [选项] [软件包] //查询安装包
pacman {-R --remove} [选项] //删除安装包
pacman {-S --sync} [选项] [软件包] //安装安装包
pacman {-U --upgrade} [选项] //更新安装包
使用 'pacman {-h --help}' 及某个操作以查看可得的选项
[zhangy@BlackGhost ~]$ pacman -D --help
用法
pacman {-D --database}
选项
--asdeps 标记为非单独指定安装的软件包
--asexplicit 标记为单独指定安装的软件包
--config 指定另外的配置文件
--logfile 指定另外的日志文件
--noconfirm 不询问确认
--noprogressbar 下载文件时不显示进度条
--noscriptlet 不执行安装小脚本
-v, --verbose 循环执行
-- debug 显示除错信息
-r, --root 指定另外的安装根目录
-b, --dbpath 指定另外的数据库位置
--cachedir 指定另外的软件包缓存位置
--arch 设定另外的架构
[zhangy@BlackGhost ~]$ pacman -Q --help
用法
pacman {-Q --query} [选项] [软件包]
选项
-c, --changelog 查看某软件包的更新日志
-d, --deps 列出所有作为依赖关系安装的软件包 [过滤器]
-e, --explicit 列出所有单独指定安装的软件包 [过滤器]
-g, --groups 查看某软件包组所属的所有软件包
-i, --info 查看软件包信息 (-ii 查看备份文件)
-k, --check 检查该软件包拥有的文件是否存在
-l, --list 列出被查询软件包的内容
-m, --foreign 列出没有在同步数据库时找到的已安装软件包 [过滤器]
-o, --owns 查询哪个软件包拥有
-p, --file 从某个软件包而不是数据库查询
-s, --search 搜寻符合指定字符串的已安装本地的软件包
-t, --unrequired 列出所有不被其他软件包要求的软件包 [过滤器]
-u, --upgrades 列出所有可升级的软件包 [过滤器]
-q, --quiet 在查询或搜索时显示较少的信息
--config 指定另外的配置文件
--logfile 指定另外的日志文件
--noconfirm 不询问确认
--noprogressbar 下载文件时不显示进度条
--noscriptlet 不执行安装小脚本
-v, --verbose 循环执行
-- debug 显示除错信息
-r, --root 指定另外的安装根目录
-b, --dbpath 指定另外的数据库位置
--cachedir 指定另外的软件包缓存位置
--arch 设定另外的架
[zhangy@BlackGhost ~]$ pacman -R --help
用法
pacman {-R --remove} [选项]
选项
-c, --cascade 删除软件包及所有的依赖于此的软件包
-d, --nodeps 略过依赖关系检查
-k, --dbonly 只删除数据库记录,不删除文件
-n, --nosave 同时删除配置文件
-s, --recursive 同时删除 (不会破坏其他软件包的) 依赖关系(-ss·也包括单独指定安装的依赖关系)
-u, --unneeded 同时删除不需要的 (且不会破坏其他软件包的) 依赖关系
--print 仅打印目标而不执行操作
--print-format 指定如何打印目标
--config 指定另外的配置文件
--logfile 指定另外的日志文件
--noconfirm 不询问确认
--noprogressbar 下载文件时不显示进度条
--noscriptlet 不执行安装小脚本
-v, --verbose 循环执行
-- debug 显示除错信息
-r, --root 指定另外的安装根目录
-b, --dbpath 指定另外的数据库位置
--cachedir 指定另外的软件包缓存位置
--arch 设定另外的架构
[zhangy@BlackGhost ~]$ pacman -S --help
用法
pacman {-S --sync} [选项] [软件包]
选项
--asdeps 作为非单独指定安装的软件包安装
--asexplicit 作为单独指定安装的软件包安装
-c, --clean 从缓存目录中删除旧软件包 (-cc 清除所有)
-d, --nodeps 略过依赖关系检查
-f, -force 强制安装,覆盖存在冲突的文件
-g, --groups 查看某软件包组所属的所有软件包
-i, --info 查看软件包信息
-l, --list 查看在该软件库中的软件包清单
-s, --search 按照指定字符串查询远端软件库
-u, --sysupgrade 升级所有已安装的软件包 (-uu 可启用降级)
-w, --downloadonly 下载但不安装/升级软件包
-y, --refresh 从服务器下载新的软件包数据库
--needed 不重新安装已经为最新的软件包
--ignore 升级时忽略某个软件包 (可多次使用)
--ignoregroup 升级时忽略某个软件包组 (可多次使用)
--print 仅打印目标而不执行操作
--print-format 指定如何打印目标
-q, --quiet 在查询或搜索时显示较少的信息
--config 指定另外的配置文件
--logfile 指定另外的日志文件
--noconfirm 不询问确认
--noprogressbar 下载文件时不显示进度条
--noscriptlet 不执行安装小脚本
-v, --verbose 循环执行
-- debug 显示除错信息
-r, --root 指定另外的安装根目录
-b, --dbpath 指定另外的数据库位置
--cachedir 指定另外的软件包缓存位置
--arch 设定另外的架构
[zhangy@BlackGhost ~]$ pacman -U --help
用法
pacman {-U --upgrade} [选项]
选项
--asdeps 作为非单独指定安装的软件包安装
--asexplicit 作为单独指定安装的软件包安装
-d, --nodeps 略过依赖关系检查
-f, -force 强制安装,覆盖存在冲突的文件
-k, --dbonly 添加数据库记录,不安装或保持现存文件
--print 仅打印目标而不执行操作
--print-format 指定如何打印目标
--config 指定另外的配置文件
--logfile 指定另外的日志文件
--noconfirm 不询问确认
--noprogressbar 下载文件时不显示进度条
--noscriptlet 不执行安装小脚本
-v, --verbose 循环执行
-- debug 显示除错信息
-r, --root 指定另外的安装根目录
-b, --dbpath 指定另外的数据库位置
--cachedir 指定另外的软件包缓存位置
--arch 设定另外的架构
实例1
安装包
1,安装或者升级单个软件包
pacman -S mysql
2,有时候在不同的软件仓库中,一个软件包有多个版本(比如extra和community)。你可以选择一个来安装
pacman -S extra/mysql
3,步包数据库并且安装一个软件包
pacman -Sy mysql
实例2
删除包
1,删除单个软件包,保留其全部已经安装的依赖关系
pacman -R mysql
2,删除指定软件包,及其所有没有被其他已安装软件包使用的依赖关系:
pacman -Rs mysql
实例3
升级系统
pacman -Syu
实例4
查询包
1,查询可用安装包
pacman -Ss mysql
2,要查询已安装的软件包:
pacman -Qs mysql
实例5
其他用法
1,清理当前未被安装软件包的缓存
pacman -Sc
2,下载包而不安装
pacman -Sw mysql
实例6
# pacman -Rsc package_name #要删除软件包和所有依赖这个软件包的程序
# pacman -Rdd package_name #要删除软件包,但是不删除依赖这个软件包的其他程序:
# pacman 删除某些程序时会备份重要配置文件,在其后面加上*.pacsave扩展名。-n 选项可 以删除这些文件
# pacman -Rn package_name
# pacman -Rsn package_name
# pacman -Si package_name #显示软件包的详尽的信息
# pacman -Qi package_name #查询本地安装包的详细信息
# pacman -Qii package_name #使用两个 -i 将同时显示备份文件和修改状态
# pacman -Ql package_name #要获取已安装软件包所包含文件的列表
# pacman -Qk package_name #检查软件包安装的文件是否都存在
# pacman -Qo /path/to/file_name #查询数据库获取某个文件属于哪个软件包
# pacman -Qdt #要罗列所有不再作为依赖的软件包(孤立orphans)
# pacman -Qet #要罗列所有明确安装而且不被其它包依赖的软件包
# pactree package_name #要显示软件包的依赖树
# pactree -r package_name #检查一个安装的软件包被那些包依赖
msys2 是在windows上的一个 linux兼容层 执行msys2 相当于打开了一个linux环境
msys2 预装了 pacman 作为包管理器 可以执行pacman 快速安装各种软件
逆矩阵 转置矩阵 运算律
androidmanifest.xml 权限声明
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
运行时动态权限获取
{
permissions.add(Manifest.permission.CAMERA);
permissions.add(Manifest.permission.BLUETOOTH);
permissions.add(Manifest.permission.BLUETOOTH_ADMIN);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
permissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
permissions.add(Manifest.permission.BLUETOOTH_CONNECT);
permissions.add(Manifest.permission.BLUETOOTH_SCAN);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU ) {
permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
permissions.add(Manifest.permission.BLUETOOTH_CONNECT);
permissions.add(Manifest.permission.BLUETOOTH_SCAN);
}
}
Point screenPoint = 控件.PointToScreen(new Point()); Rectangle rect = new Rectangle(screenPoint, chartCellLine.Size); Image img = new Bitmap(rect.Width, rect.Height); Graphics g = Graphics.FromImage(img); g.CopyFromScreen(rect.X - 1, rect.Y - 1, 0, 0, rect.Size); img.Save(strPicPath, System.Drawing.Imaging.ImageFormat.Jpeg);
:dshow-vdev=HD Video (TC-740B Card) :dshow-adev= :dshow-aspect-ratio=4\:3 :dshow-chroma= :dshow-fps=50 :no-dshow-config :no-dshow-tuner :dshow-tuner-channel=0 :dshow-tuner-frequency=0 :dshow-tuner-country=0 :dshow-tuner-standard=0 :dshow-tuner-input=0 :dshow-video-input=-1 :dshow-video-output=-1 :dshow-audio-input=-1 :dshow-audio-output=-1 :dshow-amtuner-mode=1 :dshow-audio-channels=0 :dshow-audio-samplerate=0 :dshow-audio-bitspersample=0 :live-caching=300
关键是 :live-caching=300 缓存参数 太大 会导致画面延迟 太小会导致画面卡顿 (特别是开启转码功能时) 若只是渲染画面 0 就足够了 默认是300 需要手动写死0
ROP转码功能 我设为15
vlc dshow:// :dshow-adev="麦克风 (Realtek High Definition Audio)"
同时打开桌面+麦克风
vlc screen:// --screen-fps=10 --screen-width=1920 :input-slave=dshow:// :dshow-adev="麦克风 (Realtek High Definition Audio)"
打开摄像头
vlc dshow:// :dshow-vdev="Integrated Camera"
打开摄像头、麦克风
vlc dshow:// :dshow-vdev="Integrated Camera" :dshow-adev="麦克风 (Realtek High Definition Audio)"
串流摄像头+麦克风(注意:杀毒软件对摄像头的防护、防火墙限制、摄像头是否在使用中)
服务端:
vlc dshow:// :dshow-vdev="Integrated Camera" :dshow-adev="麦克风 (Realtek High Definition Audio)" :dshow-size=320*240 :sout=#transcode{vcodec=VP80,vb=2000,acodec=vorb,ab=128,channels=2,samplerate=44100}:duplicate{dst=display,dst=rtp{sdp=rtsp://:8554/test}}
客户端:
vlc rtsp://127.0.0.1:8554/test
虚拟摄像头串流
服务端:
vlc -vvv dshow:// :dshow-adev="virtual-audio-capturer" :dshow-vdev="screen-capture-recorder" --sout=#transcode{vcodec=h264,acodec=mpga,ab=128,channels=2,samplerate=44100,scodec=none}:rtp{sdp=rtsp://:8554/} :no-sout-all :sout-keep
客户端:
vlc rtsp://127.0.0.1:8554/
抓屏推流
服务端:
vlc -vvv screen:// --screen-fps=10 --screen-width=1920 --sout=#transcode{vcodec=h264,acodec=mpga,ab=128,channels=2,samplerate=44100,scodec=none}:rtp{sdp=rtsp://:8554/} :no-sout-all :sout-keep
客户端:
vlc rtsp://127.0.0.1:8554/
————————————————
版权声明:本文为CSDN博主「beiger」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dgnankai/article/details/126267038