Unable to restart live stream after disconnect (groundsdkdemo)

Following a network disconnect using the groundsdkdemo, the live video stream fails to restart. The only way to recover from this is to power cycle the drone. This is obviously not a viable solution if your drone is flying.

This occurs in my own GroundSdk based project as well, but figured it best to stick with the official demo in the hopes of resolution.

Anafi Firmware: 1.6.1
GroundSdk version: 1.1.2

Steps to reproduce:

  1. Open groundsdkdemo
  2. Connect to an Anafi via wifi
  3. Verify live video stream is functioning
  4. Disconnect from Anafi wifi
  5. Reconnect to Anafi wifi
  6. Live video stream fails to restart

Captured stacktrace:

2019-11-23 17:53:34.465 27064-27111/com.parrot.drone.groundsdkdemo I/pdraw_session: state change to CREATED
2019-11-23 17:53:34.465 27064-27064/com.parrot.drone.groundsdkdemo E/arsdkcore: stream [state:STARTING, playState: PAUSED]
2019-11-23 17:53:34.465 27064-27111/com.parrot.drone.groundsdkdemo D/sdkcore_stream: Stream 0x7a6e7d4830 [state: CLOSED, pdraw:0x79fee1d400, position: 0, speed:0.00, duration: 0, track:(null)]
    	-> OPEN request
2019-11-23 17:53:34.465 27064-27111/com.parrot.drone.groundsdkdemo I/pdraw_session: state change to OPENING
2019-11-23 17:53:34.465 27064-27111/com.parrot.drone.groundsdkdemo D/arsdk.net: Binding socket to network [fd: 59]
2019-11-23 17:53:34.466 27064-27111/com.parrot.drone.groundsdkdemo W/arsdk.net: Could not bind native socket to network [fd: 59]
    java.net.SocketException: getpeername failed: ENOTSOCK (Socket operation on non-socket)
        at android.net.Network.bindSocket(Network.java:404)
        at com.parrot.drone.sdkcore.arsdk.backend.net.ArsdkWifiBackendController$1.onSocketCreated(ArsdkWifiBackendController.java:222)
        at com.parrot.drone.sdkcore.arsdk.backend.net.ArsdkNetBackend.onSocketCreated(ArsdkNetBackend.java:101)
        at com.parrot.drone.sdkcore.arsdk.stream.ArsdkStream.nativeOpen(Native Method)
        at com.parrot.drone.sdkcore.arsdk.stream.ArsdkStream.lambda$open$1$ArsdkStream(ArsdkStream.java:79)
        at com.parrot.drone.sdkcore.arsdk.stream.-$$Lambda$ArsdkStream$usBaFXxyVxBBr1nfUxE4yq7zWVU.open(Unknown Source:2)
        at com.parrot.drone.sdkcore.stream.SdkCoreStream.lambda$internalOpen$6$SdkCoreStream(SdkCoreStream.java:472)
        at com.parrot.drone.sdkcore.stream.-$$Lambda$SdkCoreStream$YcrPUNoy5w2yh69JFINccrcAWFQ.run(Unknown Source:4)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.os.HandlerThread.run(HandlerThread.java:67)
        at com.parrot.drone.sdkcore.pomp.HandlerThreadPomp$1.run(HandlerThreadPomp.java:90)
     Caused by: android.system.ErrnoException: getpeername failed: ENOTSOCK (Socket operation on non-socket)
        at libcore.io.Linux.getpeername(Native Method)
        at libcore.io.ForwardingOs.getpeername(ForwardingOs.java:119)
        at libcore.io.ForwardingOs.getpeername(ForwardingOs.java:119)
        at android.system.Os.getpeername(Os.java:227)
        at android.net.Network.bindSocket(Network.java:394)
        at com.parrot.drone.sdkcore.arsdk.backend.net.ArsdkWifiBackendController$1.onSocketCreated(ArsdkWifiBackendController.java:222) 
        at com.parrot.drone.sdkcore.arsdk.backend.net.ArsdkNetBackend.onSocketCreated(ArsdkNetBackend.java:101) 
        at com.parrot.drone.sdkcore.arsdk.stream.ArsdkStream.nativeOpen(Native Method) 
        at com.parrot.drone.sdkcore.arsdk.stream.ArsdkStream.lambda$open$1$ArsdkStream(ArsdkStream.java:79) 
        at com.parrot.drone.sdkcore.arsdk.stream.-$$Lambda$ArsdkStream$usBaFXxyVxBBr1nfUxE4yq7zWVU.open(Unknown Source:2) 
        at com.parrot.drone.sdkcore.stream.SdkCoreStream.lambda$internalOpen$6$SdkCoreStream(SdkCoreStream.java:472) 
        at com.parrot.drone.sdkcore.stream.-$$Lambda$SdkCoreStream$YcrPUNoy5w2yh69JFINccrcAWFQ.run(Unknown Source:4) 
        at android.os.Handler.handleCallback(Handler.java:883) 
        at android.os.Handler.dispatchMessage(Handler.java:100) 
        at android.os.Looper.loop(Looper.java:214) 
        at android.os.HandlerThread.run(HandlerThread.java:67) 
        at com.parrot.drone.sdkcore.pomp.HandlerThreadPomp$1.run(HandlerThreadPomp.java:90) 
2019-11-23 17:53:34.466 27064-27111/com.parrot.drone.groundsdkdemo I/pdraw_element: 'StreamDemuxerNet': element state change to CREATED
2019-11-23 17:53:34.467 27064-27111/com.parrot.drone.groundsdkdemo I/pdraw_element: 'StreamDemuxerNet': element state change to STARTING
2019-11-23 17:53:34.467 27064-27111/com.parrot.drone.groundsdkdemo I/rtsp_client: connecting to address 192.168.42.1 port 554
2019-11-23 17:53:34.469 27064-27111/com.parrot.drone.groundsdkdemo I/pdraw_element: 'StreamDemuxerNet': element state change to STARTED
2019-11-23 17:53:34.469 27064-27111/com.parrot.drone.groundsdkdemo I/pdraw_session: state change to OPENED
2019-11-23 17:53:34.469 27064-27111/com.parrot.drone.groundsdkdemo D/sdkcore_stream: Stream 0x7a6e7d4830 [state: OPENING, pdraw:0x79fee1d400, position: 0, speed:0.00, duration: 0, track:(null)]
    	<- OPEN response [status: 0]

This was working fine with firmware 1.1.0. After upgrading to 1.6.1, the live video stream no longer survives a disconnect / reconnect event. This issue is not reproducible in FreeFlight 6.