所有插件信息
GET
/api/plugins最后修改时间: 1 年前
获取所有的插件信息
请求参数
无
示例代码
返回响应
成功(200)
HTTP 状态码: 200
内容格式: JSONapplication/json
数据结构
Debug
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
Edge
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
Fmp4
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
GB28181
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
HDL
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
HLS
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
Hook
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
Jessica
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
LogRotate
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
Monitor
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
PS
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
Preview
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
RTMP
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
RTSP
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
Record
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
Room
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
Snap
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
WebRTC
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
WebTransport
object
可选
Name
string
必需
Version
string
必需
Yaml
string
必需
RawConfig
object
必需
Modified
null
必需
Disabled
boolean
必需
示例
{
"Debug": {
"Name": "Debug",
"Version": "/Users/dexter/m7s4/plugin-debug/main.go",
"Yaml": "",
"RawConfig": {
"http": {
"certfile": "local.monibuca.com_bundle.pem",
"cors": true,
"idletimeout": 0,
"keyfile": "local.monibuca.com.key",
"listenaddr": ":8080",
"listenaddrtls": ":8081",
"password": "",
"readtimeout": 0,
"username": "",
"writetimeout": 0
}
},
"Modified": null,
"Disabled": false
},
"Edge": {
"Name": "Edge",
"Version": "/Users/dexter/m7s4/plugin-edge/main.go",
"Yaml": "",
"RawConfig": {
"origin": "",
"pull": {
"proxy": "",
"pullonstart": null,
"pullonsub": null,
"repull": 0
}
},
"Modified": null,
"Disabled": true
},
"Fmp4": {
"Name": "Fmp4",
"Version": "/Users/dexter/m7s4/plugin-fmp4/main.go",
"Yaml": "",
"RawConfig": {
"http": {
"certfile": "local.monibuca.com_bundle.pem",
"cors": true,
"idletimeout": 0,
"keyfile": "local.monibuca.com.key",
"listenaddr": ":8080",
"listenaddrtls": ":8081",
"password": "",
"readtimeout": 0,
"username": "",
"writetimeout": 0
},
"subscribe": {
"expireargname": "expire",
"iframeonly": false,
"internal": false,
"key": "",
"poll": 20000000,
"secretargname": "secret",
"subaudio": true,
"subaudioargname": "ats",
"subaudiotracks": [],
"subdataargname": "dts",
"subdatatracks": [],
"submode": 0,
"submodeargname": "mode",
"subvideo": true,
"subvideoargname": "vts",
"subvideotracks": [],
"waittimeout": 10000000000,
"writebuffersize": 0
}
},
"Modified": null,
"Disabled": false
},
"GB28181": {
"Name": "GB28181",
"Version": "/Users/dexter/m7s4/plugin-gb28181/main.go",
"Yaml": "invitemode: 0\n",
"RawConfig": {
"dumppath": "",
"heartbeatinterval": 60000000000,
"ignores": null,
"inviteids": "",
"invitemode": 0,
"listenaddr": "0.0.0.0",
"loglevel": "info",
"mediaip": "",
"medianetwork": "tcp",
"mediaport": 58200,
"mediaportmax": 0,
"mediaportmin": 0,
"password": "",
"port": {
"media": "tcp:58200",
"sip": "udp:5060"
},
"position": {
"autosubposition": false,
"expires": 3600000000000,
"interval": 6000000000
},
"realm": "3402000000",
"registervalidity": 60000000000,
"removebaninterval": 600000000000,
"serial": "34020000002000000001",
"sipip": "",
"sipnetwork": "udp",
"sipport": 5060,
"username": ""
},
"Modified": null,
"Disabled": false
},
"HDL": {
"Name": "HDL",
"Version": "/Users/dexter/m7s4/plugin-hdl/main.go",
"Yaml": "pull:\n pullonstart: null\n",
"RawConfig": {
"http": {
"certfile": "local.monibuca.com_bundle.pem",
"cors": true,
"idletimeout": 0,
"keyfile": "local.monibuca.com.key",
"listenaddr": ":8080",
"listenaddrtls": ":8081",
"password": "",
"readtimeout": 0,
"username": "",
"writetimeout": 0
},
"publish": {
"buffertime": 0,
"delayclosetimeout": 0,
"expireargname": "expire",
"idletimeout": 0,
"key": "",
"kickexist": true,
"pubaudio": true,
"publishtimeout": 10000000000,
"pubvideo": true,
"secretargname": "secret",
"waitclosetimeout": 0
},
"pull": {
"proxy": "",
"pullonstart": null,
"pullonsub": null,
"repull": 0
},
"subscribe": {
"expireargname": "expire",
"iframeonly": false,
"internal": false,
"key": "",
"poll": 20000000,
"secretargname": "secret",
"subaudio": true,
"subaudioargname": "ats",
"subaudiotracks": [],
"subdataargname": "dts",
"subdatatracks": [],
"submode": 0,
"submodeargname": "mode",
"subvideo": true,
"subvideoargname": "vts",
"subvideotracks": [],
"waittimeout": 10000000000,
"writebuffersize": 0
}
},
"Modified": null,
"Disabled": false
},
"HLS": {
"Name": "HLS",
"Version": "/Users/dexter/m7s4/plugin-hls/main.go",
"Yaml": "pull:\n pullonstart: null\n pullonsub:\n live/test2: https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1681290112/ei/IB82ZMXAHridsfIPoZmUwA4/ip/192.210.231.147/id/o5yDTBGrp7o.1/itag/300/source/yt_live_broadcast/requiressl/yes/ratebypass/yes/live/1/sgoap/gir%3Dyes%3Bitag%3D140/sgovp/gir%3Dyes%3Bitag%3D298/hls_chunk_host/rr4---sn-o097znsk.googlevideo.com/spc/99c5CdiJ7o5agrWEb8KbHBYY71iTEdo/vprv/1/playlist_type/LIVE/mh/y-/mm/44/mn/sn-o097znsk/ms/lva/mv/u/mvi/4/pl/26/dover/11/pacing/0/keepalive/yes/fexp/24007246/mt/1681268151/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,live,sgoap,sgovp,spc,vprv,playlist_type/sig/AOq0QJ8wRgIhAPPHdmR-HC-QxBRt9XlY1eUsqQ7p8BCPlIJu4YFRXzfQAiEA7Nzl6oaYAFSiX2pKOn4Lz7SU_ibbt-x3QkuGyLmkw9w%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRQIhAM-5uX_DEoe6sHjGYDeYe4GDHxLhQlFMFpveHluSuDHZAiAXyHQnykOsJfyJD8y6I3oBF9feGgDUmO0jT6fi7NAVag%3D%3D/playlist/index.m3u8\n live/ts: https://cbsn-us.cbsnstream.cbsnews.com/out/v1/55a8648e8f134e82a470f83d562deeca/master.m3u8\nrelaymode: 1\n",
"RawConfig": {
"defaultts": "",
"defaulttsduration": 0,
"filter": "",
"fragment": 2000000000,
"http": {
"certfile": "local.monibuca.com_bundle.pem",
"cors": true,
"idletimeout": 0,
"keyfile": "local.monibuca.com.key",
"listenaddr": ":8080",
"listenaddrtls": ":8081",
"password": "",
"readtimeout": 0,
"username": "",
"writetimeout": 0
},
"path": "",
"publish": {
"buffertime": 0,
"delayclosetimeout": 0,
"expireargname": "expire",
"idletimeout": 0,
"key": "",
"kickexist": true,
"pubaudio": true,
"publishtimeout": 10000000000,
"pubvideo": true,
"secretargname": "secret",
"waitclosetimeout": 0
},
"pull": {
"proxy": "",
"pullonstart": null,
"pullonsub": {
"live/test2": "https://manifest.googlevideo.com/api/manifest/hls_playlist/expire/1681290112/ei/IB82ZMXAHridsfIPoZmUwA4/ip/192.210.231.147/id/o5yDTBGrp7o.1/itag/300/source/yt_live_broadcast/requiressl/yes/ratebypass/yes/live/1/sgoap/gir%3Dyes%3Bitag%3D140/sgovp/gir%3Dyes%3Bitag%3D298/hls_chunk_host/rr4---sn-o097znsk.googlevideo.com/spc/99c5CdiJ7o5agrWEb8KbHBYY71iTEdo/vprv/1/playlist_type/LIVE/mh/y-/mm/44/mn/sn-o097znsk/ms/lva/mv/u/mvi/4/pl/26/dover/11/pacing/0/keepalive/yes/fexp/24007246/mt/1681268151/sparams/expire,ei,ip,id,itag,source,requiressl,ratebypass,live,sgoap,sgovp,spc,vprv,playlist_type/sig/AOq0QJ8wRgIhAPPHdmR-HC-QxBRt9XlY1eUsqQ7p8BCPlIJu4YFRXzfQAiEA7Nzl6oaYAFSiX2pKOn4Lz7SU_ibbt-x3QkuGyLmkw9w%3D/lsparams/hls_chunk_host,mh,mm,mn,ms,mv,mvi,pl/lsig/AG3C_xAwRQIhAM-5uX_DEoe6sHjGYDeYe4GDHxLhQlFMFpveHluSuDHZAiAXyHQnykOsJfyJD8y6I3oBF9feGgDUmO0jT6fi7NAVag%3D%3D/playlist/index.m3u8",
"live/ts": "https://cbsn-us.cbsnstream.cbsnews.com/out/v1/55a8648e8f134e82a470f83d562deeca/master.m3u8"
},
"repull": 0
},
"relaymode": 1,
"subscribe": {
"expireargname": "expire",
"iframeonly": false,
"internal": true,
"key": "",
"poll": 20000000,
"secretargname": "secret",
"subaudio": true,
"subaudioargname": "ats",
"subaudiotracks": [],
"subdataargname": "dts",
"subdatatracks": [],
"submode": 0,
"submodeargname": "mode",
"subvideo": true,
"subvideoargname": "vts",
"subvideotracks": [],
"waittimeout": 10000000000,
"writebuffersize": 0
},
"window": 3
},
"Modified": null,
"Disabled": false
},
"Hook": {
"Name": "Hook",
"Version": "/Users/dexter/m7s4/plugin-hook/main.go",
"Yaml": "",
"RawConfig": {
"baseurl": "",
"extra": null,
"header": null,
"keepalive": 0,
"requestlist": null,
"retrytimes": 3,
"urllist": null
},
"Modified": null,
"Disabled": false
},
"Jessica": {
"Name": "Jessica",
"Version": "/Users/dexter/m7s4/plugin-jessica/main.go",
"Yaml": "",
"RawConfig": {
"http": {
"certfile": "local.monibuca.com_bundle.pem",
"cors": true,
"idletimeout": 0,
"keyfile": "local.monibuca.com.key",
"listenaddr": ":8080",
"listenaddrtls": ":8081",
"password": "",
"readtimeout": 0,
"username": "",
"writetimeout": 0
},
"subscribe": {
"expireargname": "expire",
"iframeonly": false,
"internal": false,
"key": "",
"poll": 20000000,
"secretargname": "secret",
"subaudio": true,
"subaudioargname": "ats",
"subaudiotracks": [],
"subdataargname": "dts",
"subdatatracks": [],
"submode": 0,
"submodeargname": "mode",
"subvideo": true,
"subvideoargname": "vts",
"subvideotracks": [],
"waittimeout": 10000000000,
"writebuffersize": 0
}
},
"Modified": null,
"Disabled": false
},
"LogRotate": {
"Name": "LogRotate",
"Version": "/Users/dexter/m7s4/plugin-logrotate/main.go",
"Yaml": "",
"RawConfig": {
"days": 1,
"formatter": "2006-01-02T15",
"path": "./logs",
"size": 0
},
"Modified": null,
"Disabled": false
},
"Monitor": {
"Name": "Monitor",
"Version": "/Users/dexter/m7s4/plugin-monitor/main.go",
"Yaml": "enable: false\n",
"RawConfig": {
"enable": false,
"subscribe": {
"internal": true
}
},
"Modified": null,
"Disabled": true
},
"PS": {
"Name": "PS",
"Version": "/Users/dexter/m7s4/plugin-ps/main.go",
"Yaml": "relaymode: 2\n",
"RawConfig": {
"http": {
"certfile": "local.monibuca.com_bundle.pem",
"cors": true,
"idletimeout": 0,
"keyfile": "local.monibuca.com.key",
"listenaddr": ":8080",
"listenaddrtls": ":8081",
"password": "",
"readtimeout": 0,
"username": "",
"writetimeout": 0
},
"publish": {
"buffertime": 0,
"delayclosetimeout": 0,
"expireargname": "expire",
"idletimeout": 0,
"key": "",
"kickexist": true,
"pubaudio": true,
"publishtimeout": 10000000000,
"pubvideo": true,
"secretargname": "secret",
"waitclosetimeout": 0
},
"relaymode": 2,
"subscribe": {
"expireargname": "expire",
"iframeonly": false,
"internal": false,
"key": "",
"poll": 20000000,
"secretargname": "secret",
"subaudio": true,
"subaudioargname": "ats",
"subaudiotracks": [],
"subdataargname": "dts",
"subdatatracks": [],
"submode": 0,
"submodeargname": "mode",
"subvideo": true,
"subvideoargname": "vts",
"subvideotracks": [],
"waittimeout": 10000000000,
"writebuffersize": 0
}
},
"Modified": null,
"Disabled": false
},
"Preview": {
"Name": "Preview",
"Version": "/Users/dexter/m7s4/plugin-preview/main.go",
"Yaml": "",
"RawConfig": {},
"Modified": null,
"Disabled": false
},
"RTMP": {
"Name": "RTMP",
"Version": "/Users/dexter/m7s4/plugin-rtmp/main.go",
"Yaml": "publish: null\npush:\n pushlist: null\n",
"RawConfig": {
"chunksize": 65536,
"keepalive": false,
"publish": {
"buffertime": 0,
"delayclosetimeout": 0,
"expireargname": "expire",
"idletimeout": 0,
"key": "",
"kickexist": false,
"pubaudio": true,
"publishtimeout": 10000000000,
"pubvideo": true,
"secretargname": "secret",
"waitclosetimeout": 0
},
"pull": {
"proxy": "",
"pullonstart": null,
"pullonsub": null,
"repull": 0
},
"push": {
"proxy": "",
"pushlist": null,
"repush": 0
},
"subscribe": {
"expireargname": "expire",
"iframeonly": false,
"internal": false,
"key": "",
"poll": 20000000,
"secretargname": "secret",
"subaudio": true,
"subaudioargname": "ats",
"subaudiotracks": [],
"subdataargname": "dts",
"subdatatracks": [],
"submode": 0,
"submodeargname": "mode",
"subvideo": true,
"subvideoargname": "vts",
"subvideotracks": [],
"waittimeout": 10000000000,
"writebuffersize": 0
},
"tcp": {
"listenaddr": ":1935",
"listennum": 0
}
},
"Modified": null,
"Disabled": false
},
"RTSP": {
"Name": "RTSP",
"Version": "/Users/dexter/m7s4/plugin-rtsp/main.go",
"Yaml": "pull:\n pullonstart: null\n pullonsub:\n rtsp/100: rtsp://admin:rhy08917@192.168.0.100/cam/realmonitor?channel=1&subtype=0\n rtsp/101: rtsp://admin:rhy08917@192.168.0.101/cam/realmonitor?channel=1&subtype=0\npullprotocol: tcp\n",
"RawConfig": {
"listenaddr": ":554",
"map": {},
"publish": {
"buffertime": 0,
"delayclosetimeout": 0,
"expireargname": "expire",
"idletimeout": 0,
"key": "",
"kickexist": true,
"pubaudio": true,
"publishtimeout": 10000000000,
"pubvideo": true,
"secretargname": "secret",
"waitclosetimeout": 0
},
"pull": {
"proxy": "",
"pullonstart": null,
"pullonsub": {
"rtsp/100": "rtsp://admin:rhy08917@192.168.0.100/cam/realmonitor?channel=1&subtype=0",
"rtsp/101": "rtsp://admin:rhy08917@192.168.0.101/cam/realmonitor?channel=1&subtype=0"
},
"repull": 0
},
"pullprotocol": "tcp",
"push": {
"proxy": "",
"pushlist": null,
"repush": 0
},
"readbuffercount": 2048,
"rtcpaddr": ":8001",
"subscribe": {
"expireargname": "expire",
"iframeonly": false,
"internal": false,
"key": "",
"poll": 20000000,
"secretargname": "secret",
"subaudio": true,
"subaudioargname": "ats",
"subaudiotracks": [],
"subdataargname": "dts",
"subdatatracks": [],
"submode": 0,
"submodeargname": "mode",
"subvideo": true,
"subvideoargname": "vts",
"subvideotracks": [],
"waittimeout": 10000000000,
"writebuffersize": 0
},
"udpaddr": ":8000",
"writebuffercount": 2048
},
"Modified": null,
"Disabled": false
},
"Record": {
"Name": "Record",
"Version": "/Users/dexter/m7s4/plugin-record/main.go",
"Yaml": "flv:\n fragment: 10s\nmp4:\n fragment: 10s\nrawaudio:\n autorecord: true\n fragment: 10s\n",
"RawConfig": {
"flv": {
"autorecord": false,
"ext": ".flv",
"filter": "",
"fragment": 10000000000,
"path": "record/flv"
},
"hls": {
"autorecord": false,
"ext": ".m3u8",
"filter": "",
"fragment": 0,
"path": "record/hls"
},
"mp4": {
"autorecord": false,
"ext": ".mp4",
"filter": "",
"fragment": 10000000000,
"path": "record/mp4"
},
"raw": {
"autorecord": false,
"ext": ".",
"filter": "",
"fragment": 0,
"path": "record/raw"
},
"rawaudio": {
"autorecord": true,
"ext": ".",
"filter": "",
"fragment": 10000000000,
"path": "record/raw"
},
"subscribe": {
"expireargname": "expire",
"iframeonly": false,
"internal": true,
"key": "",
"poll": 20000000,
"secretargname": "secret",
"subaudio": true,
"subaudioargname": "ats",
"subaudiotracks": [],
"subdataargname": "dts",
"subdatatracks": [],
"submode": 1,
"submodeargname": "mode",
"subvideo": true,
"subvideoargname": "vts",
"subvideotracks": [],
"waittimeout": 10000000000,
"writebuffersize": 0
}
},
"Modified": null,
"Disabled": false
},
"Room": {
"Name": "Room",
"Version": "/Users/dexter/m7s4/plugin-room/main.go",
"Yaml": "",
"RawConfig": {
"appname": "room",
"http": {
"certfile": "local.monibuca.com_bundle.pem",
"cors": true,
"idletimeout": 0,
"keyfile": "local.monibuca.com.key",
"listenaddr": ":8080",
"listenaddrtls": ":8081",
"password": "",
"readtimeout": 0,
"username": "",
"writetimeout": 0
},
"private": null,
"size": 20,
"subscribe": {
"expireargname": "expire",
"iframeonly": false,
"internal": false,
"key": "",
"poll": 20000000,
"secretargname": "secret",
"subaudio": false,
"subaudioargname": "ats",
"subaudiotracks": [],
"subdataargname": "dts",
"subdatatracks": [],
"submode": 0,
"submodeargname": "mode",
"subvideo": false,
"subvideoargname": "vts",
"subvideotracks": [],
"waittimeout": 10000000000,
"writebuffersize": 0
},
"verify": {
"header": null,
"method": "",
"url": ""
}
},
"Modified": null,
"Disabled": false
},
"Snap": {
"Name": "Snap",
"Version": "/Users/dexter/m7s4/plugin-snap/main.go",
"Yaml": "",
"RawConfig": {
"ffmpeg": "ffmpeg",
"filter": "",
"http": {
"certfile": "local.monibuca.com_bundle.pem",
"cors": true,
"idletimeout": 0,
"keyfile": "local.monibuca.com.key",
"listenaddr": ":8080",
"listenaddrtls": ":8081",
"password": "",
"readtimeout": 0,
"username": "",
"writetimeout": 0
},
"path": "",
"subscribe": {
"expireargname": "expire",
"iframeonly": true,
"internal": true,
"key": "",
"poll": 20000000,
"secretargname": "secret",
"subaudio": false,
"subaudioargname": "ats",
"subaudiotracks": [],
"subdataargname": "dts",
"subdatatracks": [],
"submode": 0,
"submodeargname": "mode",
"subvideo": true,
"subvideoargname": "vts",
"subvideotracks": [],
"waittimeout": 10000000000,
"writebuffersize": 0
}
},
"Modified": null,
"Disabled": false
},
"WebRTC": {
"Name": "WebRTC",
"Version": "/Users/dexter/m7s4/plugin-webrtc/main.go",
"Yaml": "port: tcp:50000\n",
"RawConfig": {
"iceservers": null,
"pli": 2000000000,
"port": "tcp:50000",
"publicip": null,
"publish": {
"buffertime": 0,
"delayclosetimeout": 0,
"expireargname": "expire",
"idletimeout": 0,
"key": "",
"kickexist": true,
"pubaudio": true,
"publishtimeout": 10000000000,
"pubvideo": true,
"secretargname": "secret",
"waitclosetimeout": 0
},
"subscribe": {
"expireargname": "expire",
"iframeonly": false,
"internal": false,
"key": "",
"poll": 20000000,
"secretargname": "secret",
"subaudio": true,
"subaudioargname": "ats",
"subaudiotracks": [],
"subdataargname": "dts",
"subdatatracks": [],
"submode": 0,
"submodeargname": "mode",
"subvideo": true,
"subvideoargname": "vts",
"subvideotracks": [],
"waittimeout": 10000000000,
"writebuffersize": 0
}
},
"Modified": null,
"Disabled": false
},
"WebTransport": {
"Name": "WebTransport",
"Version": "/Users/dexter/m7s4/plugin-webtransport/main.go",
"Yaml": "",
"RawConfig": {
"certfile": "local.monibuca.com_bundle.pem",
"keyfile": "local.monibuca.com.key",
"listenaddr": ":4433"
},
"Modified": null,
"Disabled": false
}
}
最后修改时间: 1 年前