android - new PeerConnectionFactory() 在 android 上给出错误

标签 android webrtc rtcdatachannel

我正在尝试在 Android 上实现 WebRTC DataChannel。我想创建一个简单的 peerconnection 对象,它将打开 DataChannel 以使用 WebRTC 通过网络发送数据。当我尝试创建我的 PeerConnection 对象时出现错误。我了解到我们使用工厂通过 factory.createPeerConnection() 创建 peerconnection 对象。

为此,我必须先创建 PeerConnectionFactory 对象。在此之后,我可以使用它来创建 PeerConnection 对象。当我尝试创建 PeerConnectionFactory 对象时,出现错误 Could not find method android.media.MediaCodec.setParametersFatal 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 文档。我正在尝试实现我在网络上使用 WebRTC 所学到的一切。

如果我的问题不清楚,请告诉我。

最佳答案

PeerConnectionFactory 不再需要初始化音频和视频引擎才能启用。

PeerConnectionFactory.initializeAndroidGlobals(this, false, false, false);

现在您将能够禁用音频和视频,并使用数据通道

关于android - new PeerConnectionFactory() 在 android 上给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29499725/

相关文章:

php - 如何在php中显示数据库以便在android应用程序中显示它

android - 如何编辑图像,例如在图像上永久添加文本,该文本将成为android中该图像的一部分?

javascript - 使用 Node.js 作为 WebRTC 对等点 - 在服务器上解码帧

c++ - 如何访问RTCVideoRenderer的帧? (ios)

javascript - Webrtc数据通道: saving data in file during transfer of big files

c++ - usrsctp 发送缓冲区不会自行释放

java - 无法从 GoogleWeather API 获取内容长度

使用多种颜色的android主题.xml

javascript - 当 mediaStreamTrack.enabled 被修改时,如何接收通知/事件?

video - 使用数据通道+媒体源扩展API发送本地视频