Categories
php

php guzzle 发送http 请求

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", ...}'
Categories
linux

pacman

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   #检查一个安装的软件包被那些包依赖
Categories
linux

Msys2

msys2 是在windows上的一个 linux兼容层 执行msys2 相当于打开了一个linux环境

msys2 预装了 pacman 作为包管理器 可以执行pacman 快速安装各种软件

Categories
线性代数

线性代数

逆矩阵 转置矩阵 运算律

Categories
android

android 13 权限兼容问题

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);
        }
    }
Categories
C#

C# 控件截图

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);
Categories
c

vlc 摄像头零延迟方案

: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

Categories
cmd

vlc 命令行推流

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
Categories
C++

SDL 渲染

beiko camera 就是使用SDL 直接渲染的

Categories
c

vlc 编码设置

:sout=#transcode{vcodec=mp1v,vb=3500,scale=自动,width=1920,height=1080,acodec=mp3,ab=192,channels=2,samplerate=44100,scodec=none}:duplicate{dst=file{dst=C:\\\\Users\\\\15699\\\\Videos\\\\1.mp4,no-overwrite},dst=display} :no-sout-all :sout-keep
:sout=#transcode{vcodec=mp1v,vb=3500,scale=1,width=1920,height=1080,acodec=mp3,ab=192,channels=2,samplerate=44100,scodec=none}:duplicate{dst=file{dst=C:\\\\Users\\\\15699\\\\Videos\\\\2.mp4,no-overwrite},dst=display} :no-sout-all :sout-keep
:sout=#transcode{vcodec=mp1v,vb=3500,scale=1,width=1920,height=1080,acodec=mp3,ab=192,channels=2,samplerate=44100,scodec=none}:file{dst=C:\\Users\\15699\\Videos\\3.mp4,no-overwrite} :no-sout-all :sout-keep
:sout=#transcode{vcodec=MJPG,vb=3500,scale=自动,acodec=mpga,ab=128,channels=2,samplerate=8000,scodec=none}:duplicate{dst=file{dst=C:\\\\Users\\\\15699\\\\Videos\\\\4.mp4,overwrite},dst=display} :no-sout-all :sout-keep