mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-14 01:27:34 -05:00
#30 - WIP - adds Icecast TCP(v2.3) and HTTP(v2.4) server support. Adds streaming tab and ability to add/delete/change streaming configurations. Adds streaming channel alias id so that aliases can be tagged to stream to one or more stream channels. Adds initial support for broadcastify streaming.
This commit is contained in:
@@ -33,6 +33,8 @@ import javax.xml.bind.JAXBException;
|
||||
import javax.xml.bind.Marshaller;
|
||||
import javax.xml.bind.Unmarshaller;
|
||||
|
||||
import audio.broadcast.BroadcastConfigurationEvent;
|
||||
import audio.broadcast.BroadcastModel;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@@ -56,6 +58,7 @@ public class PlaylistManager implements ChannelEventListener
|
||||
|
||||
private ThreadPoolManager mThreadPoolManager;
|
||||
private AliasModel mAliasModel;
|
||||
private BroadcastModel mBroadcastModel;
|
||||
private ChannelModel mChannelModel;
|
||||
private ChannelMapModel mChannelMapModel;
|
||||
private Path mCurrentPlaylistPath;
|
||||
@@ -74,11 +77,13 @@ public class PlaylistManager implements ChannelEventListener
|
||||
*/
|
||||
public PlaylistManager( ThreadPoolManager threadPoolManager,
|
||||
AliasModel aliasModel,
|
||||
BroadcastModel broadcastModel,
|
||||
ChannelModel channelModel,
|
||||
ChannelMapModel channelMapModel )
|
||||
ChannelMapModel channelMapModel)
|
||||
{
|
||||
mThreadPoolManager = threadPoolManager;
|
||||
mAliasModel = aliasModel;
|
||||
mBroadcastModel = broadcastModel;
|
||||
mChannelModel = channelModel;
|
||||
mChannelMapModel = channelMapModel;
|
||||
|
||||
@@ -103,6 +108,15 @@ public class PlaylistManager implements ChannelEventListener
|
||||
schedulePlaylistSave();
|
||||
}
|
||||
} );
|
||||
|
||||
mBroadcastModel.addListener(new Listener<BroadcastConfigurationEvent>()
|
||||
{
|
||||
@Override
|
||||
public void receive(BroadcastConfigurationEvent broadcastConfigurationEvent)
|
||||
{
|
||||
schedulePlaylistSave();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -166,6 +180,7 @@ public class PlaylistManager implements ChannelEventListener
|
||||
mPlaylistLoading = true;
|
||||
|
||||
mAliasModel.addAliases( playlist.getAliases() );
|
||||
mBroadcastModel.addBroadcastConfigurations(playlist.getBroadcastConfigurations());
|
||||
mChannelModel.addChannels( playlist.getChannels() );
|
||||
mChannelMapModel.addChannelMaps( playlist.getChannelMaps() );
|
||||
|
||||
@@ -219,6 +234,7 @@ public class PlaylistManager implements ChannelEventListener
|
||||
PlaylistV2 playlist = new PlaylistV2();
|
||||
|
||||
playlist.setAliases( mAliasModel.getAliases() );
|
||||
playlist.setBroadcastConfigurations(mBroadcastModel.getBroadcastConfigurations());
|
||||
playlist.setChannels( mChannelModel.getChannels() );
|
||||
playlist.setChannelMaps( mChannelMapModel.getChannelMaps() );
|
||||
|
||||
@@ -277,7 +293,7 @@ public class PlaylistManager implements ChannelEventListener
|
||||
}
|
||||
catch ( Exception e )
|
||||
{
|
||||
mLog.error( "coulcn't open outputstream to save playlist [" +
|
||||
mLog.error( "couldn't open outputstream to save playlist [" +
|
||||
mCurrentPlaylistPath.toString() + "]", e );
|
||||
}
|
||||
finally
|
||||
|
||||
@@ -17,24 +17,23 @@
|
||||
******************************************************************************/
|
||||
package playlist;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import alias.Alias;
|
||||
import audio.broadcast.BroadcastConfiguration;
|
||||
import controller.channel.Channel;
|
||||
import controller.channel.map.ChannelMap;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlSeeAlso;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import alias.Alias;
|
||||
import controller.channel.Channel;
|
||||
import controller.channel.map.ChannelMap;
|
||||
|
||||
@XmlSeeAlso( { Alias.class,Channel.class,ChannelMap.class } )
|
||||
|
||||
@XmlSeeAlso( { Alias.class,Channel.class,ChannelMap.class,BroadcastConfiguration.class} )
|
||||
@XmlRootElement( name = "playlist" )
|
||||
public class PlaylistV2
|
||||
{
|
||||
//Version 2 member variables
|
||||
private List<Alias> mAliases = new ArrayList<>();
|
||||
private List<BroadcastConfiguration> mBroadcastConfigurations = new ArrayList<>();
|
||||
private List<Channel> mChannels = new ArrayList<>();
|
||||
private List<ChannelMap> mChannelMaps = new ArrayList<>();
|
||||
|
||||
@@ -74,4 +73,15 @@ public class PlaylistV2
|
||||
{
|
||||
mChannelMaps = channelMaps;
|
||||
}
|
||||
|
||||
@XmlElement(name = "stream")
|
||||
public List<BroadcastConfiguration> getBroadcastConfigurations()
|
||||
{
|
||||
return mBroadcastConfigurations;
|
||||
}
|
||||
|
||||
public void setBroadcastConfigurations(List<BroadcastConfiguration> configurations)
|
||||
{
|
||||
mBroadcastConfigurations = configurations;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -153,7 +153,7 @@ public class AliasListOld implements Comparable<AliasListOld>
|
||||
mESN.put( esn.getEsn(), alias );
|
||||
}
|
||||
break;
|
||||
case Fleetsync:
|
||||
case FLEETSYNC:
|
||||
FleetsyncID fs = (FleetsyncID)id;
|
||||
|
||||
if( fs.getIdent().contains( "*" ) )
|
||||
@@ -167,7 +167,7 @@ public class AliasListOld implements Comparable<AliasListOld>
|
||||
mFleetsync.put( fs.getIdent(), alias );
|
||||
}
|
||||
break;
|
||||
case LoJack:
|
||||
case LOJACK:
|
||||
mLoJack.put( (LoJackFunctionAndID)id, alias );
|
||||
break;
|
||||
case MDC1200:
|
||||
@@ -218,12 +218,12 @@ public class AliasListOld implements Comparable<AliasListOld>
|
||||
mMobileID.put( min.getMin(), alias );
|
||||
}
|
||||
break;
|
||||
case LTRNetUID:
|
||||
case LTR_NET_UID:
|
||||
UniqueID uid = (UniqueID)id;
|
||||
|
||||
mUniqueID.put( uid.getUid(), alias );
|
||||
break;
|
||||
case Site:
|
||||
case SITE:
|
||||
SiteID siteID = (SiteID)id;
|
||||
|
||||
if( siteID.getSite().contains( "*" ) )
|
||||
@@ -237,10 +237,10 @@ public class AliasListOld implements Comparable<AliasListOld>
|
||||
}
|
||||
|
||||
break;
|
||||
case Status:
|
||||
case STATUS:
|
||||
mStatus.put( ((StatusID)id).getStatus(), alias );
|
||||
break;
|
||||
case Talkgroup:
|
||||
case TALKGROUP:
|
||||
TalkgroupID tgid = (TalkgroupID)id;
|
||||
|
||||
if( tgid.getTalkgroup().contains( "*" ) )
|
||||
@@ -255,8 +255,8 @@ public class AliasListOld implements Comparable<AliasListOld>
|
||||
mTalkgroup.put( tgid.getTalkgroup(), alias );
|
||||
}
|
||||
break;
|
||||
case NonRecordable:
|
||||
case Priority:
|
||||
case NON_RECORDABLE:
|
||||
case PRIORITY:
|
||||
//We don't maintain lookups for these items
|
||||
break;
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user