本文介绍了Android的本地RTSP服务器(恶搞),PVPlayer关闭TCP套接字之后描述的回复发送的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图欺骗了Android播放器。
我要的MediaPlayer(我使用的VideoView包装)连接到本地主机,这样我可以回复到它的RTSP请求。
当底层视频系统是视龙软件类型(VOME),但是任何设备,它使用PacketView系统(PVPlayer)后,我发送回复到DESCRIBE请求/挑战关闭TCP连接的应用程序工作正常。

我知道的一个事实的答复不是问题。当我把确切的code(产生同样的回复)我用它来模仿RTSP服务器,并把它变成一个标准的(无机器人库)JAR和PC上运行了Android可以连接到它和RTSP会话那张完美无瑕。那么Android是寻找RTP某些端口上(这是我想达到的状态)。

我试过:
本地主机
127.0.0.1
在127.0.0.0/8其他IP

如上所述,该连接正被提出,但在TCP套接字DESCRIBE答复后关闭。

我唯一的猜测是PVPlayer是(无论何种原因)阻止使用本地RTSP服务器(检查,以确保那里的回复来了来自的确远程)。

非常感谢您的宝贵时间。

布拉登

输出:

  11-01 17:03:49.096:VERBOSE / PVPlayer(1085):PVPlayer构造
11-01 17:03:49.096:VERBOSE / PVPlayer(1085):构建PlayerDriver
11-01 17:03:49.096:VERBOSE / PlayerDriver(1085):构造
11-01 17:03:49.104:VERBOSE / PlayerDriver(1085)的OpenCore硬件模块加载
11-01 17:03:49.104:VERBOSE / PlayerDriver(1085):开始播放线程
11-01 17:03:49.127:VERBOSE / PlayerDriver(1085):startPlayerThread
11-01 17:03:49.127:VERBOSE / PlayerDriver(1085):InitializeForThread
11-01 17:03:49.127:VERBOSE / PlayerDriver(1085):OMX_MasterInit
11-01 17:03:49.127:DEBUG / omx_interface(1085):TIOMXInterface:创建界面
11-01 17:03:49.127:DEBUG / omx_interface(1085):调用的dlopen上OMX_CORE_LIBRARY(libOMX_Core.so)
11-01 17:03:49.127:DEBUG / omx_interface(1085):dlopen的成功(libOMX_Core.so)
11-01 17:03:49.127:DEBUG / omx_interface(1085):TIOMXInterface:图书馆查找成功
11-01 17:03:49.135:DEBUG / TIOMX_CORE(1085):初始化数= 1
11-01 17:03:49.135:VERBOSE / PlayerDriver(1085):OsclScheduler ::初始化
11-01 17:03:49.135:VERBOSE / PlayerDriver(1085)的createPlayer
11-01 17:03:49.151:DEBUG /(1085):进入PVGetInterface
11-01 17:03:49.151:DEBUG /(1085):输入实例
11-01 17:03:49.151:DEBUG /(1085):进入SharedLibraryLookup
11-01 17:03:49.151:DEBUG /(1085):进入RegisterAllRecognizers
11-01 17:03:49.159:VERBOSE / PlayerDriver(1085):AddToScheduler
11-01 17:03:49.159:VERBOSE / PlayerDriver(1085):PendForExec
11-01 17:03:49.159:VERBOSE / PlayerDriver(1085):OsclActiveScheduler ::当前
11-01 17:03:49.159:VERBOSE / PlayerDriver(1085):StartScheduler
11-01 17:03:49.159:VERBOSE / PVPlayer(1085):送PLAYER_SETUP
11-01 17:03:49.159:VERBOSE / PlayerDriver(1085):发送机code:2
11-01 17:03:49.159:VERBOSE / PlayerDriver(1085):CommandCompleted
11-01 17:03:49.159:VERBOSE / PlayerDriver(1085):完成命令PLAYER_SETUP状态= PVMFSuccess
11-01 17:03:49.159:VERBOSE / PVPlayer(1085)的setDataSource(RTSP://本地主机:5554 /sample.mp4)
11-01 17:03:49.166:VERBOSE / PVPlayer(1085):setVideoSurface(0x17f2a0)
11-01 17:03:49.166:VERBOSE / PVPlayer(1085):setVideoSurface(0x17f2d8)
11-01 17:03:49.166:VERBOSE / PVPlayer(1085):prepareAsync
11-01 17:03:49.166:VERBOSE / PVPlayer(1085):数据源=的rtsp://本地主机:5554 /sample.mp4
11-01 17:03:49.174:VERBOSE / PlayerDriver(1085):发送机code:3
11-01 17:03:49.174:VERBOSE / PlayerDriver(1085):handleSetDataSource
11-01 17:03:49.174:VERBOSE / PlayerDriver(1085):handleSetDataSource-延长扫描
11-01 17:03:49.215:DEBUG / KeyguardViewMediator(1210):setHidden假
11-01 17:03:49.229:VERBOSE / PlayerDriver(1085):CommandCompleted
11-01 17:03:49.237:VERBOSE / PlayerDriver(1085):完成命令PLAYER_SET_DATA_SOURCE状态= PVMFSuccess
11-01 17:03:49.237:VERBOSE / PVPlayer(1085):run_init S = 0,取消= 0
11-01 17:03:49.237:VERBOSE / PlayerDriver(1085):发送机code:6
11-01 17:03:49.237:VERBOSE / PlayerDriver(1085):发行字符串是2.1 UPDATE1 LEN 11
11-01 17:03:49.237:DEBUG / KeyguardViewMediator(1210):setHidden假
11-01 17:03:49.252:信息/全球(4253):在BufferedReader类的构造函数使用默认的缓冲区大小。它会更好,如果需要一个8K-字符缓冲区是明确的。
11-01 17:03:49.252:信息/ braden_nio(4253):spoofaway开始...
11-01 17:03:49.252:信息/的System.out(4253):OPTIONS rtsp://形式本地主机:5554 / sample.mp4 RTSP / 1.0
11-01 17:03:49.252:信息/的System.out(4253)的Cseq:0
11-01 17:03:49.252:信息/的System.out(4253):用户代理:PVPlayer CORE / 6.506.4.1的OpenCore / 2.02(的Linux,Android 2.1系统,UPDATE1)
11-01 17:03:49.252:信息/的System.out(4253):ClientChallenge:9e26d33f2984236010ef6253fb1887f7
11-01 17:03:49.252:信息/的System.out(4253):PlayerStarttime:28/03/2003:22:50:23 00:00]
11-01 17:03:49.252:信息/的System.out(4253):CompanyID:KnKV4M4I / B2FjJ1TToLycw ==
11-01 17:03:49.252:信息/的System.out(4253):GUID:00000000-0000-0000-0000-000000000000
11-01 17:03:49.252:信息/的System.out(4253):
11-01 17:03:49.252:信息/的System.out(4253):Loooop
11-01 17:03:49.252:信息/的System.out(4253):描述RTSP://本地主机:5554 / sample.mp4 RTSP / 1.0
11-01 17:03:49.252:信息/的System.out(4253)的Cseq:1
11-01 17:03:49.252:信息/的System.out(4253):用户代理:PVPlayer CORE / 6.506.4.1的OpenCore / 2.02(的Linux,Android 2.1系统,UPDATE1)
11-01 17:03:49.252:信息/的System.out(4253):接受:应用/ SDP
11-01 17:03:49.252:信息/的System.out(4253):接受编码:
11-01 17:03:49.260:信息/的System.out(4253):
11-01 17:03:49.260:信息/的System.out(4253):描述发送:RTSP / 1.0 200 OK
11-01 17:03:49.260:信息/的System.out(4253):内容基地:RTSP://本地主机:5554 / sample.mp4 /
11-01 17:03:49.260:信息/的System.out(4253):日期:星期一,2011年10月31日十五时20分44秒EDT
11-01 17:03:49.260:信息/的System.out(4253):内容长度:577
11-01 17:03:49.260:信息/的System.out(4253):会话:1429213185;超时= 60
11-01 17:03:49.260:信息/的System.out(4253):截止日期:星期一,2011年10月31日15时二十分44秒EDT
11-01 17:03:49.260:信息/的System.out(4253)的Cseq:1
11-01 17:03:49.284:信息/的System.out(4253):内容类型:应用/ SDP
11-01 17:03:49.284:信息/的System.out(4253):服务器:Wowza媒体服务器2.2.4 build27452
11-01 17:03:49.284:信息/的System.out(4253):缓存控制:无缓存
11-01 17:03:49.284:信息/的System.out(4253):
11-01 17:03:49.284:信息/的System.out(4253):V = 0
11-01 17:03:49.284:信息/的System.out(4253):O = - 1429213185 1429213185 IN IP4 127.0.0.1
11-01 17:03:49.284:信息/的System.out(4253):S = WowzaMediaServer
11-01 17:03:49.284:信息/的System.out(4253):c = IN IP4 0.0.0.0
11-01 17:03:49.284:信息/的System.out(4253):T = 0 0
11-01 17:03:49.284:信息/的System.out(4253):A = sdplang:恩
11-01 17:03:49.284:信息/的System.out(4253):A =范围:NPT = 0〜596.458
11-01 17:03:49.284:信息/的System.out(4253):A =控制:*
11-01 17:03:49.284:信息/的System.out(4253):M = 0音频RTP / AVP 96
11-01 17:03:49.284:信息/的System.out(4253):A = rtpmap:96 MPEG4-通用/二分之四万八千
11-01 17:03:49.284:信息/的System.out(4253):A = FMTP:96用户级别-ID = 1;模式= AAC-HBR; sizelength = 13; indexlength = 3; indexdeltalength = 3;配置= 1190
11-01 17:03:49.284:信息/的System.out(4253):A =控制:的TrackID = 1
11-01 17:03:49.284:信息/的System.out(4253):M = 0的视频RTP / AVP 97
11-01 17:03:49.284:信息/的System.out(4253):A = rtpmap:97 H264 / 90000
11-01 17:03:49.284:信息/的System.out(4253):A = FMTP:97 packetization-mode=1;profile-level-id=42C01E;sprop-parameter-sets=Z0LAHpZiA2P8vCAAAAMAIAAABgHixck=,aMuMsg==
11-01 17:03:49.284:信息/的System.out(4253):A = CLI preCT:0,0,240,424
11-01 17:03:49.284:信息/的System.out(4253):一个框架尺寸= 97 424-240
11-01 17:03:49.284:信息/的System.out(4253):A =帧率:24.0
11-01 17:03:49.284:信息/的System.out(4253):A =控制:的TrackID = 2
11-01 17:03:49.284:信息/的System.out(4253):Loooop
11-01 17:03:49.291:VERBOSE / PlayerDriver(1085):HandleInformationalEvent:PVMFInfoErrorHandlingStart
11-01 17:03:49.291:VERBOSE / PlayerDriver(1085):HandleInformationalEvent:类型= 26未处理
11-01 17:03:49.291:WARN / MediaPlayer的(4253):信息/警告(1,26)
11-01 17:03:49.291:信息/ MediaPlayer的(4253):信息(1,26)
11-01 17:03:49.323:VERBOSE / PlayerDriver(1085):CommandCompleted
11-01 17:03:49.323:VERBOSE / PlayerDriver(1085):完成命令PLAYER_INIT状态= PVMFFailure
11-01 17:03:49.323:ERROR / PlayerDriver(1085):命令PLAYER_INIT完成,错误或信息PVMFFailure
11-01 17:03:49.323:ERROR / MediaPlayer的(4253):错误(1,-1)
11-01 17:03:49.323:ERROR / MediaPlayer的(4253):错误(1,-1)
11-01 17:03:49.323:DEBUG / VideoView(4253):错误:1,-1
11-01 17:03:49.354:VERBOSE / PVPlayer(1085):run_set_video_surface S = -2147483648,取消= 0
11-01 17:03:49.354:VERBOSE / PlayerDriver(1085):HandleInformationalEvent:PVMFInfoErrorHandlingComplete
11-01 17:03:49.354:WARN / PlayerDriver(1085):PVMFInfoErrorHandlingComplete
11-01 17:03:49.401:DEBUG / KeyguardViewMediator(1210):setHidden假


解决方案

这些设备做了一个双形容(我称之为)。他们做一些RTSP请求(他们期望的答复),则终止TCP连接,打开一个又一个,并再次作出同样的要求,除了所有的方式去发挥。我不知道为什么在地球上,他们做到这一点。显然,解决方案是只是接受以螺纹方式从Android的MediaPlayer(stagefright /不管)连接。例如:

 ,而(真){
    插座=的ServerSocket.accept();
    线程MyThread的=新ThreadImplementation(插座);
    mythread.start();
}

I'm trying to "spoof" the android player.I want MediaPlayer (I'm using the VideoView wrapper) to connect to localhost so that I may reply to its RTSP requests.The application works fine when the underlying video system is the VisualOn type (VOME) however any device which uses the PacketView system (PVPlayer) the TCP connection is closed after I send the reply to the DESCRIBE request/challenge.

I know for a fact the reply is not the issue. When I take the exact code (generating the same replies) I use to mimic an RTSP server and make it into a standard (no android libraries) JAR and run it on a PC the android can connect to it and the RTSP conversation goes flawless. The android is then looking for RTP on certain ports (which is the state I am trying to achieve).

I've tried:localhost127.0.0.1other IPs in 127.0.0.0/8

As above, the connection is being made, but the TCP socket is closed after DESCRIBE reply.

The only guess I have is that PVPlayer is (for whatever reason) blocking the use of a local RTSP server (checking to make sure where the reply is coming from is indeed remote).

Thank you very much for your time.

Braden

Output:

11-01 17:03:49.096: VERBOSE/PVPlayer(1085): PVPlayer constructor
11-01 17:03:49.096: VERBOSE/PVPlayer(1085): construct PlayerDriver
11-01 17:03:49.096: VERBOSE/PlayerDriver(1085): constructor
11-01 17:03:49.104: VERBOSE/PlayerDriver(1085): OpenCore hardware module loaded
11-01 17:03:49.104: VERBOSE/PlayerDriver(1085): start player thread
11-01 17:03:49.127: VERBOSE/PlayerDriver(1085): startPlayerThread
11-01 17:03:49.127: VERBOSE/PlayerDriver(1085): InitializeForThread
11-01 17:03:49.127: VERBOSE/PlayerDriver(1085): OMX_MasterInit
11-01 17:03:49.127: DEBUG/omx_interface(1085): TIOMXInterface: creating interface
11-01 17:03:49.127: DEBUG/omx_interface(1085): Calling DLOPEN on OMX_CORE_LIBRARY (libOMX_Core.so)
11-01 17:03:49.127: DEBUG/omx_interface(1085): DLOPEN SUCCEEDED (libOMX_Core.so)
11-01 17:03:49.127: DEBUG/omx_interface(1085): TIOMXInterface: library lookup success
11-01 17:03:49.135: DEBUG/TIOMX_CORE(1085): init count = 1
11-01 17:03:49.135: VERBOSE/PlayerDriver(1085): OsclScheduler::Init
11-01 17:03:49.135: VERBOSE/PlayerDriver(1085): CreatePlayer
11-01 17:03:49.151: DEBUG/(1085): enter PVGetInterface
11-01 17:03:49.151: DEBUG/(1085): enter Instance
11-01 17:03:49.151: DEBUG/(1085): enter SharedLibraryLookup
11-01 17:03:49.151: DEBUG/(1085): enter RegisterAllRecognizers
11-01 17:03:49.159: VERBOSE/PlayerDriver(1085): AddToScheduler
11-01 17:03:49.159: VERBOSE/PlayerDriver(1085): PendForExec
11-01 17:03:49.159: VERBOSE/PlayerDriver(1085): OsclActiveScheduler::Current
11-01 17:03:49.159: VERBOSE/PlayerDriver(1085): StartScheduler
11-01 17:03:49.159: VERBOSE/PVPlayer(1085): send PLAYER_SETUP
11-01 17:03:49.159: VERBOSE/PlayerDriver(1085): Send player code: 2
11-01 17:03:49.159: VERBOSE/PlayerDriver(1085): CommandCompleted
11-01 17:03:49.159: VERBOSE/PlayerDriver(1085): Completed command PLAYER_SETUP     status=PVMFSuccess
11-01 17:03:49.159: VERBOSE/PVPlayer(1085): setDataSource(rtsp://localhost:5554        /sample.mp4)
11-01 17:03:49.166: VERBOSE/PVPlayer(1085): setVideoSurface(0x17f2a0)
11-01 17:03:49.166: VERBOSE/PVPlayer(1085): setVideoSurface(0x17f2d8)
11-01 17:03:49.166: VERBOSE/PVPlayer(1085): prepareAsync
11-01 17:03:49.166: VERBOSE/PVPlayer(1085):   data source = rtsp://localhost:5554    /sample.mp4
11-01 17:03:49.174: VERBOSE/PlayerDriver(1085): Send player code: 3
11-01 17:03:49.174: VERBOSE/PlayerDriver(1085): handleSetDataSource
11-01 17:03:49.174: VERBOSE/PlayerDriver(1085): handleSetDataSource- scanning for     extension
11-01 17:03:49.215: DEBUG/KeyguardViewMediator(1210): setHidden false
11-01 17:03:49.229: VERBOSE/PlayerDriver(1085): CommandCompleted
11-01 17:03:49.237: VERBOSE/PlayerDriver(1085): Completed command     PLAYER_SET_DATA_SOURCE status=PVMFSuccess
11-01 17:03:49.237: VERBOSE/PVPlayer(1085): run_init s=0, cancelled=0
11-01 17:03:49.237: VERBOSE/PlayerDriver(1085): Send player code: 6
11-01 17:03:49.237: VERBOSE/PlayerDriver(1085): release string is 2.1-update1 len 11
11-01 17:03:49.237: DEBUG/KeyguardViewMediator(1210): setHidden false
11-01 17:03:49.252: INFO/global(4253): Default buffer size used in BufferedReader     constructor. It would be better to be explicit if an 8k-char buffer is required.
11-01 17:03:49.252: INFO/braden_nio(4253): spoofaway started...
11-01 17:03:49.252: INFO/System.out(4253): OPTIONS rtsp://localhost:5554/sample.mp4     RTSP/1.0
11-01 17:03:49.252: INFO/System.out(4253): CSeq: 0
11-01 17:03:49.252: INFO/System.out(4253): User-Agent: PVPlayer CORE/6.506.4.1     OpenCORE/2.02 (Linux;Android 2.1-update1)
11-01 17:03:49.252: INFO/System.out(4253): ClientChallenge: 9e26d33f2984236010ef6253fb1887f7
11-01 17:03:49.252: INFO/System.out(4253): PlayerStarttime: [28/03/2003:22:50:23 00:00]
11-01 17:03:49.252: INFO/System.out(4253): CompanyID: KnKV4M4I/B2FjJ1TToLycw==
11-01 17:03:49.252: INFO/System.out(4253): GUID: 00000000-0000-0000-0000-000000000000
11-01 17:03:49.252: INFO/System.out(4253): 
11-01 17:03:49.252: INFO/System.out(4253): Loooop
11-01 17:03:49.252: INFO/System.out(4253): DESCRIBE rtsp://localhost:5554/sample.mp4     RTSP/1.0
11-01 17:03:49.252: INFO/System.out(4253): CSeq: 1
11-01 17:03:49.252: INFO/System.out(4253): User-Agent: PVPlayer CORE/6.506.4.1 OpenCORE/2.02 (Linux;Android 2.1-update1)
11-01 17:03:49.252: INFO/System.out(4253): Accept: application/sdp
11-01 17:03:49.252: INFO/System.out(4253): Accept-Encoding: 
11-01 17:03:49.260: INFO/System.out(4253): 
11-01 17:03:49.260: INFO/System.out(4253): describe sent:RTSP/1.0 200 OK
11-01 17:03:49.260: INFO/System.out(4253): Content-Base: rtsp://localhost:5554/sample.mp4/
11-01 17:03:49.260: INFO/System.out(4253): Date: Mon, 31 Oct 2011 15:20:44 EDT
11-01 17:03:49.260: INFO/System.out(4253): Content-Length: 577
11-01 17:03:49.260: INFO/System.out(4253): Session: 1429213185;timeout=60
11-01 17:03:49.260: INFO/System.out(4253): Expires: Mon, 31 Oct 2011 15:20:44 EDT
11-01 17:03:49.260: INFO/System.out(4253): Cseq: 1
11-01 17:03:49.284: INFO/System.out(4253): Content-Type: application/sdp
11-01 17:03:49.284: INFO/System.out(4253): Server: Wowza Media Server 2.2.4 build27452
11-01 17:03:49.284: INFO/System.out(4253): Cache-Control: no-cache
11-01 17:03:49.284: INFO/System.out(4253): 
11-01 17:03:49.284: INFO/System.out(4253): v=0
11-01 17:03:49.284: INFO/System.out(4253): o=- 1429213185 1429213185 IN IP4 127.0.0.1
11-01 17:03:49.284: INFO/System.out(4253): s=WowzaMediaServer
11-01 17:03:49.284: INFO/System.out(4253): c=IN IP4 0.0.0.0
11-01 17:03:49.284: INFO/System.out(4253): t=0 0
11-01 17:03:49.284: INFO/System.out(4253): a=sdplang:en
11-01 17:03:49.284: INFO/System.out(4253): a=range:npt=0- 596.458
11-01 17:03:49.284: INFO/System.out(4253): a=control:*
11-01 17:03:49.284: INFO/System.out(4253): m=audio 0 RTP/AVP 96
11-01 17:03:49.284: INFO/System.out(4253): a=rtpmap:96 mpeg4-generic/48000/2
11-01 17:03:49.284: INFO/System.out(4253): a=fmtp:96 profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1190
11-01 17:03:49.284: INFO/System.out(4253): a=control:trackID=1
11-01 17:03:49.284: INFO/System.out(4253): m=video 0 RTP/AVP 97
11-01 17:03:49.284: INFO/System.out(4253): a=rtpmap:97 H264/90000
11-01 17:03:49.284: INFO/System.out(4253): a=fmtp:97 packetization-mode=1;profile-level-id=42C01E;sprop-parameter-sets=Z0LAHpZiA2P8vCAAAAMAIAAABgHixck=,aMuMsg==
11-01 17:03:49.284: INFO/System.out(4253): a=cliprect:0,0,240,424
11-01 17:03:49.284: INFO/System.out(4253): a=framesize:97 424-240
11-01 17:03:49.284: INFO/System.out(4253): a=framerate:24.0
11-01 17:03:49.284: INFO/System.out(4253): a=control:trackID=2
11-01 17:03:49.284: INFO/System.out(4253): Loooop
11-01 17:03:49.291: VERBOSE/PlayerDriver(1085): HandleInformationalEvent: PVMFInfoErrorHandlingStart
11-01 17:03:49.291: VERBOSE/PlayerDriver(1085): HandleInformationalEvent: type=26 UNHANDLED
11-01 17:03:49.291: WARN/MediaPlayer(4253): info/warning (1, 26)
11-01 17:03:49.291: INFO/MediaPlayer(4253): Info (1,26)
11-01 17:03:49.323: VERBOSE/PlayerDriver(1085): CommandCompleted
11-01 17:03:49.323: VERBOSE/PlayerDriver(1085): Completed command PLAYER_INIT status=PVMFFailure
11-01 17:03:49.323: ERROR/PlayerDriver(1085): Command PLAYER_INIT completed with an error or info PVMFFailure
11-01 17:03:49.323: ERROR/MediaPlayer(4253): error (1, -1)
11-01 17:03:49.323: ERROR/MediaPlayer(4253): Error (1,-1)
11-01 17:03:49.323: DEBUG/VideoView(4253): Error: 1,-1
11-01 17:03:49.354: VERBOSE/PVPlayer(1085): run_set_video_surface s=-2147483648, cancelled=0
11-01 17:03:49.354: VERBOSE/PlayerDriver(1085): HandleInformationalEvent: PVMFInfoErrorHandlingComplete
11-01 17:03:49.354: WARN/PlayerDriver(1085): PVMFInfoErrorHandlingComplete
11-01 17:03:49.401: DEBUG/KeyguardViewMediator(1210): setHidden false
解决方案

These devices do a "double describe" (as I call it). They make a few RTSP requests (which they expect replies to) then terminate the TCP connection, open another one, and make the same requests again except going all the way to the play. I'm not sure why on earth they do this. Obviously the solution was to just accept connections from the Android MediaPlayer (stagefright/whatever) in a threaded fashion. Ex:

while(true){ 
    socket = serversocket.accept();
    Thread mythread = new ThreadImplementation(socket); 
    mythread.start(); 
} 

这篇关于Android的本地RTSP服务器(恶搞),PVPlayer关闭TCP套接字之后描述的回复发送的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-12 20:17