Android 本地 RTSP 服务器(欺骗),PVPlayer 在发送 DESCRIBE 回复后关闭 TCP 套接字
我正在尝试“欺骗” Android 播放器。 我希望 MediaPlayer(我正在使用 VideoView 包装器)连接到本地主机,以便我可以回复其 RTSP 请求。 当底层视频系统是 VisualOn 类型 (VOME) 时,应用程序工作正常,但是任何使用 PacketView 系统 (PVPlayer) 的设备,在我发送对 DESCRIBE 请求/挑战的回复后,TCP 连接都会关闭。
我知道事实上回复不是问题。当我采用确切的代码(生成相同的回复)时,我用来模仿 RTSP 服务器并将其制作成标准(无 Android 库)JAR 并在 PC 上运行它,Android 可以连接到它,并且 RTSP 对话完美无缺。然后android在某些端口上寻找RTP(这是我想要实现的状态)。
我尝试过: 本地主机 127.0.0.1 127.0.0.0/8 中的其他 IP
如上所述,正在建立连接,但在 DESCRIBE 回复后 TCP 套接字已关闭。
我唯一的猜测是 PVPlayer(无论出于何种原因)阻止了本地 RTSP 服务器的使用(检查以确保回复的来源确实是远程的)。
非常感谢您抽出时间。
布雷登
输出:
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
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:
localhost
127.0.0.1
other 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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这些设备执行“双重描述”(我称之为)。他们发出一些 RTSP 请求(他们希望得到答复),然后终止 TCP 连接,打开另一个连接,并再次发出相同的请求,除了一路播放。我不知道他们到底为什么这样做。显然,解决方案是以线程方式接受来自 Android MediaPlayer(stagefright/其他)的连接。前任:
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: