hexdump 查看二进制文件

echo "https://const.net.cn" > bin.data
hesy@hesy-ThinkPad-P15v-Gen-1:~/2021/linux$ hexdump -C bin.data 
00000000  68 74 74 70 73 3a 2f 2f  63 6f 6e 73 74 2e 6e 65  |https://const.ne|
00000010  74 2e 63 6e 0a                                    |t.cn.|
00000015

hexdump 自定义格式显示二进制文件

hexdump -e '4/1 "%02X " "\n"' bin.data 
68 74 74 70
73 3A 2F 2F
63 6F 6E 73
74 2E 6E 65
74 2E 63 6E
0A         
hexdump -e '8/1 "%02X " "\n"' bin.data 
68 74 74 70 73 3A 2F 2F
63 6F 6E 73 74 2E 6E 65
74 2E 63 6E 0A         
hexdump -e '16/1 "%02X " "\n"' bin.data 
68 74 74 70 73 3A 2F 2F 63 6F 6E 73 74 2E 6E 65
74 2E 63 6E 0A                                 
hexdump -e '16/1 "%_p " "\n"' bin.data 
h t t p s : / / c o n s t . n e
t . c n .           
hexdump -e '16/1 "%03d " "\n"' bin.data 
104 116 116 112 115 058 047 047 099 111 110 115 116 046 110 101
116 046 099 110 010 

hexdump 将二进制文件转为十六进制文件

hexdump -e '16/1 "%02X " "\n"' bin.data > hex.data
xxd -r -p hex.data bin.data.1
md5sum *
84d86c7c482190d90838c5de11d99d06  bin.data
84d86c7c482190d90838c5de11d99d06  bin.data.1
a100e4d2a6bcf2faceb56f106dfb1c6b  hex.data

xxd 查看二进制文件

xxd -c 4 -p bin.data 
68747470
733a2f2f
636f6e73
742e6e65
742e636e
0a
xxd -c 8 -p bin.data 
68747470733a2f2f
636f6e73742e6e65
742e636e0a
xxd -c 16 -p bin.data 
68747470733a2f2f636f6e73742e6e65
742e636e0a

xxd 将十六进制文件转为二进制文件

xxd -r -p input.txt output.bin    
xxd -c 16 -p bin.data > hex.data
xxd -r -p hex.data bin.data.1
md5sum *
84d86c7c482190d90838c5de11d99d06  bin.data
84d86c7c482190d90838c5de11d99d06  bin.data.1
2d8c913c2685ef14e39fa97a28c3ad79  hex.data

                        

package main
import "fmt"
import "net/url"
import "strings"
func main() {
//我们将解析这个 URL 示例,它包含了一个 scheme,认证信息,主机名,端口,路径,查询参数和片段。
    s := "postgres://user:pass@host.com:5432/path?k=v#f"
//解析这个 URL 并确保解析没有出错。
    u, err := url.Parse(s)
    if err != nil {
        panic(err)
    }
//直接访问 scheme。
    fmt.Println(u.Scheme)
//User 包含了所有的认证信息,这里调用 Username和 Password 来获取独立值。
    fmt.Println(u.User)
    fmt.Println(u.User.Username())
    p, _ := u.User.Password()
    fmt.Println(p)
//Host 同时包括主机名和端口信息,如过端口存在的话,使用 strings.Split() 从 Host 中手动提取端口。
    fmt.Println(u.Host)
    h := strings.Split(u.Host, ":")
    fmt.Println(h[0])
    fmt.Println(h[1])
//这里我们提出路径和查询片段信息。
    fmt.Println(u.Path)
    fmt.Println(u.Fragment)
//要得到字符串中的 k=v 这种格式的查询参数,可以使用 RawQuery 函数。你也可以将查询参数解析为一个map。已解析的查询参数 map 以查询字符串为键,对应值字符串切片为值,所以如何只想得到一个键对应的第一个值,将索引位置设置为 [0] 就行了。
    fmt.Println(u.RawQuery)
    m, _ := url.ParseQuery(u.RawQuery)
    fmt.Println(m)
    fmt.Println(m["k"][0])
}
//运行我们的 URL 解析程序,显示全部我们提取的 URL 的不同数据块。
$ go run url-parsing.go 
postgres
user:pass
user
pass
host.com:5432
host.com
5432
/path
f
k=v
map[k:[v]]
v

第二个url.Parse示例

func time_GET(w http.ResponseWriter, r *http.Request) {
    u, _ := url.Parse(r.URL.String())
    values, _ := url.ParseQuery(u.RawQuery)
    fmt.Println(u)           // /time?a=111&b=1212424
    fmt.Println(u.RawQuery)  // a=111&b=1212424
    fmt.Println(values)      // map[a:[111] b:[1212424]]
    fmt.Println(values["a"]) //[111]
    fmt.Println(values["b"]) //[1212424]
    ...
}

...

 输入URL:
 http://localhost:8080/time?aaa=111&b=1212424

 程序输出:
/time?a=111&b=1212424
a=111&b=1212424
map[a:[111] b:[1212424]]
[111]
[1212424]

OpenSSL 生成 SM2 密钥

openssl ecparam -name SM2 -genkey -out sm2_ec.key 
cat sm2_ec.key 
-----BEGIN EC PARAMETERS-----
BggqgRzPVQGCLQ==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIB9dGHE5+6AD9DGmA8g/cEqn8HYTMBhbM+g2XJ16RqZ1oAoGCCqBHM9V
AYItoUQDQgAEJg19rra1BeuYx9ZU1GbfD0ceE9X67/c2hdb6XZLQor5oNVa+o9HZ
WBioc1hNCC2avO1Dpg5ZAb2YsS71TT7Bsw==
-----END EC PRIVATE KEY-----

OpenSSL 根据SM2私钥生成公钥

openssl ec -in sm2_ec.key -pubout -out sm2_ec.pubkey 
read EC key
writing EC key
cat sm2_ec.pubkey 
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEJg19rra1BeuYx9ZU1GbfD0ceE9X6
7/c2hdb6XZLQor5oNVa+o9HZWBioc1hNCC2avO1Dpg5ZAb2YsS71TT7Bsw==
-----END PUBLIC KEY-----

OpenSSL SM3 计算文件Hash

echo "https://const.net.cn" > sign.data 
openssl dgst -SM3 sign.data 
SM3(sign.data)= 8c13610aeb3040b2899ac224ae7db0710030803c424f776e7241340c66a6d553

OpenSSL 使用 SM2 签名文件

openssl dgst -SM3 -sign sm2_ec.key -out sm2_ec.sig sign.data 
Error setting context
140524048778560:error:100C508A:elliptic curve routines:pkey_ec_ctrl:invalid digest type:../crypto/ec/ec_pmeth.c:331:

在当前版本(OpenSSL 1.1.1f)还不支持命令行使用SM2结合SM3签名。将hash算法换成sha256试试。
OpenSSL 使用 SM2 结合 sha256签名

openssl dgst -sha256 -sign sm2_ec.key -out sm2_ec.sig sign.data 
root@hesy-ThinkPad-P15v-Gen-1:/home/hesy/2021/asn1/src/sm# hexdump -C sm2_ec.sig 
00000000  30 46 02 21 00 d7 52 c2  63 a3 12 ff ef af 69 8e  |0F.!..R.c.....i.|
00000010  8a 35 17 9f f2 0c e2 b1  80 fb dd a1 38 a3 59 14  |.5..........8.Y.|
00000020  5a 18 33 ba 43 02 21 00  9d 10 91 a7 5f a4 cf bb  |Z.3.C.!....._...|
00000030  7b 75 c0 27 17 d5 2d 55  09 cc 10 49 29 f8 bc 0d  |{u.'..-U...I)...|
00000040  10 d6 02 db b1 e4 7c 7a                           |......|z|
00000048

OpenSSL 使用 SM2 结合 sha256 验签

openssl dgst -sha256 -verify sm2_ec.pubkey -signature sm2_ec.sig sign.data 
Verified OK

OpenSSL 使用 SM2 结合 SM3 验签

openssl dgst -SM3 -verify sm2_ec.pubkey -signature sm2_ec.sig sign.data 
Error setting context
140471948707136:error:100C508A:elliptic curve routines:pkey_ec_ctrl:invalid digest type:../crypto/ec/ec_pmeth.c:331:

同上面一样的原因,官方没实现,命令行用不了。

《基于LTE的车联网无线通信技术 安全证书管理系统技术要求》 SM2 验证过程

已知数据
签名证书对应的SM2私钥:

17 9e 18 ae e3 38 72 e1 60 5e 99 e8 bc 61 20 f7 
95 e7 c8 f8 a9 ce 60 7a 4a 71 78 68 23 53 a1 69

签名证书SM3哈希值:

e3 8c 7c b2 ec ed b9 28 9b 6e 71 ad 30 b6 26 2c 
4a 57 85 73 b9 a4 4d e8 ab 65 9a 6b cd 96 7d 77

ToBeSignedData待签名数据值:

40 03 80 20 34 34 34 34 34 34 34 34 34 34 34 34 
34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 
34 34 34 34 40 01 20 00 00 00 00 00 23 73 03 

过程数据
签名证书对应的公钥:

X:
1e 5f 89 a5 74 08 2c 8b 36 11 fb a8 d0 65 f3 08 
b4 8f 64 ee ef 71 30 3c 75 ba 8e 95 d5 be 89 42 
Y:
77 84 ef 22 09 41 de eb cf 5b 3e 34 65 98 0a 30 
91 67 34 6f fe 05 0a e1 00 7c 2d 2f 3f 10 57 74

ZA值:

ff 25 43 65 9c 0b 93 c3 9f e3 b4 00 73 98 df 9f 
b4 0c f4 5d e3 65 e7 c9 af 16 5d 42 68 35 0b b9 

Hash (ZA || Data input) 值:

7a b1 2a 19 b6 45 df c6 36 e2 0e a7 ae b0 e5 5e 
f3 f3 68 38 87 b2 e0 76 a8 eb 32 94 90 4e e5 d4

签名结果数据

R:
DD F9 07 5D D2 D9 47 05 A1 2F 42 5E 51 CB 27 4C 
B8 F4 AE 65 B3 1C 7C DD CD 31 C2 BC 3C 55 28 81
S:
20 86 11 DE 09 A7 CC 4E 48 76 E6 9E F2 E7 C0 6A 
85 39 A4 67 F2 0B 0E A7 FE EB 2A FE 9D 59 5C C4

附录
ZA值计算方法
SM2是一种椭圆曲线密码学算法, SM2只与单个特定的256位椭圆曲线相关联,因此在本标准中与SM2相关联的标识符不需要额外的曲线指示。
本标准中SM2的签名格式r用整数表示。SM2通过将身份字符串添加到要散列的消息前来命名散列函数, 这个身份字符串是:
𝑍𝐴 = 𝐻ASH(𝐸𝑁𝑇𝐿𝐴||𝐼𝐷𝐴||𝑎||𝑏||𝑥𝐺| |𝑦𝐺 ||𝑥𝐴||𝑦𝐴)
其中

1) ENTLA 是由IDA长度转换而成的两个字节字符,值为IDA的有效比特数;
2) IDA 是发送方的ID;
3) a 和b是SM2椭圆曲线的方程参数;
4) xG和yG 是SM2基点的 x和y坐标;
5) xA和yA是验签公钥的x和y坐标;

数字签名用H(ZA || Data input)计算,而不是只用M计算,此处的Data input为待签名的消息数据。
本标准约定IDA为发送方正在使用证书的32字节哈希值,也即IDA=HashedId32(Certificate)并按GB/T 32918进行比特串到字节串的转换,ENTLA 是0x0100。当签发的证书为自签名证书时,IDA为16进制整数31323334353637383132333435363738,并按GB/T 32918进行整数到字节串的转换,因此ENTLA 是0x0080。

2021年动作《速度与激情9》BD中英双字迅雷下载_电影天堂
update:2021-8-4

magnet:?xt=urn:btih:155970bfc960f57cce7033f4c52181da2a5744cb

magnet:?xt=urn:btih:ca6c26a08122deca8319bc5f8b88a057e18337fa 速度与激情9-2021_HD中英双字V2.mp4.torrent magnet:?xt=urn:btih:2c8438b63cc34b8d840220be5e8a9974753b6c2f 速度与激情9-2021_HD中英双字精译.mp4.torrent
Referenced from:https://www.btdx8.com/torrent/sdyjq9_2021.html

速度与激情9 迅雷网盘 密码: kmzw(打开链接密码自动复制)
Referenced from:https://www.bd2020.com/zx/33147.htm

◎译  名 速度与激情9/F9狂野时速(港)/Fast & Furious 9/FF9/狂野时速9/玩命关头9(台)/速激9
◎片  名 F9: The Fast Saga
◎年  代 2021
◎产  地 美国,泰国,加拿大
◎类  别 动作/犯罪
◎语  言 英语
◎字  幕 中英双字
◎上映日期 2021-05-19(韩国) / 2021-05-21(中国大陆) / 2021-06-25(美国)
◎IMDb评分  5.4/10 from 44700 users
◎豆瓣评分 5.4/10 from 131770 users
◎片  长 142分钟
◎导  演 林诣彬 Justin Lin
◎编  剧 丹·凯西 Daniel Casey
       盖瑞·斯科特·汤普森 Gary Scott Thompson
       克里斯·摩根 Chris Morgan
◎主  演 范·迪塞尔 Vin Diesel
       约翰·塞纳 John Cena
       米歇尔·罗德里格兹 Michelle Rodriguez
       乔丹娜·布鲁斯特 Jordana Brewster
       泰瑞斯·吉布森 Tyrese Gibson
       卢达·克里斯 Ludacris
       查理兹·塞隆 Charlize Theron
       海伦·米伦 Helen Mirren
       姜成镐 Sung Kang
       娜塔莉·伊曼纽尔 Nathalie Emmanuel
       迈克尔·鲁克 Michael Rooker
       卢卡斯·布莱克 Lucas Black
       杜俊纬 Jason Tobin
       卡迪·B Cardi B
       吉姆·帕拉克 Jim Parrack
       芬恩·科尔 Finn Cole
       安珀·西耶娜 Amber Sienna
       马丁·福特 Martyn Ford
       艾拉·沃克 Ella Walker
       泽井杏奈 Anna Sawai
       图厄·埃尔斯特德·拉斯姆森 Thue Ersted Rasmussen
       米拉吉·格尔比克 Miraj Grbic
       吉米·斯达 Jimmy Star
       莱克斯·艾尔 Lex Elle
       温尼·贝内特 Vinnie Bennett
       马克·克雷尼克 Mark Krenik
       杰森·斯坦森 Jason Statham

◎标  签 动作 | 飙车 | 美国 | 犯罪 | 跑车 | 2021 | 科幻 | 赛车

◎简  介

  “唐老大”多姆·托莱多(范·迪塞尔 饰)与莱蒂(米歇尔·罗德里格兹 饰)和他的儿子小布莱恩,过上了远离纷扰的平静生活。然而他们也知道,安宁之下总潜藏着危机。这一次,为了保护他所爱的人,唐老大不得不直面过去。他和伙伴们面临的是一场足以引起世界动荡的阴谋,以及一个前所未遇的一流杀手和高能车手。而这个名叫雅各布(约翰·塞纳 饰)的人,恰巧是多姆遗落在外的亲弟弟。

◎获奖情况

  第7届豆瓣电影年度榜单 (2020)
  最值得期待的外语电影(提名)
  
  第6届豆瓣电影年度榜单 (2019)
  最值得期待的外语电影(提名)
Referenced from:https://www.dytt8.net/html/gndy/dyzz/20210801/61692.html

make[1]: 进入目录“/usr/src/linux-headers-5.4.0-89-generic”
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/lexer.lex.o
HOSTCC scripts/kconfig/parser.tab.o
HOSTCC scripts/kconfig/preprocess.o
HOSTCC scripts/kconfig/symbol.o
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf --syncconfig Kconfig
make[2]: * 没有规则可制作目标“arch/x86/tools/relocs_32.c”,由“arch/x86/tools/relocs_32.o” 需求。 停止。
make[1]: * [arch/x86/Makefile:236:archscripts] 错误 2
make[1]: 离开目录“/usr/src/linux-headers-5.4.0-89-generic”
make: * [Makefile:5:all] 错误 2

解决办法:

In the make file, just change SUBDIRS=$(PWD) into M=$(shell pwd)

使用mqtts的时候,连接提示错误:

mosquitto_sub -L mqtts://124.71.233.xx:8883/ -t "command///req/#" --cert cert.pem --key key.pem --cafile ../trusted-certs.pem -q 1

Unable to connect (A TLS error occurred.).

加上调试信息打印

mosquitto_sub -L mqtts://124.71.233.xx:8883/ -t "command///req/#" --cert cert.pem --key key.pem --cafile ../trusted-certs.pem -q 1 -d

Error: Unable to load client certificate "cert.pem".
OpenSSL Error[0]: error:140AB18E:SSL routines:SSL_CTX_use_certificate:ca md too weak
Unable to connect (A TLS error occurred.).

查看openssl软件版本
openssl
OpenSSL> version
OpenSSL 1.1.1f 31 Mar 2020
OpenSSL> quit

使用openssl s_client 测试

openssl s_client -connect 124.71.233.xx:8883 -cert cert.pem -key key.pem -CAfile ../trusted-certs.pem -showcerts

error setting certificate
140341384697152:error:140AB18E:SSL routines:SSL_CTX_use_certificate:ca md too weak:../ssl/ssl_rsa.c:310:
出现同样的错误。

查看证书信息

openssl x509 -text -in cert.pem

Signature Algorithm: sha1WithRSAEncryption

众所周知,sha1算法很弱且已过时。应该就是这个原因了。
解决办法:

openssl s_client -cipher @SECLEVEL=0:ALL -connect 124.71.233.xx:8883 -cert cert.pem -key key.pem -CAfile ../trusted-certs.pem -showcerts

要确认就是sha1的问题,只需要这样就可以

openssl s_client -cipher @SECLEVEL=0:SHA1 -connect 124.71.233.62:8883 -cert cert.pem -key key.pem -CAfile ../trusted-certs.pem -showcerts

mqtt在编译openssl的时候,使用DOPENSSL_TLS_SECURITY_LEVEL=0就可以了。

还有一个修改配置文件的方法,
修改/etc/ssl/openssl.cnf文件
在文件开头加上

openssl_conf = default_conf

在文件结尾加上

[ default_conf ]

ssl_conf = ssl_sect

[ssl_sect]

system_default = ssl_default_sect

[ssl_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT:@SECLEVEL=0

验证测试:

openssl s_client  -connect 124.71.233.62:8883 -cert cert.pem -key key.pem -CAfile ../trusted-certs.pem -showcerts

CONNECTED(00000003)
...
verify return:1
这个方法来源于:https://askubuntu.com/questions/1231799/certificate-error-after-upgrade-to-20-04
原文:

I found a solution, according to the accepted answer of this question:
Ubuntu 20.04 - how to set lower SSL security level?

In particular, the openSSL configuration file /etc/ssl/openssl.cnf
shall be modified in the following way.

At the beginning, add openssl_conf = default_conf

At the end, add

[ default_conf ]

ssl_conf = ssl_sect

[ssl_sect]

system_default = ssl_default_sect

[ssl_default_sect] MinProtocol = TLSv1.2 CipherString =
DEFAULT:@SECLEVEL=0 After this modification, the certificate is
recognized without security errors.

https://www.openssl.org/docs/man1.1.0/man3/SSL_CTX_set_security_level.html

WARNING at this time setting the security level higher than 1 for
general internet use is likely to cause considerable interoperability
issues and is not recommended. This is because the SHA1 algorithm is
very widely used in certificates and will be rejected at levels higher
than 1 because it only offers 80 bits of security.

The default security level can be configured when OpenSSL is compiled
by setting -DOPENSSL_TLS_SECURITY_LEVEL=level. If not set then 1 is
used.

https://github.com/drwetter/testssl.sh/issues/1433

OpenSSL 1.1.0 introduced the ability to specify a security level:
https://github.com/openssl/openssl/blob/master/doc/man3/SSL_CTX_set_security_level.pod.
By default the security level is set to 1 unless a compile-time option
is used to set the default a different value. The security level may
also be set by the command line, e.g.,

openssl s_client -cipher @SECLEVEL=0:ALL -connect 127.0.0.1:443 At the
moment, testssl.sh does not use the @SECLEVEL=n directive, but we may
want to look into using s_client_options() to add it in some
circumstances.

视频编解码分为硬件加速以及非硬件加速。硬件加速是指通过显卡,FPGA等硬件进行视频编解码,由于硬件有专门优化,所以性能高,能耗低,非硬件加速编解码是指通过CPU进行视频编解码,性能就没那么高(虽然有相关CPU指令优化),由于视频编解码计算量很大,所以能耗也很高。在PC平台上主流的硬件加速编解码有Intel集成显卡,Nvidia显卡。

Quick Sync Video
Intel Quick Sync Video(QSV)是Intel GPU上跟视频处理有关的一系列硬件特性的称呼。

英特尔® Quick Sync Video 技术可以快速转换便携式多媒体播放器的视频,还能提供在线共享、视频编辑及视频制作功能。

看到CPU带的集成显卡支持Quick Sync Video就表示支持硬件加速的视频编解码。

比如查看Intel J1900是否支持QSV.如下
https://ark.intel.com/content/www/cn/zh/ark/products/78867/intel-celeron-processor-j1900-2m-cache-up-to-2-42-ghz.html

在不同平台上可通过不同API使用Intel GPU的硬件加速能力。目前主要由两套API:VAAPI以及libmfx。

VAAPI (视频加速API,Video Acceleration API)包含一套开源的库(LibVA) 以及API规范, 用于硬件加速下的视频编解码以及处理,只有Linux上的驱动提供支持。
libmfx。Intel Media SDK中的API规范,支持视频编解码以及媒体处理。支持Windows以及Linux。

所以,回到标题所在的问题,就知道了vaapi应该只是qsv的一种包含关系。

VAAPI驱动
VAAPI驱动属于用户态驱动,用于支持LibVA,底层是i965/1915驱动。Intel提供了两种开源的VAAPI驱动:intel-vaapi-driver以及intel-media-driver,intel-media-driver较intel-vaapi-driver新,维护更积极,所以目前更推荐使用intel-media-driver。

FFmpeg VAAPI/QSV开发环境搭建
对于VAAPI以及Intel Media SDK,如果使用原生API开发的话比较麻烦,好在FFmpeg提供了对应的插件。我们可以通过FFmpeg间接使用这两套API。在FFmpeg中VAAPI还是叫做VAAPI,但是Intel Media SDK却叫做QSV(一脸懵逼)。

FFmpeg-vaapi插件:基于VAAPI接口
FFmpeg-qsv插件:基于Intel Media SDK

FFmpeg VAAPI/QSV开发环境搭建我就不做搬运工了,大家可参考官网教程。

Linux FFmpeg VAAPI/QSV Installation Environment:https://01.org/linuxmedia/quickstart/ffmpeg-vaapi-qsv-installation-environment

查看支持的编解码功能
apt install vainfo

vainfo
libva info: VA-API version 1.7.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_7
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.7 (libva 2.6.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 20.1.1 ()
vainfo: Supported profile and entrypoints

  VAProfileMPEG2Simple            :    VAEntrypointVLD
  VAProfileMPEG2Main              :    VAEntrypointVLD
  VAProfileH264Main               :    VAEntrypointVLD
  VAProfileH264Main               :    VAEntrypointEncSliceLP
  VAProfileH264High               :    VAEntrypointVLD
  VAProfileH264High               :    VAEntrypointEncSliceLP
  VAProfileJPEGBaseline           :    VAEntrypointVLD
  VAProfileJPEGBaseline           :    VAEntrypointEncPicture
  VAProfileH264ConstrainedBaseline:    VAEntrypointVLD
  VAProfileH264ConstrainedBaseline:    VAEntrypointEncSliceLP
  VAProfileVP8Version0_3          :    VAEntrypointVLD
  VAProfileHEVCMain               :    VAEntrypointVLD
  VAProfileHEVCMain10             :    VAEntrypointVLD
  VAProfileVP9Profile0            :    VAEntrypointVLD
  VAProfileVP9Profile2            :    VAEntrypointVLD

VAEntrypointVLD 指的是显卡能够解码这个格式,VAEntrypointEncSlice 指的是显卡可以编码这个格式。

form:https://blog.jianchihu.net/intel-gpu-hw-video-codec-develop.html

在房票安置过程中,尤应注意保护拆迁安置居民的权益。应合理引导安置居民选择房票安置,避免对房票设置过短的购买时限和苛刻的购买条件。

对棚改居民以房票的方式进行安置,是近段时间以来不少城市开始实施的房地产调控举措。何为房票?棚改安置居民接受拆迁补偿时,把拆迁补偿的金额以房票的形式发放给居民,居民可以凭房票购买住房。房票并非新生事物,在前些年的棚改货币化安置中就曾出现过。今年以来,在各地积极因城施策促进房地产业良性循环和健康发展的背景下,房票安置又被多城采用。

据不完全统计,已经有20个以上城市今年以来开始实施房票安置。过去棚改更多采用实物安置或货币化安置两种办法,在此基础上探索实施的房票安置制度,如何实现棚改安置居民、地方政府以及房地产开发企业的多方共赢?

通过房票进行棚改安置,能够给居民带来一定便利。采用实物安置时,如果原地回迁,需要居民们暂时租房等待回迁房建好。出台房票安置举措的城市多是新建商品住宅库存较多的城市,居民可以购买现房拎包入住,省去租房的麻烦。房票安置可以满足被拆迁人更多差异化需求,拆迁后不一定再回到原来的位置居住。有的城市出台了较为灵活的房票补贴举措。比如,选择去库存难度更大的区域购房价格更优惠,或者说同等面值的房票可以购置面积更大的住房,再比如,越早购房享受的优惠越多,从而鼓励安置居民尽快购房等。这些举措都能够给拆迁安置居民更多更自由的选择机会。

与直接发放安置补偿款的货币化安置相比,房票安置融合了优惠鼓励政策。比如,郑州市规定采取房票安置办法的,安置居民可获得安置补偿权益金额8%的奖励以及3个月的现金过渡费。采取货币化安置的办法,一些拆迁居民可能拿到拆迁补偿款后暂缓购房,或用作他途。对于地方政府而言,推出房票安置能够鼓励拆迁居民留在商品房市场购买新的住房,有助于去库存和稳定住房消费。与此同时,货币化安置需要一次性集中给付安置居民大量安置补偿资金,而房票安置模式下,居民购房有先有后相对分散。而且,居民凭房票购房后,开发企业再与政府结算资金。因此,相对于货币化安置,房票安置能够减轻地方政府一次性集中支付的资金压力。对于房地产开发企业而言,房子卖得快了,自然有助于实现资金回流以及企业稳健经营。

房票安置的确有助于提振购房需求,实现现房库存的去化。但是,不能忘了,改善居住条件,是棚户区居民长久以来的心愿,无论以哪种模式进行安置,都应努力确保棚改居民住得进、住得好。在房票安置的过程中,尤应注意保护拆迁安置居民的权益。

首先应该明确的是,房票安置只是选项之一,不应强制居民选择。是选择实物安置,还是选择货币化安置或者房票安置,应尽量给拆迁安置居民更多选择,由他们自主决定。

更为重要的是,不应为房票设定过多限制。比如,避免出现凭房票购房只可购买一层或者顶层等特定楼层,或者只可购买限定的少数楼盘,再或者购买住房时必须同时购买车位等。还比如,不应限定持有房票的居民必须在较短的时间内尽快购房。这些情况都在过去的房票安置中在个别地区出现过。如果房票限定的购买时间太短或者限定条件太多,拆迁居民的可选范围过窄,那么可能导致安置居民好不容易盼来了改善居住条件的机会,却难以住到称心如意的房子。

因此,应合理引导安置居民选择房票安置,避免对房票设置过短的购买时限和苛刻的购买条件。对于房地产开发企业而言,需要比较及时地拿到房票结算资金,方能助其实现项目和企业的良性运转。只有这样,才能够使房票安置发挥去库存作用,促进当地房地产市场企稳以及健康发展,从而实现多方共赢。

值得关注的问题还有,从2008年开始,我国将各类棚户区改造作为城镇保障性安居工程的重要组成部分,至2018年的十年间,全国棚改累计开工3896万套,帮助1亿人“出棚进楼”。数据显示,“十三五”时期我国城镇棚户区住房改造超过2100万套。2021年,各类棚户区改造开工165万套。我国大规模的棚户区改造,特别是集中连片棚户区改造已经基本完成,棚改新开工数量已经在近年出现较为明显下降,目前进行的多为零星分散改造。当前,已经进入城市更新的新阶段,须防止大拆大建。坚持“留改拆”并举、以保留利用提升为主,在加强修缮改造的原则下,应严格控制大规模拆除。因此,在今后的棚户区改造中,确需改造的棚户区仍应继续推进拆迁改造,同时应避免为了创造更多新购房需求盲目扩大拆迁范围。

http://paper.ce.cn/pc/content/202206/29/content_256366.html

try catch nlohmann::detail::parse_error
当出现错误信息时 throwing an instance of 'nlohmann::detail::type_error' 解决办法如下:

直接上代码了。
第一种方法:

try {
std::string testStr = "const.net.cn";
mJsonObj = nlohmann::json::parse(testStr);
} catch (nlohmann::detail::parse_error &error) {
std::cout << "parse_error" << std::endl;
} catch (nlohmann::detail::exception &error) {
std::cout << "exception" << std::endl;
} catch (std::overflow_error &error) {
std::cout << "overflow_error" << std::endl;
}

第二种方法:

std::string testStr = "const.net.cn";
try {
nlohmann::json::parse(testStr.c_str());
} catch (std::exception &exception) {
std::cout << "exception" << std::endl;
} catch (std::runtime_error &error) {
std::cout << "error" << std::endl;
} catch (...) {
std::cout << "any" << std::endl;
}