#30 - WIP on the shoutcast v2 protocol

This commit is contained in:
Denny
2016-09-30 05:59:14 -04:00
parent 02f470cf91
commit a43ae9ce53
2 changed files with 32 additions and 34 deletions

View File

@@ -63,6 +63,8 @@ public class ShoutcastV2Handler extends BroadcastHandler
private final static Logger mLog = LoggerFactory.getLogger( ShoutcastV2Handler.class );
private static final long RECONNECT_INTERVAL_MILLISECONDS = 15000; //15 seconds
private static final boolean GET_RESPONSE = true;
private static final boolean NO_RESPONSE_EXPECTED = false;
private long mLastConnectionAttempt = 0;
private Socket mSocket;
@@ -71,9 +73,9 @@ public class ShoutcastV2Handler extends BroadcastHandler
private int mMaxPayloadSize = 16377;
/**
* Creates a Shoutcast Version 1 broadcast handler.
* @param configuration
* @param audioConverter
* Creates a Shoutcast Version 2 broadcast handler.
* @param configuration details for shoutcast version 2
* @param audioConverter to convert PCM audio
*/
public ShoutcastV2Handler(ShoutcastV2Configuration configuration, IAudioConverter audioConverter)
{
@@ -105,25 +107,21 @@ public class ShoutcastV2Handler extends BroadcastHandler
{
List<UltravoxMessage> audioMessages = getAudioMessages(convertedAudio);
for(UltravoxMessage audioMessage: audioMessages)
try
{
try
for(UltravoxMessage audioMessage: audioMessages)
{
send(audioMessage, false);
}
catch(IOException e)
{
mLog.error("Error while dispatching audio", e);
setBroadcastState(BroadcastState.BROADCAST_ERROR);
return;
send(audioMessage, NO_RESPONSE_EXPECTED);
}
}
catch(IOException e)
{
mLog.error("Error while dispatching audio", e);
setBroadcastState(BroadcastState.BROADCAST_ERROR);
return;
}
}
}
else
{
mLog.debug("Not connected");
}
}
/**
@@ -305,7 +303,7 @@ public class ShoutcastV2Handler extends BroadcastHandler
try
{
UltravoxMessage response = send(requestCipher, true);
UltravoxMessage response = send(requestCipher, GET_RESPONSE);
if (response instanceof RequestCipher)
{
@@ -316,7 +314,7 @@ public class ShoutcastV2Handler extends BroadcastHandler
authenticateBroadcast.setCredentials(cipherResponse.getCipher(),
getShoutcastConfiguration().getStreamID(), getShoutcastConfiguration().getUserID(),
getShoutcastConfiguration().getPassword());
response = send(authenticateBroadcast, true);
response = send(authenticateBroadcast, GET_RESPONSE);
if (response.isErrorResponse())
{
@@ -327,7 +325,7 @@ public class ShoutcastV2Handler extends BroadcastHandler
UltravoxMessage streamMimeType = UltravoxMessageFactory
.getMessage(UltravoxMessageType.STREAM_MIME_TYPE);
streamMimeType.setPayload(getShoutcastConfiguration().getBroadcastFormat().getValue());
response = send(streamMimeType, true);
response = send(streamMimeType, GET_RESPONSE);
if (response.isErrorResponse())
{
@@ -340,7 +338,7 @@ public class ShoutcastV2Handler extends BroadcastHandler
.getMessage(UltravoxMessageType.SETUP_BROADCAST);
setupBroadcast.setBitRate(getShoutcastConfiguration().getBitRate(),
getShoutcastConfiguration().getBitRate());
response = send(setupBroadcast, true);
response = send(setupBroadcast, GET_RESPONSE);
if (response.isErrorResponse())
{
@@ -352,7 +350,7 @@ public class ShoutcastV2Handler extends BroadcastHandler
NegotiateMaxPayloadSize negotiateMaxPayloadSize = (NegotiateMaxPayloadSize) UltravoxMessageFactory
.getMessage(UltravoxMessageType.NEGOTIATE_MAX_PAYLOAD_SIZE);
negotiateMaxPayloadSize.setMaximumPayloadSize(mMaxPayloadSize, 14000);
response = send(negotiateMaxPayloadSize, true);
response = send(negotiateMaxPayloadSize, GET_RESPONSE);
mMaxPayloadSize = ((NegotiateMaxPayloadSize) response).getMaximumPayloadSize();
List<String> metadata = new ArrayList<>();
@@ -364,7 +362,7 @@ public class ShoutcastV2Handler extends BroadcastHandler
ConfigureIcyName icyName = (ConfigureIcyName) UltravoxMessageFactory
.getMessage(UltravoxMessageType.CONFIGURE_ICY_NAME);
icyName.setName(getShoutcastConfiguration().getStreamName());
response = send(icyName, false);
response = send(icyName, NO_RESPONSE_EXPECTED);
}
if (getShoutcastConfiguration().getStreamGenre() != null)
@@ -374,7 +372,7 @@ public class ShoutcastV2Handler extends BroadcastHandler
ConfigureIcyGenre icyGenre = (ConfigureIcyGenre) UltravoxMessageFactory
.getMessage(UltravoxMessageType.CONFIGURE_ICY_GENRE);
icyGenre.setGenre(getShoutcastConfiguration().getStreamGenre());
response = send(icyGenre, false);
response = send(icyGenre, NO_RESPONSE_EXPECTED);
}
if (getShoutcastConfiguration().getURL() != null)
@@ -382,16 +380,16 @@ public class ShoutcastV2Handler extends BroadcastHandler
ConfigureIcyURL icyURL = (ConfigureIcyURL) UltravoxMessageFactory
.getMessage(UltravoxMessageType.CONFIGURE_ICY_URL);
icyURL.setURL(getShoutcastConfiguration().getURL());
response = send(icyURL, false);
response = send(icyURL, NO_RESPONSE_EXPECTED);
}
ConfigureIcyPublic icyPublic = (ConfigureIcyPublic) UltravoxMessageFactory
.getMessage(UltravoxMessageType.CONFIGURE_ICY_PUBLIC);
icyPublic.setPublic(getShoutcastConfiguration().isPublic());
response = send(icyPublic, false);
response = send(icyPublic, NO_RESPONSE_EXPECTED);
Standby standby = (Standby) UltravoxMessageFactory.getMessage(UltravoxMessageType.STANDBY);
response = send(standby, true);
response = send(standby, GET_RESPONSE);
if (response.isValidResponse())
{
@@ -412,7 +410,7 @@ public class ShoutcastV2Handler extends BroadcastHandler
for (UltravoxMessage message : messages)
{
mLog.debug("Sending metadata message");
send(message, true);
send(message, GET_RESPONSE);
}
mLog.debug("We're connected!!!");

View File

@@ -65,14 +65,14 @@ public class AdjacentStatusBroadcastExtended extends PDUMessage
sb.append( " RFSS:" + getRFSS() );
sb.append( " SITE:" + getSiteID() );
sb.append( " CTRL CHAN:" + getReceiveIdentifier() + "-" + getReceiveChannel() );
sb.append( " CTRL CHAN:" + getTransmitIdentifier() + "-" + getTransmitChannel() );
sb.append( " DN:" + getDownlinkFrequency() );
sb.append( " " + getTransmitIdentifier() + "-" + getTransmitChannel() );
sb.append( " UP:" + getUplinkFrequency() );
sb.append( " " + getReceiveIdentifier() + "-" + getReceiveChannel() );
sb.append( " UP:" + getUplinkFrequency() );
sb.append( " SYS SVC CLASS:" + getSystemServiceClass() );