在Android上的WebRTC中建立DataChannel

时间:2014-08-23 15:03:07

标签: android webrtc libjingle

我试图在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  

1 个答案:

答案 0 :(得分:0)

现在我也遇到了在两部手机之间建立数据连接的问题。

看看这个japanese example

我只需删除pcConstraints.optional.add(new MediaConstraints.KeyValuePair("RtpDataChannels", "true")); ,然后确保在提供之前创建了DataChannel!然后确保已正确初始化连接工厂!