Commit Graph

311 Commits

Author SHA1 Message Date
fufesou
8f8c9ddc25 Fix, windows display orders
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-11-12 00:08:16 +08:00
Dennis Ploeger
b9bd79895f fix: Fix sysinfo >=0.29.1 crashing the main view on macOS 2023-11-08 08:59:27 +01:00
RustDesk
a0337d399c
Merge pull request #6282 from basilgello/vcpkg-deps
Refactor vcpkg dependencies and get rid of thirdparty repos
2023-11-07 17:39:37 +08:00
Vasyl Gello
9f4a844c9b Fix buildscripts
* Fix FDroid build on x86
  * Fix CI build on arm
  * Rename `install_oboe` to `install_android_deps`

... because we add ndk_compat and the function installs
android-specific dependencies.

Signed-off-by: Vasyl Gello <vasek.gello@gmail.com>
2023-11-07 06:27:43 +02:00
mcfans
b522de3b56 Merge remote-tracking branch 'upstream/master'
# Conflicts:
#	Cargo.lock
#	src/server/connection.rs
2023-11-07 12:13:15 +08:00
21pages
534bfad50f opt codec
1. use src width/height to convert yuv
2. align dst yuv to avoid illegal memory access
3. init yuvfmt when new codec
4. move remote reset calls from empty conns judge to emtpy remote conns
   judge

Signed-off-by: 21pages <pages21@163.com>
2023-11-03 11:52:41 +08:00
21pages
f05f86dc80 444
Signed-off-by: 21pages <pages21@163.com>
2023-10-30 18:46:56 +08:00
mcfans
7b24835c9e Merge remote-tracking branch 'upstream/master'
# Conflicts:
#	src/server/connection.rs
2023-10-29 23:32:43 +08:00
21pages
9ce58115ab set timeout of hwcodec check to 30s
Signed-off-by: 21pages <pages21@163.com>
2023-10-23 16:12:49 +08:00
21pages
7a5bc864fa fix client side record
Signed-off-by: 21pages <pages21@163.com>
2023-10-19 09:50:55 +08:00
mcfans
22165ec1a5 feat: legacy mode android keyboard support 2023-10-19 00:16:22 +08:00
21pages
510cffb305 av1 record, set zero codec private
Signed-off-by: 21pages <pages21@163.com>
2023-10-18 19:28:12 +08:00
21pages
c61fa71a70 Revert "hide recording button if using av1"
This reverts commit c2023e8ca3.
2023-10-18 13:48:12 +08:00
mcfans
bbc241748b feat: support android keyboard input 2023-10-17 22:12:52 +08:00
dignow
013d307bcd feat, multi_flutter_ui_sessions
Signed-off-by: dignow <linlong1265@gmail.com>
2023-10-14 12:26:24 +08:00
21pages
bdb1fc2ed7 Give higher priority to AV1 over VP9 in the auto codec
Signed-off-by: 21pages <pages21@163.com>
2023-09-27 18:42:57 +08:00
dignow
e89ae475f6 fix build
Signed-off-by: dignow <linlong1265@gmail.com>
2023-08-10 14:54:29 +08:00
dignow
9476d7fdbb try fix build
Signed-off-by: dignow <linlong1265@gmail.com>
2023-08-10 14:54:29 +08:00
dignow
da16a799fa fix build
Signed-off-by: dignow <linlong1265@gmail.com>
2023-08-10 14:54:28 +08:00
dignow
d6f1abad95 tmp commit
Signed-off-by: dignow <linlong1265@gmail.com>
2023-08-10 14:54:28 +08:00
21pages
9905695699 enable keyframe interval when recording
Signed-off-by: 21pages <pages21@163.com>
2023-08-07 21:32:36 +08:00
21pages
2c619cbe41 quite if config file not found, remove HW_CODEC_CONFIG, option env LIBGL_ALWAYS_SOFTWARE=1
Signed-off-by: 21pages <pages21@163.com>
2023-07-30 12:42:23 +08:00
21pages
61a48b5367 fix IDTextEditingController extra character
Signed-off-by: 21pages <pages21@163.com>
2023-07-29 13:47:59 +08:00
21pages
0a29fa87f0 remove System::new_all in hwcodec check
Signed-off-by: 21pages <pages21@163.com>
2023-07-29 11:41:44 +08:00
21pages
029e6a015e minisize vpx/aom q_min for bitrate 200%
Signed-off-by: 21pages <pages21@163.com>
2023-07-27 18:29:46 +08:00
21pages
e70f3f2125 fix qos and add auto_adjust_fps
Signed-off-by: 21pages <pages21@163.com>
2023-07-25 15:49:50 +08:00
21pages
02456280d4 fix win cpu monitor run once
Signed-off-by: 21pages <pages21@163.com>
2023-07-24 14:54:15 +08:00
21pages
aa740f4263 remove many unwrap and enum_value_or_default
Signed-off-by: 21pages <pages21@163.com>
2023-07-23 20:00:58 +08:00
21pages
31b3c5d721 codec thread count depending on cpu condition
Signed-off-by: 21pages <pages21@163.com>
2023-07-23 20:00:52 +08:00
21pages
2133f91089 codec set quality seperately and refactor network delay
Signed-off-by: 21pages <pages21@163.com>
2023-07-23 19:54:42 +08:00
21pages
633c80d5e4 Revert "vpx use webrtc parameter"
This reverts commit d23fd902d7.
2023-07-23 19:54:42 +08:00
21pages
22ca7177a6 Revert "fix ci"
This reverts commit a0e09d3e33.
2023-07-23 19:54:42 +08:00
RustDesk
a24a7e8d0f
Merge pull request #5017 from 21pages/fix
clear hwcodec config rather than remove
2023-07-16 11:53:32 +08:00
21pages
ec34470284 clear hwcodec config rather than remove
Signed-off-by: 21pages <pages21@163.com>
2023-07-16 09:59:46 +08:00
fufesou
fa0b1436c2 try fix CI
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-07-16 09:35:11 +08:00
21pages
c2023e8ca3 hide recording button if using av1
Signed-off-by: 21pages <pages21@163.com>
2023-06-29 21:30:56 +08:00
21pages
5b1d2abb71 hwcodec stable branch
Signed-off-by: 21pages <pages21@163.com>
2023-06-29 13:37:21 +08:00
dignow
d15deabba5 better conditional compilation
Signed-off-by: dignow <linlong1265@gmail.com>
2023-06-24 21:09:45 +08:00
21pages
a0e09d3e33 fix ci
Signed-off-by: 21pages <pages21@163.com>
2023-05-23 10:41:56 +08:00
21pages
d23fd902d7 vpx use webrtc parameter
Signed-off-by: 21pages <pages21@163.com>
2023-05-23 09:42:36 +08:00
21pages
1ae2ebaa8c allow set config err for android
Signed-off-by: 21pages <pages21@163.com>
2023-05-21 17:28:43 +08:00
21pages
a11dee30ae merge vpx/aom code
Signed-off-by: 21pages <pages21@163.com>
2023-05-21 16:29:52 +08:00
21pages
99d3c47094 remove android unused VP8/VP9 Frame
Signed-off-by: 21pages <pages21@163.com>
2023-05-21 16:29:50 +08:00
21pages
e482dc3e2b aom encode/decode
Signed-off-by: 21pages <pages21@163.com>
2023-05-21 16:26:18 +08:00
21pages
a3f3bb4751 aom vcpkg binding
Signed-off-by: 21pages <pages21@163.com>
2023-05-21 16:26:16 +08:00
Lauren N. Liberda
100ea34baa
allow building scrap with pkg-config libraries
Signed-off-by: Lauren N. Liberda <lauren@selfisekai.rocks>
2023-05-20 07:29:59 +02:00
RustDesk
bc5d8ad040
Merge pull request #4421 from 21pages/hwcodec-nv12
hwcodec use nv12
2023-05-19 14:38:40 +08:00
21pages
9cce0798b6 set hw_pixfmt nv12 and wait more time for check porcess
Signed-off-by: 21pages <pages21@163.com>
2023-05-19 12:03:16 +08:00
21pages
dc3104dac4 fix andriod jni update
Signed-off-by: 21pages <pages21@163.com>
2023-05-13 12:49:35 +08:00
21pages
5738f3a949 fix android build
Signed-off-by: 21pages <pages21@163.com>
2023-05-12 14:01:56 +08:00
rustdesk
302f1c48d3 update crates, test on mac only 2023-05-11 12:04:38 +08:00
Kingtous
34314e50f7 feat: callbacks and flutter msg bridge 2023-05-04 13:18:19 +08:00
fufesou
fc50a3e49d set fmt and stride to private in ImageRgb
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-04-28 12:35:46 +08:00
fufesou
6b1645f44d set width,height,stride together with the rgba data for rendering
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-04-28 11:44:52 +08:00
Kingtous
83e63d57e1 fix: ios build 2023-04-18 18:28:12 +08:00
21pages
be2e26e758 delete RustDesk_hwcodec.toml on every check
Signed-off-by: 21pages <pages21@163.com>
2023-04-04 21:21:00 +08:00
21pages
f2aeff974c disable hwcodec if causing crash
Signed-off-by: 21pages <pages21@163.com>
2023-04-04 21:00:13 +08:00
21pages
c842650c11 vp8
Signed-off-by: 21pages <pages21@163.com>
2023-04-03 12:22:36 +08:00
RustDesk
83b7518897
Revert "vp8" 2023-04-01 10:13:39 +08:00
21pages
78748271ac vp8
Signed-off-by: 21pages <pages21@163.com>
2023-03-31 22:32:34 +08:00
fufesou
0b417ac479 start --server on gmd wayland, just for communications, no connections will be established
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-31 16:42:35 +08:00
21pages
54a809f499 set hwcodec key frame interval to max
Signed-off-by: 21pages <pages21@163.com>
2023-03-30 20:08:34 +08:00
fufesou
c845ddf510 fix build
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-28 10:52:43 +08:00
fufesou
eebddb2206 format
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-28 08:22:46 +08:00
fufesou
8af20489bd log::error
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-28 08:21:47 +08:00
fufesou
a1d1c8270f log
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-28 08:20:19 +08:00
fufesou
ee1fbb0a76 fix build
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-27 23:29:28 +08:00
fufesou
947c7dbb97 try wait hw check config subprocess
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-27 22:56:48 +08:00
rustdesk
6ad3064ef9 fix ci 2023-03-23 17:02:55 +08:00
rustdesk
b763ec3080 revert #560 for #3748 2023-03-23 14:31:50 +08:00
fufesou
de1005acb2 do not embed cursor on wayland
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-20 13:58:02 +08:00
rustdesk
61679a1072 upgrade some crates, fix scrap benchmark on mac, fix compile issue on
osx10.14
2023-03-09 17:22:14 +08:00
fufesou
37d21d8db0 remove unused logic
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-06 17:31:38 +08:00
fufesou
c751ebee4e fix build
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-06 17:31:38 +08:00
fufesou
507472e87e show one display when privacy mode is on
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-06 17:31:37 +08:00
21pages
0579ba5cfd opt benchmark code
Signed-off-by: 21pages <pages21@163.com>
2023-03-06 10:59:01 +08:00
RustDesk
239d0291d0
Merge pull request #3494 from 21pages/benchmark
fix build
2023-03-03 23:03:46 +08:00
21pages
5634b428ca fix build
Signed-off-by: 21pages <pages21@163.com>
2023-03-03 22:43:02 +08:00
RustDesk
619ae63e00
Merge pull request #3493 from 21pages/benchmark
codec benchmark
2023-03-03 22:26:39 +08:00
21pages
b4aea69bdb codec benchmark
Signed-off-by: 21pages <pages21@163.com>
2023-03-03 22:12:54 +08:00
fufesou
c0d367f7b1 fix some incorrect capture magnifier logic
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-03 21:04:52 +08:00
rustdesk
876fb26a67 fix #3424 2023-03-03 15:34:57 +08:00
rustdesk
6ec4d6d9ca fix ci 2023-03-03 14:34:47 +08:00
rustdesk
b8941c15c0 refactor DST_STRIDE_RGBA 2023-03-03 14:02:49 +08:00
RustDesk
29abda56df
Revert "Fix/macos texture stride align" 2023-03-03 13:18:34 +08:00
fufesou
c419819c0f rename all stride_align to stride
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-03 10:58:48 +08:00
fufesou
5aa97faedd Fix stride align
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-03 10:01:58 +08:00
fufesou
42c95f71f6 fix macos strid align
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-03-03 10:01:58 +08:00
21pages
18a66749a1 linux x11 resolution
Signed-off-by: 21pages <pages21@163.com>
2023-02-24 10:44:02 +08:00
fufesou
ed0338b038 fix build && default flutter_texture_render
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-02-23 17:06:53 +08:00
fufesou
173e3bcd0d debug win, without hwcodec
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-02-23 17:06:52 +08:00
fufesou
77c4a14845 flutter texture render, mid commit
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-02-23 17:06:51 +08:00
21pages
4beacf93d7 kill check-hwcodec-config process
Signed-off-by: 21pages <pages21@163.com>
2023-02-21 16:34:24 +08:00
fufesou
b733ad9379 refact register_breakdown_handler
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-02-19 10:19:28 +08:00
fufesou
74a73b7ffd add default position for portal streams
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-01-31 17:51:20 +08:00
21pages
176847c51e fix warning
Signed-off-by: 21pages <pages21@163.com>
2023-01-29 14:28:10 +08:00
fufesou
d1090fc62c ensure init cursor embedded
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-01-29 12:41:16 +08:00
fufesou
c0adc14215 misspelling
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-01-29 12:41:16 +08:00
fufesou
b84f3ba1ee init wayland to update var 'cursor embeded'
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-01-29 12:41:16 +08:00
fufesou
7e0c9e17df set cursor mode according to availible modes
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-01-29 12:41:16 +08:00
Josh Soref
3949e3162c spelling: rotation
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2023-01-09 12:59:08 -05:00
Josh Soref
33c3489a9e spelling: prefer
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2023-01-09 12:59:08 -05:00
Josh Soref
6ca852363e spelling: control
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2023-01-09 12:58:33 -05:00
Josh Soref
185ff9e91e spelling: available
Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
2023-01-09 12:58:33 -05:00
Amy Parker
84e4389943
remove unnecessary allow block
Patch #2701 (609117c: "ignore style warnings in libs/scrap") was merged,
but the RustDesk team decided to later instead changed
is_cursor_embedded to uppercase (see discussion on the PR), thus no
longer triggering the warning and no longer needing the allow block.
This was changed in (b723f84: "fix linux to mac, keyboard input"). This
patch removes the now unnecessary allowances.

Signed-off-by: Amy Parker <apark0006@student.cerritos.edu>
Cc: fufseou <shuanglongchen@yeah.net>
2023-01-05 20:32:53 -08:00
fufesou
b723f8472d fix linux to mac, keyboard input
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2023-01-05 15:00:52 +08:00
Amy Parker
f816e53c2b
ignore style warnings in libs/scrap
Constant `is_cursor_embedded` does not follow the Rust standard
stylistic convention of upper-case global variables and constants. This
causes two warnings to be thrown when compiling (tested on Arch Linux,
commit = 68fda34, Rust = 1.66.0), one each for the Wayland and X11
common modules. Since these variables are not new, their names should
not be modified; to remove the warnings, this patch allows
non-style-conforming names on these two constant declarations
specifically, suppressing the warnings. It does not affect stylistic
warnings on any other code within the project.

Signed-off-by: Amy Parker <apark0006@student.cerritos.edu>
Cc: fufesou <shuanglongchen@yeah.net>
2023-01-02 11:20:25 -08:00
fufesou
b114ebf350 fix some misspellings
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2022-12-31 21:41:16 +08:00
rustdesk
0d0957cea5 remove u128 compare 2022-12-26 17:44:29 +08:00
KG7x
71103886e6 Fix typo 2022-12-25 20:21:13 +03:00
Huabing Zhou
385a1594f3 Merge branch 'master' of github.com-rustdesk:rustdesk/rustdesk 2022-12-23 22:02:06 +08:00
Huabing Zhou
4815099482 make m1 run (used brew install llvm) 2022-12-23 22:00:05 +08:00
Sangha Lee
59a82a9fbd
downgrade gstreamer to 0.16 2022-12-22 20:42:34 +09:00
Sangha Lee
0819a3d8ea
Revert "Merge pull request #2628 from rustdesk/revert-2612-master"
This reverts commit e50882a660, reversing
changes made to 7f006102b5.
2022-12-22 18:54:27 +09:00
RustDesk
9c24117b13
Revert "Implement RGB0 pixel format " 2022-12-22 12:22:26 +08:00
Sangha Lee
3643870287
fix unsafe code 2022-12-21 18:42:22 +09:00
Sangha Lee
38f66df091
implement RGB0 #2608 2022-12-21 04:12:34 +09:00
Sangha Lee
d910e7ad96
update gstreamer 2022-12-21 03:32:42 +09:00
21pages
72594c7e0e remove hwcodec log
Signed-off-by: 21pages <pages21@163.com>
2022-12-13 21:30:08 +08:00
21pages
d08eb0441c log
Signed-off-by: 21pages <pages21@163.com>
2022-12-13 16:25:05 +08:00
21pages
e58f2186ec don't new hwcodec decoders if option disabled
Signed-off-by: 21pages <pages21@163.com>
2022-12-13 14:58:41 +08:00
21pages
2136931f80 upload record
Signed-off-by: 21pages <pages21@163.com>
2022-12-08 09:07:18 +08:00
fufesou
5877bcf2a1 fix cursor embeded value on x11
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2022-11-29 17:59:11 +08:00
fufesou
4d044ca57a wayland cursor embeded
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2022-11-29 16:36:35 +08:00
fufesou
87306a3d01 wayland filter last same frame
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2022-11-25 19:28:43 +08:00
fufesou
e31130d4f8 wayland, fix check Lock && Mod Resolution
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2022-11-25 19:28:43 +08:00
21pages
8e1545b432 portable service
Signed-off-by: 21pages <pages21@163.com>
2022-11-15 17:05:10 +08:00
fufesou
6b3c2f3beb fix android build errors and warnings
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2022-11-13 18:29:05 +08:00
fufesou
2da5401fd4 add global init and update wayland error map
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2022-10-17 21:55:26 +08:00
21pages
150057f92d fix default video save directory
Signed-off-by: 21pages <pages21@163.com>
2022-10-12 16:48:06 +08:00
21pages
e74f155cb6 fix recording start stop
Signed-off-by: 21pages <pages21@163.com>
2022-09-22 09:57:52 +08:00
21pages
eff5dd2e03 ensure first mux frame is key frame
Signed-off-by: 21pages <pages21@163.com>
2022-09-22 09:57:52 +08:00
21pages
9489877c78 video record
Signed-off-by: 21pages <pages21@163.com>
2022-09-22 09:57:52 +08:00
RustDesk
6c897687d4
Merge pull request #1553 from songwei163/weisong/fix_m1_pro_compile_scrap_error
fix m1 pro scrap compile error
2022-09-16 22:44:08 +08:00
songwei163
dd2315a518 fix m1 pro scrap compile error 2022-09-16 22:22:17 +08:00
csf
e3a5218eb1 global HW_CODEC_CONFIG 2022-09-16 19:41:04 +08:00
csf
f310251cfc feat mediacodec: Android H264/H265 decoder support 2022-09-15 20:40:29 +08:00
csf
af656f9489 add mediacodec.rs 2022-09-15 12:19:09 +08:00
21pages
42d17f9d2b fix audio no sound, add missing VideoFrame timestamp
move get_time to hbb_common

Signed-off-by: 21pages <pages21@163.com>
2022-09-13 09:10:04 +08:00
Kingtous
3b9c62b05d Merge remote-tracking branch 'rustdesk/master' into flutter_desktop
# Conflicts:
#	.github/workflows/ci.yml
#	Cargo.lock
#	Cargo.toml
#	flutter/lib/common.dart
#	flutter/lib/mobile/pages/remote_page.dart
#	flutter/lib/mobile/pages/server_page.dart
#	flutter/lib/mobile/pages/settings_page.dart
#	flutter/lib/mobile/widgets/dialog.dart
#	flutter/lib/models/model.dart
#	flutter/lib/models/server_model.dart
#	src/client.rs
#	src/common.rs
#	src/ipc.rs
#	src/mobile_ffi.rs
#	src/rendezvous_mediator.rs
#	src/ui.rs
2022-08-01 10:44:05 +08:00
fufesou
f3d10dd420 fix build without wayland feature
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2022-07-27 06:34:27 -07:00
21pages
b55fc35d83 hwcodec: fix compile error
Signed-off-by: 21pages <pages21@163.com>
2022-07-22 09:13:40 +08:00
RustDesk
eda5a94e33
Merge pull request #1013 from 21pages/hwcodec
Hwcodec: codec preference
2022-07-22 01:24:41 +08:00
rustdesk
9ee2d750f8 fix compile error 2022-07-21 22:29:26 +08:00
fufesou
d19a8fdc43 fix_capturer_trait_name_shadowing: build win
Signed-off-by: fufesou <shuanglongchen@yeah.net>
2022-07-21 20:38:15 +08:00
RustDesk
416832a1ed
Merge pull request #982 from twmsh/master
update bytes(protobuf types) mapping, from Vec<u8> to bytes:Byte
2022-07-21 18:09:14 +08:00
21pages
23deae0e52 hwcodec: remove bad MY_DECODER_STATE
When reset, the new of the decoder will be after it's drop

Signed-off-by: 21pages <pages21@163.com>
2022-07-21 10:15:01 +08:00
21pages
7aa431d349 hwcodec: codec preference
Signed-off-by: 21pages <pages21@163.com>
2022-07-21 10:14:58 +08:00
21pages
1b1f28b872 hwcodec: check when server or each client starts
and refactor hwcodec::best()

Signed-off-by: 21pages <pages21@163.com>
2022-07-21 10:10:58 +08:00
21pages
1fecd7168a hwcodec: linux compatible
Signed-off-by: 21pages <pages21@163.com>
2022-07-21 10:10:58 +08:00