Closed MarcinWad closed 1 year ago
@claincly May I ask you to take a look? Thanks!
First, the timeoutMs
setter is not for the network, so as you have observed, it's doing no good.
In your specific use case, IIUC you need to set a timeout on the Socket
itself, and this timeout will ensure the connection error is surfaced earlier than the current value (which is the platform specific, and two minutes as you said.)
I would suggest make your own SocketFactory
, which can be as easy as
new RtspMediaSource.Factory()
.setSocketFactory(
new SocketFactory() {
SocketFactory defaultSocketFactory = SocketFactory.getDefault();
@Override
public Socket createSocket(String host, int port) throws IOException {
Socket socket = defaultSocketFactory.createSocket();
socket.connect(
new InetSocketAddress(InetAddress.getByName(host), port), /* timeout= */ 1000);
return socket;
}
@Override
public Socket createSocket(
String host, int port, InetAddress localHost, int localPort) {
throw new UnsupportedOperationException();
}
@Override
public Socket createSocket(InetAddress host, int port) {
throw new UnsupportedOperationException();
}
@Override
public Socket createSocket(
InetAddress address, int port, InetAddress localAddress, int localPort) {
throw new UnsupportedOperationException();
}
});
Hello, Thank you. Adding own implementation of SocketFactory fixes the problem and Exo is not blocking main thread anymore.
I think that adding this functionality to a Builder of RTSPMediaSource would be better idea. I digged almost whole Internet before i wrote here :)
Glad it helped!
Hello, I try to implement a player which mixes local video files in playlist with public RTSP streams for my project. I found that if RTSP Server is not accesible (dead) - Exoplayer will lock whole play thread even at playing an earlier local MP4 file in playlist.
It will finally, after about 2 minutes, fire ExoPlaybackException
I cannot find a timeout option to setup.
And the Exception which fires about 2 minutes later: