Soj*_*ngi 5 android webrtc rtcdatachannel
我正在尝试在Android上实现WebRTC DataChannel.我想创建一个简单的peerconnection对象,它将打开DataChannel以使用WebRTC通过网络发送数据.我尝试创建PeerConnection对象时收到错误.我了解到我们使用工厂来创建peerconnection对象factory.createPeerConnection().
为此,我必须首先创建PeerConnectionFactory对象.在此之后,我可以使用它来创建PeerConnection对象.我得到错误Could not find method android.media.MediaCodec.setParameters,Fatal Signal 11 (SIGSEGV) at 0x00000000 (code=1)当我尝试创建PeerConnectionFactory对象时.我也试过以下代码PeerConnectionFactory.initializeAndroidGlobals(this, false, false, false);这就是我想要做的:
PeerConnectionFactory factory = new PeerConnectionFactory();
peer = new Peer();
Run Code Online (Sandbox Code Playgroud)
这是我的Peer对象的样子:
public class Peer implements SdpObserver, PeerConnection.Observer, DataChannel.Observer {
private PeerConnection pc;
private DataChannel dc;
public Peer() {
this.pc = factory.createPeerConnection(RTCConfig.getIceServer(),
RTCConfig.getMediaConstraints(), this);
dc = this.pc.createDataChannel("sendDataChannel", new DataChannel.Init());
}
@Override
public void onAddStream(MediaStream arg0) {
// TODO Auto-generated method stub
}
@Override
public void onDataChannel(DataChannel dataChannel) {
this.dc = dataChannel;
}
@Override
public void onIceCandidate(final IceCandidate candidate) {
try {
JSONObject payload = new JSONObject();
payload.put("type", "candidate");
payload.put("label", candidate.sdpMLineIndex);
payload.put("id", candidate.sdpMid);
payload.put("candidate", candidate.sdp);
sendSocketMessageDataChannel(payload.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onIceConnectionChange(IceConnectionState iceConnectionState) {
}
@Override
public void onIceGatheringChange(IceGatheringState arg0) {
// TODO Auto-generated method stub
}
@Override
public void onRemoveStream(MediaStream arg0) {
// TODO Auto-generated method stub
}
@Override
public void onRenegotiationNeeded() {
// TODO Auto-generated method stub
}
@Override
public void onSignalingChange(SignalingState arg0) {
// TODO Auto-generated method stub
}
@Override
public void onCreateFailure(String msg) {
Toast.makeText(getApplicationContext(),
msg, Toast.LENGTH_SHORT)
.show();
}
@Override
public void onCreateSuccess(SessionDescription sdp) {
try {
JSONObject payload = new JSONObject();
payload.put("type", sdp.type.canonicalForm());
payload.put("sdp", sdp.description);
sendSocketMessageDataChannel(payload.toString());
pc.setLocalDescription(FilePeer.this, sdp);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onSetFailure(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onSetSuccess() {
// TODO Auto-generated method stub
}
@Override
public void onMessage(Buffer data) {
Log.w("FILE", data.toString());
}
@Override
public void onStateChange() {
Toast.makeText(getApplicationContext(),
"State Got Changed", Toast.LENGTH_SHORT)
.show();
/*
byte[] bytes = new byte[10];
bytes[0] = 0;
bytes[1] = 1;
bytes[2] = 2;
bytes[3] = 3;
bytes[4] = 4;
bytes[5] = 5;
bytes[6] = 6;
bytes[7] = 7;
bytes[8] = 8;
bytes[9] = 9;
ByteBuffer buf = ByteBuffer.wrap(bytes);
Buffer b = new Buffer(buf, true);
dc.send(b);
*/
}
}
Run Code Online (Sandbox Code Playgroud)
有人能指出我在Android上实现DataChannel的任何示例源代码吗?如果我没有以正确的方式做到这一点,请告诉我.我找不到Android Native WebRTC的文档,该文档说明了如何操作.我正在尝试实现我在Web上使用WebRTC所学到的一切.
请告诉我,如果我的问题不清楚.
这是Android的WebRTC代码中的已知错误.以下主题讨论了这个bug:
https://code.google.com/p/webrtc/issues/detail?id=3416 https://code.google.com/p/webrtc/issues/detail?id=3234
该错误目前处于打开状态.但是,有一种解决方法可用于此.在Android Globals中,我们需要将音频和视频参数传递为true:
PeerConnectionFactory.initializeAndroidGlobals(getApplicationContext(), true, true, VideoRendererGui.getEGLContext());
Run Code Online (Sandbox Code Playgroud)
PeerConnectionFactory不再需要初始化要启用的音频和视频引擎.
PeerConnectionFactory.initializeAndroidGlobals(this, false, false, false);
现在,您将能够禁用音频和视频,并使用数据通道