Intel® Collaboration Suite for WebRTC
Community support and discussions on the Intel® Collaboration Suite for WebRTC (Intel® CS for WebRTC).
Announcements
Welcome to the Intel Community. If you get an answer you like, please mark it as an Accepted Solution to help others. Thank you!
For the latest information on Intel’s response to the Log4j/Log4Shell vulnerability, please see Intel-SA-00646

v3.2.1 Android遇到的问题

han_x_
Beginner
341 Views

你好,v3.2.1的Android端偶尔遇到这样的错误。

异常日志:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
    at com.intel.webrtc.conference.ConferenceClient$1.call(ConferenceClient.java:331)
    at io.socket.client.Socket.onack(Socket.java:379)
    at io.socket.client.Socket.onpacket(Socket.java:307)
    at io.socket.client.Socket.access$100(Socket.java:19)
    at io.socket.client.Socket$2$2.call(Socket.java:111)
    at io.socket.emitter.Emitter.emit(Emitter.java:117)
    at io.socket.client.Manager.ondecoded(Manager.java:407)
    at io.socket.client.Manager.access$1600(Manager.java:20)
    at io.socket.client.Manager$7.call(Manager.java:383)
    at io.socket.emitter.Emitter.emit(Emitter.java:117)
    at io.socket.parser.Parser$Decoder.add(Parser.java:157)
    at io.socket.client.Manager.ondata(Manager.java:399)
    at io.socket.client.Manager.access$1000(Manager.java:20)
    at io.socket.client.Manager$2.call(Manager.java:350)
    at io.socket.emitter.Emitter.emit(Emitter.java:117)
    at io.socket.engineio.client.Socket.onPacket(Socket.java:497)
    at io.socket.engineio.client.Socket.access$900(Socket.java:30)
    at io.socket.engineio.client.Socket$5.call(Socket.java:299)
    at io.socket.emitter.Emitter.emit(Emitter.java:117)
    at io.socket.engineio.client.Transport.onPacket(Transport.java:127)
    at io.socket.engineio.client.Transport.onData(Transport.java:119)
    at io.socket.engineio.client.transports.WebSocket.access$300(WebSocket.java:32)
    at io.socket.engineio.client.transports.WebSocket$1$3.run(WebSocket.java:111)
    at io.socket.thread.EventThread$2.run(EventThread.java:75)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
    at java.lang.Thread.run(Thread.java:818)

 

反编译ConferenceClient$1.class,找到源代码:

    public transient void call(Object aobj[])
    {
        if(aobj[0] != null && (aobj[0].toString().equals("error") || aobj[0].toString().equals("timeout")))
        {
            ConferenceClient.access$000(ConferenceClient.this).remove(((LocalStream)val$stream).getMediaStream().label());
            if(val$callback != null)
                val$callback.onFailure(new WoogeenException((new StringBuilder()).append("Server replied with error message: ").append(aobj[0].toString()).toString()));
            return;
        } else
        {

            val$stream.setId(aobj[1].toString());
            aobj = new ConferencePeerConnectionChannel(ConferenceClient.access$100(ConferenceClient.this), ConferenceClient.this, (LocalStream)val$stream);
            ConferenceClient.access$200(ConferenceClient.this).add(((Object) (aobj)));
            ((ConferencePeerConnectionChannel) (aobj)).sendOffer();
            return;
        }
    }

 

aobj[1]没判断是否为null就取值,是否合适?

请帮忙看看这个问题。多谢!

0 Kudos
8 Replies
He_Z_Intel
Employee
341 Views

Hi, Han

could you please provide the server version please?

and i assume you only called publish(), right? could you please provide detailed reproduce procedure?

 

He_Z_Intel
Employee
341 Views

你好,

使用的server(MCU) 是哪个版本呢?

publish时候的具体参数是什么呢?可以提供一下复现的具体步骤吗?谢谢

han_x_
Beginner
341 Views

服务端和Android客户端使用的都是v3.2.1。发布这块代码是这样:

LocalCameraStreamParameters lcsp = new LocalCameraStreamParameters(true, true);
lcsp.setCamera(LocalCameraStreamParameters.CameraType.BACK);
lcsp.setResolution(640, 480);
LocalCameraStream mLocalStream = new LocalCameraStream(lcsp);
PublishOptions options = new PublishOptions();
options.setMaximumVideoBandwidth(300);
options.setMaximumAudioBandwidth(50);
options.setVideoCodec(MediaCodec.VideoCodec.H264);//或VP8
ConferenceClient mRoom;
mRoom.publish(mLocalStream, options, new ActionCallback<Void>(){

...

}

这个异常偶尔出现,没有规律,我各种尝试没法复现。比如Android端正在跟pc端视频会议,音视频都正常,过一阵子就可能出现这个异常。v3.2.1之前的版本都没发现过这个问题。

He_Z_Intel
Employee
341 Views

Hi Han

感谢让我们得知这个问题,我们会尽快复现并查找原因。

han_x_
Beginner
341 Views

在Android SDK的conferenceSample中能复现了这个异常:

1、频繁的点击按钮connect(join)、disconcert(leave)、Start Video(publish)、Stop Video(unpublish),间隔时间随机(几秒~30秒),conferenceSample会闪退。

2、在保持connect的条件下,频繁的点击按钮Start Video(publish)、Stop Video(unpublish),间隔时间随机(几秒~30秒),conferenceSample会闪退。

在我根据conferenceSample修改的代码中也是这样,多次publish、unpublish就会异常。

请帮忙看看,多谢。

He_Z_Intel
Employee
341 Views

han x. wrote:

在Android SDK的conferenceSample中能复现了这个异常:

1、频繁的点击按钮connect(join)、disconcert(leave)、Start Video(publish)、Stop Video(unpublish),间隔时间随机(几秒~30秒),conferenceSample会闪退。

2、在保持connect的条件下,频繁的点击按钮Start Video(publish)、Stop Video(unpublish),间隔时间随机(几秒~30秒),conferenceSample会闪退。

在我根据conferenceSample修改的代码中也是这样,多次publish、unpublish就会异常。

请帮忙看看,多谢。

 

出现的异常是指上面提到的异常吗?我们会在下一个版本修复这个问题。 谢谢

han_x_
Beginner
341 Views

conferenceSample里没加异常捕获,异常时直接闪退,logcat看不到具体的异常信息。我根据conferenceSample改的代码加了异常捕获,就是一楼提到的空指针异常。二者现象都是一样的,都是频繁发布、取消发布时出现了应用闪退。我给conferenceSample加上异常捕获再确认下。

han_x_
Beginner
341 Views

v3.3后再没出现过这种问题。

Reply