Android に WebRTC DataChannel を実装しようとしています。DataChannel を開いて WebRTC を使用してネットワーク経由でデータを送信する単純なピア接続オブジェクトを作成したいと考えています。PeerConnection オブジェクトを作成しようとするとエラーが発生します。factory を使用して、 を使用してピア接続オブジェクトを作成することを学びました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を使用して学んだことをすべて実装しようとしています。
私の質問が明確でない場合はお知らせください。