#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:
Denny
2016-11-06 09:33:49 -05:00
parent 893cbba277
commit 357979a5dd
85 changed files with 3418 additions and 2117 deletions

View File

@@ -21,6 +21,7 @@ import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlTransient;
import alias.id.broadcast.BroadcastChannel;
import playlist.version1.Group;
import alias.id.esn.Esn;
import alias.id.fleetsync.FleetsyncID;
@@ -36,7 +37,7 @@ import alias.id.talkgroup.TalkgroupID;
import alias.id.uniqueID.UniqueID;
@SuppressWarnings( "deprecation" )
@XmlSeeAlso( { Esn.class, FleetsyncID.class, Group.class, LoJackFunctionAndID.class,
@XmlSeeAlso( {BroadcastChannel.class, Esn.class, FleetsyncID.class, Group.class, LoJackFunctionAndID.class,
MDC1200ID.class, Min.class, MPT1327ID.class, NonRecordable.class,
Priority.class, SiteID.class, StatusID.class, TalkgroupID.class,
UniqueID.class } )

View File

@@ -20,20 +20,20 @@ package alias.id;
public enum AliasIDType
{
ESN( "ESN" ),
Fleetsync( "Fleetsync" ),
LoJack( "LoJack" ),
LTRNetUID( "LTR-Net UID" ),
FLEETSYNC( "Fleetsync" ),
LOJACK( "LoJack" ),
LTR_NET_UID( "LTR-Net UID" ),
MDC1200( "MDC-1200" ),
MIN( "Passport MIN" ),
MPT1327( "MPT-1327" ),
Site( "Site" ),
Status( "Status" ),
Talkgroup( "Talkgroup" ),
SITE( "Site" ),
STATUS( "Status" ),
TALKGROUP( "Talkgroup" ),
Invert( "Audio Inversion" ),
Priority( "Audio Priority" ),
NonRecordable( "Audio Non-Recordable" ),
Streaming( "Audio Streaming" );
INVERT( "Audio Inversion" ),
PRIORITY( "Audio Priority" ),
NON_RECORDABLE( "Audio Non-Recordable" ),
BROADCAST_CHANNEL( "Audio Broadcast Channel" );
private String mLabel;

View File

@@ -17,6 +17,7 @@
******************************************************************************/
package alias.id;
import audio.broadcast.BroadcastModel;
import gui.editor.Editor;
import gui.editor.EmptyEditor;
@@ -61,10 +62,13 @@ public class AliasIdentifierEditor extends Editor<Alias>
private EditorContainer mEditorContainer = new EditorContainer();
private AliasModel mAliasModel;
private BroadcastModel mBroadcastModel;
public AliasIdentifierEditor( AliasModel model )
public AliasIdentifierEditor( AliasModel aliasModel, BroadcastModel broadcastModel )
{
mAliasModel = model;
mAliasModel = aliasModel;
mBroadcastModel = broadcastModel;
init();
}
@@ -120,45 +124,35 @@ public class AliasIdentifierEditor extends Editor<Alias>
JPopupMenu menu = new JPopupMenu();
menu.add( new AddAliasIdentifierItem( AliasIDType.ESN ) );
menu.add( new AddAliasIdentifierItem( AliasIDType.Fleetsync ) );
menu.add( new AddAliasIdentifierItem( AliasIDType.LoJack ) );
menu.add( new AddAliasIdentifierItem( AliasIDType.LTRNetUID ) );
menu.add( new AddAliasIdentifierItem( AliasIDType.FLEETSYNC) );
menu.add( new AddAliasIdentifierItem( AliasIDType.LOJACK) );
menu.add( new AddAliasIdentifierItem( AliasIDType.LTR_NET_UID) );
menu.add( new AddAliasIdentifierItem( AliasIDType.MDC1200 ) );
menu.add( new AddAliasIdentifierItem( AliasIDType.MPT1327 ) );
menu.add( new AddAliasIdentifierItem( AliasIDType.MIN ) );
menu.add( new AddAliasIdentifierItem( AliasIDType.Site ) );
menu.add( new AddAliasIdentifierItem( AliasIDType.Status ) );
menu.add( new AddAliasIdentifierItem( AliasIDType.Talkgroup ) );
menu.add( new AddAliasIdentifierItem( AliasIDType.SITE) );
menu.add( new AddAliasIdentifierItem( AliasIDType.STATUS) );
menu.add( new AddAliasIdentifierItem( AliasIDType.TALKGROUP) );
menu.addSeparator();
menu.add( new AddAliasIdentifierItem( AliasIDType.BROADCAST_CHANNEL) );
boolean separatorAdded = false;
if( hasItem() )
{
Alias alias = getItem();
if( !alias.hasCallPriority() )
{
if( !separatorAdded )
{
menu.addSeparator();
separatorAdded = true;
}
menu.add( new AddAliasIdentifierItem( AliasIDType.Priority ) );
}
if( alias.isRecordable() )
{
if( !separatorAdded )
{
menu.addSeparator();
separatorAdded = true;
}
menu.add( new AddAliasIdentifierItem( AliasIDType.NonRecordable ) );
menu.add( new AddAliasIdentifierItem( AliasIDType.NON_RECORDABLE) );
}
if( !alias.hasCallPriority() )
{
menu.add( new AddAliasIdentifierItem( AliasIDType.PRIORITY) );
}
}
menu.show( e.getComponent(), e.getX(), e.getY() );
}
} );
@@ -327,7 +321,7 @@ public class AliasIdentifierEditor extends Editor<Alias>
removeAll();
//This will always give us an editor
mEditor = AliasFactory.getEditor( aliasID );
mEditor = AliasFactory.getEditor( aliasID, mBroadcastModel );
add( mEditor );

View File

@@ -0,0 +1,81 @@
/*******************************************************************************
* sdrtrunk
* Copyright (C) 2014-2016 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
******************************************************************************/
package alias.id.broadcast;
import alias.id.AliasID;
import alias.id.AliasIDType;
import javax.xml.bind.annotation.XmlAttribute;
public class BroadcastChannel extends AliasID
{
private String mChannelName;
public BroadcastChannel()
{
}
/**
* Name of the broadcast channel configuration
*/
@XmlAttribute(name="channel")
public String getChannelName()
{
return mChannelName;
}
/**
* Sets the name of the broadcast channel configuration
*/
public void setChannelName(String channel)
{
mChannelName = channel;
}
@Override
public AliasIDType getType()
{
return AliasIDType.BROADCAST_CHANNEL;
}
@Override
public boolean isValid()
{
return mChannelName != null;
}
@Override
public boolean matches( AliasID id )
{
return false;
}
@Override
public String toString()
{
if(isValid())
{
return "Broadcast Channel: " + mChannelName;
}
else
{
return "Broadcast Channel: None Selected";
}
}
}

View File

@@ -0,0 +1,91 @@
/*******************************************************************************
* sdrtrunk
* Copyright (C) 2014-2016 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
******************************************************************************/
package alias.id.broadcast;
import alias.id.AliasID;
import audio.broadcast.BroadcastModel;
import gui.editor.DocumentListenerEditor;
import net.miginfocom.swing.MigLayout;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;
public class BroadcastChannelEditor extends DocumentListenerEditor<AliasID>
{
private static final long serialVersionUID = 1L;
private static final String HELP_TEXT = "<html>"
+ "<h3>Audio Broadcast Channel</h3>"
+ "Name of a audio streaming broadcast configuration<br>"
+ "to be used for streaming audio to an external<br>"
+ "streaming server";
private JComboBox<String> mBroadcastConfigurations;
public BroadcastChannelEditor(AliasID aliasID, BroadcastModel broadcastModel)
{
List<String> channelNames = broadcastModel.getBroadcastConfigurationNames();
mBroadcastConfigurations = new JComboBox<String>(channelNames.toArray(new String[channelNames.size()]));
setItem( aliasID );
initGUI();
}
private void initGUI()
{
setLayout( new MigLayout( "fill,wrap 1", "[]", "[][]" ) );
add( new JLabel( "Broadcast Channel" ), "grow" );
add(mBroadcastConfigurations, "grow");
BroadcastChannel channel = (BroadcastChannel)getItem();
if(channel.isValid())
{
mBroadcastConfigurations.setSelectedItem(channel.getChannelName());
}
JLabel help = new JLabel( "Help ..." );
help.setForeground( Color.BLUE.brighter() );
help.setCursor( new Cursor( Cursor.HAND_CURSOR ) );
help.addMouseListener( new MouseAdapter()
{
@Override
public void mouseClicked( MouseEvent e )
{
JOptionPane.showMessageDialog( BroadcastChannelEditor.this,
HELP_TEXT, "Help", JOptionPane.INFORMATION_MESSAGE );
}
} );
add( help, "align left" );
}
@Override
public void save()
{
((BroadcastChannel)getItem()).setChannelName((String)mBroadcastConfigurations.getSelectedItem());
}
}

View File

@@ -74,6 +74,6 @@ public class FleetsyncID extends AliasID
@Override
public AliasIDType getType()
{
return AliasIDType.Fleetsync;
return AliasIDType.FLEETSYNC;
}
}

View File

@@ -101,7 +101,7 @@ public class LoJackFunctionAndID extends AliasID
@Override
public AliasIDType getType()
{
return AliasIDType.LoJack;
return AliasIDType.LOJACK;
}
@Override

View File

@@ -8,7 +8,7 @@ public class NonRecordable extends AliasID
@Override
public AliasIDType getType()
{
return AliasIDType.NonRecordable;
return AliasIDType.NON_RECORDABLE;
}
@Override

View File

@@ -78,6 +78,6 @@ public class Priority extends AliasID
@Override
public AliasIDType getType()
{
return AliasIDType.Priority;
return AliasIDType.PRIORITY;
}
}

View File

@@ -63,6 +63,6 @@ public class SiteID extends AliasID
@Override
public AliasIDType getType()
{
return AliasIDType.Site;
return AliasIDType.SITE;
}
}

View File

@@ -70,6 +70,6 @@ public class StatusID extends AliasID
@Override
public AliasIDType getType()
{
return AliasIDType.Status;
return AliasIDType.STATUS;
}
}

View File

@@ -78,6 +78,6 @@ public class TalkgroupID extends AliasID
@Override
public AliasIDType getType()
{
return AliasIDType.Talkgroup;
return AliasIDType.TALKGROUP;
}
}

View File

@@ -70,6 +70,6 @@ public class UniqueID extends AliasID
@Override
public AliasIDType getType()
{
return AliasIDType.LTRNetUID;
return AliasIDType.LTR_NET_UID;
}
}