Sinch视频通话挂机崩溃android

时间:2015-11-13 15:14:58

标签: android crash java-native-interface sinch

你对这个问题有任何想法:当我关闭收到的视频通话时,应用程序崩溃,给我这个错误:

11-13 16:59:00.341    6531-6531/appPackage E/SinchVideoService﹕ stop
11-13 16:59:00.341    6531-6531/appPackage D/SinchClient﹕ Degub: terminate()
11-13 16:59:00.351    6531-6698/appPackage E/rtc﹕ #
    # Fatal error in ../../../talk/app/webrtc/androidvideocapturer.cc, line 195
    # Check failed: !running_
    #
    #
11-13 16:59:00.351    6531-6698/appPackage A/libc﹕ Fatal signal 6 (SIGABRT), code -6 in tid 6698 (Sinch Worker Th)

这似乎是一个Sinch内部错误,任何想法?

-----编辑------

当活动被破坏时会发生:

    @Override
    public void onDestroy()
    {
       if (getSinchServiceInterface() != null)
       {
           getSinchServiceInterface().removeMessageClientListener(this);
           getSinchServiceInterface().stopClient();
        }
        super.onDestroy();
    }

当调用扩展Service的类时,此方法(stop())被调用。

    private void stop()
    {
        if (mSinchClient != null)
        {
            mSinchClient.terminate();
            mSinchClient = null;
        }
    }

- 编辑---

这是我启动客户的地方:

    protected void onServiceConnected()
    {
        getSinchServiceInterface().setStartListener(this);
        PreferencesDataAccess prefs = new PreferencesDataAccess(this);
        getSinchServiceInterface().startClient("user-" + prefs.getCurrentUser().getUserID());
        getSinchServiceInterface().addMessageClientListener(this);
    }

这是初始化的地方:

    private void start(String userName)
    {
        if (mSinchClient == null)
        {
            mUserId = userName;
            mSinchClient = Sinch.getSinchClientBuilder().context(getApplicationContext()).userId(userName)
                    .applicationKey(APP_KEY)
                    .applicationSecret(APP_SECRET)
                    .environmentHost(ENVIRONMENT).build();

            mSinchClient.setSupportCalling(true);
            mSinchClient.setSupportMessaging(true);
            mSinchClient.startListeningOnActiveConnection();

            mSinchClient.addSinchClientListener(new MySinchClientListener());
            mSinchClient.getCallClient().addCallClientListener(new SinchCallClientListener());
            mSinchClient.start();

        }
    }

2 个答案:

答案 0 :(得分:1)

使用terminateGracefully()代替终止。这将等待一些网络事件并优雅地关闭客户端。

此外,你不应该仅仅因为拒绝接听电话而停止sinch客户端。 sinch客户端应该存在于您的应用程序中,以便您可以接听电话。您应该停止Sinch客户的唯一时间是: - 用户退出您的应用程序,您根本不想接收此客户端的电话。

当你打电话给拒绝时,你只需要打电话给“挂机”,不要杀死客户端。

答案 1 :(得分:0)

您需要致电

kernel void kernel_passthrough(texture2d<float, access::read> inTexture [[texture(0)]],
                           texture2d<float, access::write> outTexture [[texture(1)]],
                           uint2 gid [[thread_position_in_grid]])
{
     float4 inColor   = inTexture.read(gid); 
     //
     // flip texture vertically if it needs to display with right orientation 
     //
     outTexture.write(inColor, gid);
}

在调用terminate()之前;否则你将获得一个传递给SinchClientListener的无效对象。