请教:Android播放RTSP的错误Error(100,0)
大家好,我需要在Android平台上实现RTSP的播放,使用MediaPlayer进行播放的时候,在很多款手机上都是能够正常播放的,但是在三星I9250上不能播放,错误是Error(100,0),从日志上看,RTSP的DESCRIBE、SETUP、PLAY命令都成功了,但是这个时候系统发了一个SIGSEGV信号,把播放中断了。
请问如何解决该问题?谢谢!!!
详细日志如下:
12-02 17:15:14.895: INFO/somusic(1877): rtsp://10.123.254.114/90115000/16/0/268435467/8670.3gp
12-02 17:15:14.895: INFO/AwesomePlayer(1947): AwesomePlayer running on behalf of uid 10042
12-02 17:15:14.895: INFO/AwesomePlayer(1947): setDataSource_l('rtsp://10.123.254.114/90115000/16/0/268435467/8670.3gp
12-02 17:15:14.902: INFO/qtaguid(1947): Tagging socket 16 with tag 5053545200000000{1347638354,0} for uid 10042
12-02 17:15:14.902: INFO/qtaguid(1947): write_ctrl(t 16 5788062657265270784 10042)
12-02 17:15:16.777: INFO/TelephonyRegistry(166): notifyDataConnection: state=2 isDataConnectivityPossible=true reason='nwTypeChanged' apn='3gwap' apnType=default networkType=10
12-02 17:15:16.777: DEBUG/TelephonyRegistry(166): onDataConnectionStateChanged(2, 10)
12-02 17:15:16.777: DEBUG/StatusBar.NetworkController(239): onDataConnectionStateChanged: state=2 type=10
12-02 17:15:16.785: DEBUG/MobileDataStateTracker(166): default: Received state=CONNECTED, old=CONNECTED, reason=nwTypeChanged
12-02 17:15:17.316: INFO/MyHandler(1947): connection request completed with result 0 (Success)
12-02 17:15:17.637: INFO/ARTSPConnection(1947): status: RTSP/1.0 200 OK
12-02 17:15:17.645: INFO/MyHandler(1947): DESCRIBE completed with result 0 (Success)
12-02 17:15:17.645: INFO/ASessionDescription(1947): v=0
12-02 17:15:17.645: INFO/ASessionDescription(1947): o=HWPSS 3427743244 1084119141 IN IP4 127.0.0.1
12-02 17:15:17.645: INFO/ASessionDescription(1947): s=c/vod_61vod/90115000/16/0/268435467/8670.3gp
12-02 17:15:17.645: INFO/ASessionDescription(1947): c=IN IP4 0.0.0.0
12-02 17:15:17.645: INFO/ASessionDescription(1947): t=0 0
12-02 17:15:17.645: INFO/ASessionDescription(1947): a=control:*
12-02 17:15:17.652: INFO/ASessionDescription(1947): a=range:npt=0-60.000000
12-02 17:15:17.652: INFO/ASessionDescription(1947): m=audio 0 RTP/AVP 97
12-02 17:15:17.652: INFO/ASessionDescription(1947): b=AS:32
12-02 17:15:17.652: INFO/ASessionDescription(1947): a=rtpmap:97 MP4A-LATM/44100/1
12-02 17:15:17.652: INFO/ASessionDescription(1947): a=fmtp:97 profile-level-id=15; cpresent=0; config=400024103FC0
12-02 17:15:17.652: INFO/ASessionDescription(1947): a=control:trackID=1205
12-02 17:15:17.652: INFO/qtaguid(1947): Tagging socket 18 with tag 5f50545200000000{1599099986,0} for uid 10042
12-02 17:15:17.652: INFO/qtaguid(1947): write_ctrl(t 18 6868082142904057856 10042)
12-02 17:15:17.652: INFO/qtaguid(1947): Tagging socket 19 with tag 5f50545200000000{1599099986,0} for uid 10042
12-02 17:15:17.652: INFO/qtaguid(1947): write_ctrl(t 19 6868082142904057856 10042)
12-02 17:15:17.832: INFO/ARTSPConnection(1947): status: RTSP/1.0 200 OK
12-02 17:15:17.840: INFO/MyHandler(1947): SETUP(1) completed with result 0 (Success)
12-02 17:15:18.137: INFO/ARTSPConnection(1947): status: RTSP/1.0 200 OK
12-02 17:15:18.145: INFO/MyHandler(1947): PLAY completed with result 0 (Success)
12-02 17:15:18.145: INFO/MyHandler(1947): [ 12-02 17:15:18.145 1947:0x7d7 F/MyHandler ]
12-02 17:15:18.145: INFO/MyHandler(1947): frameworks/base/media/libstagefright/rtsp/MyHandler.h:1042 CHECK_LT( trackIndex,mTracks.size()) failed: 1 vs. 1
12-02 17:15:18.145: INFO/MyHandler(1947): [ 12-02 17:15:18.145 1947:0x7d7 F/libc ]
12-02 17:15:18.145: INFO/MyHandler(1947): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1)
12-02 17:15:18.645: INFO/DEBUG(99): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
12-02 17:15:18.645: INFO/DEBUG(99): Build fingerprint: 'Android/full_maguro/maguro:4.0/ICS_FACTORYROM/9:eng/test-keys'
12-02 17:15:18.645: INFO/DEBUG(99): pid: 1947, tid: 2007 >>> /system/bin/mediaserver <<<
12-02 17:15:18.645: INFO/DEBUG(99): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
12-02 17:15:18.645: INFO/DEBUG(99): r0 deadbaad r1 00000001 r2 a0000000 r3 00000000
12-02 17:15:18.645: INFO/DEBUG(99): r4 00000000 r5 00000027 r6 000285f8 r7 417b0bcc
12-02 17:15:18.645: INFO/DEBUG(99): r8 40bf3ffe r9 00000000 10 40bf4ef2 fp 40bf4f95
12-02 17:15:18.645: INFO/DEBUG(99): ip ffffffff sp 417b0758 lr 4002aee1 pc 40027650 cpsr 60000030
12-02 17:15:18.645: INFO/DEBUG(99): d0 6172546d2c786564 d1 657a69732e736b63
12-02 17:15:18.645: INFO/DEBUG(99): d2 6c69616620292928 d3 73762031203a6465
12-02 17:15:18.645: INFO/DEBUG(99): d4 2e72656c646e6148 d5 4320323430313a68
12-02 17:15:18.645: INFO/DEBUG(99): d6 28544c5f4b434548 d7 6e496b6361727420
[解决办法]
是类似assert异常,是这句引起的:CHECK_LT(trackIndex, mTracks.size());
根据你的打印,trackIndex和mTracks.size()都为1,所以tarckIndex<mTracks.size()
条件失败而异常
android2.3.4源码是这样的:
size_t trackIndex = 0;
while (trackIndex < mTracks.size()
&& !(val == mTracks.editItemAt(trackIndex).mURL)) {
++trackIndex;
}
CHECK_LT(trackIndex, mTracks.size());
可以源码几乎不可能性出现你出现的情况,不知道你用的 三星I9250系统版本是多少?
三星有没有修改过这里的源码
[解决办法]
4.0的源码:
size_t trackIndex = 0;
while (trackIndex < mTracks.size()
&& !(val == mTracks.editItemAt(trackIndex).mURL)) {
++trackIndex;
}
CHECK_LT(trackIndex, mTracks.size());
看打印trackIndex, mTracks.size()都为1,那就比较奇怪了,看这代码似乎是不可能的,
难道是多线程同步出问题了?
[解决办法]
直接原因是val == mTracks.editItemAt(trackIndex).mURL不相等,导致trackIndex == mTracks.size()了。
最终还是因为网站返回的rtp-info信息中的url是相对地址,所以与mTracks.editItemAt(trackIndex).mURL的绝对地址不相等。
修改下判断条件就可以了。
[解决办法]