我试图在Android上建立WebRTC DataChannel。但是,根据AppRTC和libjingle api提供的代码,Android会抛出调试错误。我应该遵循哪些步骤将DataChannel添加到PeerConnection?我怀疑RenegotiationNeeded(),但我似乎无法实现它。
到目前为止我的代码(仅显示相关部分,以保持简短):
//My class for the DataChannel.Observer interface
private class DcObserver implements DataChannel.Observer{
@Override
public void onMessage(DataChannel.Buffer dcBuf){
//Java deserialization implementation
CharBuffer cBufRx = dcBuf.data.asCharBuffer();
String receiveStr = cBufRx.toString();
}
@Override
public void onStateChange() {}
}
//The constraints that I specify
pcConstraints.mandatory.add(new MediaConstraints.KeyValuePair("OfferToReceiveAudio", "true"));
pcConstraints.mandatory.add(new MediaConstraints.KeyValuePair("OfferToReceiveVideo", "false"));
pcConstraints.optional.add(new MediaConstraints.KeyValuePair("RtpDataChannels", "true"));
pc = factory.createPeerConnection(iceServers, pcConstraints, this);
//pc confirmed to work at this stage if only audio (no data) is defined for the stream
DataChannel.Init dcOptions = new DataChannel.Init();
dcOptions.ordered = false;
dc = pc.createDataChannel("testDataChannelLabel", dcOptions);
Log.d(TAG, "Creating observer for datachannel");
dcObs = new DcObserver();
dc.registerObserver(dcObs);
Log.d(TAG, "Now adding local stream");
pc.addStream(lMS, new MediaConstraints());
在我的Logcat中,成功记录的最后一条消息是"为datachannel创建观察者"。然后跟随日志输出(最后三行以类似的方式持续一段时间):
08-23 16:57:05.356: D/dalvikvm(15777): [SWE] ### S.LSI JIT optimization list BEGIN ###
08-23 16:57:05.356: D/dalvikvm(15777): [SWE] ### S.LSI JIT optimization list END ###
08-23 16:57:05.356: A/libc(15777): Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 15899 (Subscribe-Manag)
08-23 16:57:05.356: D/STATUSBAR-IconMerger(3230): checkOverflow(504), More:false, Req:false Child:4
08-23 16:57:05.416: I/DEBUG(2543): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
08-23 16:57:05.416: I/DEBUG(2543): Build fingerprint: 'samsung/ja3gxx/ja3g:4.4.2/KOT49H/I9500XXUFNE7:user/release-keys'
08-23 16:57:05.416: I/DEBUG(2543): Revision: '10'
08-23 16:57:05.421: I/DEBUG(2543): pid: 15777, tid: 15899, name: Subscribe-Manag >>> com.dragondevelopers.testwebrtc <<<
08-23 16:57:05.421: I/DEBUG(2543): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
08-23 16:57:05.836: I/DEBUG(2543): r0 00000000 r1 7cb05b98 r2 7caecf18 r3 7cefb974
08-23 16:57:05.836: I/DEBUG(2543): r4 7cb05b98 r5 7caecf18 r6 400a2384 r7 78900001
08-23 16:57:05.836: I/DEBUG(2543): r8 1d2004d6 r9 7cdfce50 sl 7caeca48 fp 7cefb9ec
08-23 16:57:05.836: I/DEBUG(2543): ip 7cdfd250 sp 7cefb970 lr 4172e5dd pc 77a4b154 cpsr 200d0030
08-23 16:57:05.841: I/DEBUG(2543): d0 67617373654d6e3c d1 42246c656e6e6169
08-23 16:57:05.841: I/DEBUG(2543): d2 6d8952086d89516e d3 6d8952786d895269
08-23 16:57:05.841: I/DEBUG(2543): d4 0000000000000000 d5 3f80000000000000
08-23 16:57:05.841: I/DEBUG(2543): d6 3f80000000000000 d7 0000000080000000
08-23 16:57:05.841: I/DEBUG(2543): d8 0000000000000000 d9 0000000000000000
08-23 16:57:05.841: I/DEBUG(2543): d10 0000000000000000 d11 0000000000000000
08-23 16:57:05.841: I/DEBUG(2543): d12 0000000000000000 d13 0000000000000000
08-23 16:57:05.841: I/DEBUG(2543): d14 0000000000000000 d15 0000000000000000
08-23 16:57:05.841: I/DEBUG(2543): d16 0000000000000001 d17 0000000000000007
08-23 16:57:05.841: I/DEBUG(2543): d18 0000000000000025 d19 0000000008000005
08-23 16:57:05.841: I/DEBUG(2543): d20 0000000000ffffff d21 0000000000000005
08-23 16:57:05.841: I/DEBUG(2543): d22 0000000009000000 d23 c042000000000000
08-23 16:57:05.841: I/DEBUG(2543): d24 0000000000000000 d25 0000000000000000
08-23 16:57:05.841: I/DEBUG(2543): d26 0000000000000320 d27 0000000000000001
08-23 16:57:05.841: I/DEBUG(2543): d28 3ff0000000000000 d29 0000000000000000
08-23 16:57:05.841: I/DEBUG(2543): d30 0000000000000000 d31 c042000000000000
08-23 16:57:05.846: I/DEBUG(2543): scr 60000010
08-23 16:57:05.846: I/DEBUG(2543): backtrace:
08-23 16:57:05.846: I/DEBUG(2543): #00 pc 00036154 /data/app-lib/com.dragondevelopers.testwebrtc-11/libjingle_peerconnection_so.so (Java_org_webrtc_DataChannel_registerObserverNative+207)
08-23 16:57:05.846: I/DEBUG(2543): #01 pc 0001e84c /system/lib/libdvm.so (dvmPlatformInvoke+112)
08-23 16:57:05.846: I/DEBUG(2543): #02 pc 0004f28b /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
08-23 16:57:05.851: I/DEBUG(2543): #03 pc 00050f19 /system/lib/libdvm.so (dvmResolveNativeMethod(unsigned int const*, JValue*, Method const*, Thread*)+256)
08-23 16:57:05.851: I/DEBUG(2543): #04 pc 00027c60 /system/lib/libdvm.so
08-23 16:57:05.851: I/DEBUG(2543): #05 pc 0002ec9c /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
08-23 16:57:05.851: I/DEBUG(2543): #06 pc 0002c300 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
08-23 16:57:05.851: I/DEBUG(2543): #07 pc 000618f1 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
08-23 16:57:05.851: I/DEBUG(2543): #08 pc 00061915 /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
08-23 16:57:05.851: I/DEBUG(2543): #09 pc 00056603 /system/lib/libdvm.so
08-23 16:57:05.851: I/DEBUG(2543): #10 pc 0000d280 /system/lib/libc.so (__thread_entry+72)
08-23 16:57:05.851: I/DEBUG(2543): #11 pc 0000d418 /system/lib/libc.so (pthread_create+240)
08-23 16:57:05.851: I/DEBUG(2543): stack:
08-23 16:57:05.851: I/DEBUG(2543): 7cefb930 7caeca38
08-23 16:57:05.851: I/DEBUG(2543): 7cefb934 7cefb94c [stack:15899]
08-23 16:57:05.851: I/DEBUG(2543): 7cefb938 00000000
08-23 16:57:05.851: I/DEBUG(2543): 7cefb93c 4172e5dd /system/lib/libdvm.so
08-23 16:57:05.851: I/DEBUG(2543): 7cefb940 00000000
08-23 16:57:05.851: I/DEBUG(2543): 7cefb944 4172eaf3 /system/lib/libdvm.so
08-23 16:57:05.851: I/DEBUG(2543): 7cefb948 7caecf18
08-23 16:57:05.851: I/DEBUG(2543): 7cefb94c 7caeca38
08-23 16:57:05.856: I/DEBUG(2543): 7cefb950 7caecf18
08-23 16:57:05.856: I/DEBUG(2543): 7cefb954 77a456ab /data/app-lib/com.dragondevelopers.testwebrtc-11/libjingle_peerconnection_so.so
08-23 16:57:05.856: I/DEBUG(2543): 7cefb958 00000008
08-23 16:57:05.856: I/DEBUG(2543): 7cefb95c 77a469f9 /data/app-lib/com.dragondevelopers.testwebrtc-11/libjingle_peerconnection_so.so
08-23 16:57:05.856: I/DEBUG(2543): 7cefb960 7cefb974 [stack:15899]
08-23 16:57:05.856: I/DEBUG(2543): 7cefb964 7cb05b98
08-23 16:57:05.856: I/DEBUG(2543): 7cefb968 7caecf18
08-23 16:57:05.856: I/DEBUG(2543): 7cefb96c 77a4b153 /data/app-lib/com.dragondevelopers.testwebrtc-11/libjingle_peerconnection_so.so (Java_org_webrtc_DataChannel_registerObserverNative+206)
08-23 16:57:05.856: I/DEBUG(2543): #00 7cefb970 4009e000 /system/lib/libc.so
08-23 16:57:05.856: I/DEBUG(2543): 7cefb974 696e693c /dev/ashmem/dalvik-mark-stack (deleted)
08-23 16:57:05.856: I/DEBUG(2543): 7cefb978 7c003e74
08-23 16:57:05.856: I/DEBUG(2543): 7cefb97c 7cb0c8b0
08-23 16:57:05.856: I/DEBUG(2543): 7cefb980 7cb0df48
08-23 16:57:05.856: I/DEBUG(2543): 7cefb984 7cefb97a [stack:15899]
08-23 16:57:05.856: I/DEBUG(2543): 7cefb988 7cefb974 [stack:15899]
08-23 16:57:05.856: I/DEBUG(2543): 7cefb98c 654d6e6f /dev/ashmem/dalvik-mark-stack (deleted)
08-23 16:57:05.856: I/DEBUG(2543): 7cefb990 67617373 /dev/ashmem/dalvik-mark-stack (deleted)
08-23 16:57:05.856: I/DEBUG(2543): 7cefb994 40060065 /system/lib/libc.so
08-23 16:57:05.856: I/DEBUG(2543): 7cefb998 4009e000 /system/lib/libc.so
08-23 16:57:05.856: I/DEBUG(2543): 7cefb99c 7cefb995 [stack:15899]
08-23 16:57:05.861: I/DEBUG(2543): 7cefb9a0 7cefb98c [stack:15899]
08-23 16:57:05.861: I/DEBUG(2543): 7cefb9a4 74536e6f /system/lib/libwebviewchromium.so
08-23 16:57:05.861: I/DEBUG(2543): 7cefb9a8 43657461 /dev/ashmem/dalvik-heap (deleted)
08-23 16:57:05.861: I/DEBUG(2543): 7cefb9ac 676e6168 /dev/ashmem/dalvik-mark-stack (deleted)
08-23 16:57:05.861: I/DEBUG(2543): ........ ........
08-23 16:57:05.861: I/DEBUG(2543): #01 7cefb9d8 7cdfce4c
08-23 16:57:05.861: I/DEBUG(2543): 7cefb9dc 00000001
08-23 16:57:05.861: I/DEBUG(2543): 7cefb9e0 7787dd97 /data/dalvik-cache/data@app@com.dragondevelopers.testwebrtc-11.apk@classes.dex
08-23 16:57:05.861: I/DEBUG(2543): 7cefb9e4 431608d8 /dev/ashmem/dalvik-heap (deleted)
08-23 16:57:05.861: I/DEBUG(2543): 7cefb9e8 400a2384
08-23 16:57:05.861: I/DEBUG(2543): 7cefb9ec 4173328f /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+402)
08-23 16:57:05.861: I/DEBUG(2543): #02 7cefb9f0 7cdfce4c
08-23 16:57:05.861: I/DEBUG(2543): 7cefb9f4 7787dd95 /data/dalvik-cache/data@app@com.dragondevelopers.testwebrtc-11.apk@classes.dex
08-23 16:57:05.861: I/DEBUG(2543): 7cefb9f8 77a4b085 /data/app-lib/com.dragondevelopers.testwebrtc-11/libjingle_peerconnection_so.so (Java_org_webrtc_DataChannel_registerObserverNative)
08-23 16:57:05.861: I/DEBUG(2543): 7cefb9fc 7caeca48
08-23 16:57:05.861: I/DEBUG(2543): 7cefba00 7caeca38
08-23 16:57:05.861: I/DEBUG(2543): 7cefba04 43160a20 /dev/ashmem/dalvik-heap (deleted)
08-23 16:57:05.861: I/DEBUG(2543): 7cefba08 00000000
08-23 16:57:05.861: I/DEBUG(2543): 7cefba0c 00000000
08-23 16:57:05.861: I/DEBUG(2543): 7cefba10 7760348c /data/dalvik-cache/data@app@com.dragondevelopers.testwebrtc-11.apk@classes.dex
08-23 16:57:05.866: I/DEBUG(2543): 7cefba14 400a2384
08-23 16:57:05.866: I/DEBUG(2543): 7cefba18 43046230 /dev/ashmem/dalvik-heap (deleted)
08-23 16:57:05.866: I/DEBUG(2543): 7cefba1c 6dc9a0b8 /dev/ashmem/dalvik-LinearAlloc (deleted)
08-23 16:57:05.866: I/DEBUG(2543): 7cefba20 00000000
08-23 16:57:05.866: I/DEBUG(2543): 7cefba24 7cefba40 [stack:15899]
08-23 16:57:05.866: I/DEBUG(2543): 7cefba28 43160b88 /dev/ashmem/dalvik-heap (deleted)
08-23 16:57:05.866: I/DEBUG(2543): 7cefba2c 4178194e /system/lib/libdvm.so
08-23 16:57:05.866: I/DEBUG(2543): ........ ........
08-23 16:57:05.871: I/DEBUG(2543): memory near r1:
08-23 16:57:05.871: I/DEBUG(2543): 7cb05b78 7c7d6168 7c7d61e8 75af8944 75af8938
08-23 16:57:05.871: I/DEBUG(2543): 7cb05b88 00000008 00000002 42040000 00000023
08-23 16:57:05.871: I/DEBUG(2543): 7cb05b98 77d4a058 1d2004ce 1d2004d2 1d2004d6
答案 0 :(得分:0)
现在我也遇到了在两部手机之间建立数据连接的问题。
看看这个japanese example
我只需删除pcConstraints.optional.add(new MediaConstraints.KeyValuePair("RtpDataChannels", "true"));
,然后确保在提供之前创建了DataChannel!然后确保已正确初始化连接工厂!