我正在尝试在 Android 上实现 WebRTC DataChannel。我想创建一个简单的 peerconnection 对象,它将打开 DataChannel 以使用 WebRTC 通过网络发送数据。尝试创建 PeerConnection 对象时出现错误。我了解到我们使用 factory 来创建 peerconnection 对象factory.createPeerConnection()。
为此,我必须首先创建 PeerConnectionFactory 对象。在此之后,我可以使用它来创建 PeerConnection 对象。当我尝试创建 PeerConnectionFactory 对象时Could not find method android.media.MediaCodec.setParameters出现错误。Fatal Signal 11 (SIGSEGV) at 0x00000000 (code=1)我还尝试了以下代码,PeerConnectionFactory.initializeAndroidGlobals(this, false, false, false);这就是我想要做的:
PeerConnectionFactory factory = new PeerConnectionFactory();
peer = new Peer();
这就是我的 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);
*/
}
}
谁能指出我在 Android 上实现 DataChannel 的任何示例源代码?如果我没有以正确的方式做这件事,也请告诉我。我找不到说明如何操作的 Android Native WebRTC 文档。我正在尝试实现我从在 Web 上使用 WebRTC 中学到的任何东西。
如果我的问题不清楚,请告诉我。