mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 16:47:31 -05:00
(icecast) Add support for inline metadata (#1212)
This commit is contained in:
@@ -52,6 +52,10 @@ public abstract class AudioStreamingBroadcaster<T extends BroadcastConfiguration
|
||||
private long mMaximumRecordingAge;
|
||||
private AtomicBoolean mStreaming = new AtomicBoolean();
|
||||
|
||||
protected boolean mInlineActive = false;
|
||||
protected int mInlineInterval;
|
||||
protected int mInlineRemaining = -1;
|
||||
|
||||
/**
|
||||
* AudioBroadcaster for streaming audio recordings to a remote streaming audio server. Audio recordings are
|
||||
* generated by an internal StreamManager that converts an inbound stream of AudioPackets into a recording of the
|
||||
@@ -89,7 +93,7 @@ public abstract class AudioStreamingBroadcaster<T extends BroadcastConfiguration
|
||||
/**
|
||||
* Broadcast binary audio data frames or sequences.
|
||||
*/
|
||||
protected abstract void broadcastAudio(byte[] audio);
|
||||
protected abstract void broadcastAudio(byte[] audio, IdentifierCollection identifierCollection);
|
||||
|
||||
/**
|
||||
* Protocol-specific metadata updater
|
||||
@@ -212,6 +216,8 @@ public abstract class AudioStreamingBroadcaster<T extends BroadcastConfiguration
|
||||
|
||||
if(!connected())
|
||||
{
|
||||
//Reset inline metadata
|
||||
mInlineRemaining = -1;
|
||||
//Remove all pending audio recordings
|
||||
while(!mAudioRecordingQueue.isEmpty())
|
||||
{
|
||||
@@ -265,6 +271,7 @@ public abstract class AudioStreamingBroadcaster<T extends BroadcastConfiguration
|
||||
{
|
||||
private AtomicBoolean mProcessing = new AtomicBoolean();
|
||||
private ByteArrayInputStream mInputStream;
|
||||
private IdentifierCollection mInputIdentifierCollection;
|
||||
private long mFinalSilencePadding = 0;
|
||||
private int mBytesToStreamPerInterval = 0;
|
||||
|
||||
@@ -289,7 +296,7 @@ public abstract class AudioStreamingBroadcaster<T extends BroadcastConfiguration
|
||||
try
|
||||
{
|
||||
int read = mInputStream.read(audio);
|
||||
broadcastAudio(audio);
|
||||
broadcastAudio(audio, mInputIdentifierCollection);
|
||||
}
|
||||
catch(IOException ioe)
|
||||
{
|
||||
@@ -303,7 +310,7 @@ public abstract class AudioStreamingBroadcaster<T extends BroadcastConfiguration
|
||||
|
||||
for(byte[] silence: finalSilence)
|
||||
{
|
||||
broadcastAudio(silence);
|
||||
broadcastAudio(silence, null);
|
||||
}
|
||||
|
||||
mFinalSilencePadding = 0;
|
||||
@@ -314,7 +321,7 @@ public abstract class AudioStreamingBroadcaster<T extends BroadcastConfiguration
|
||||
List<byte[]> silenceFrames = mSilenceGenerator.generate(PROCESSOR_RUN_INTERVAL_MS);
|
||||
for(byte[] silence: silenceFrames)
|
||||
{
|
||||
broadcastAudio(silence);
|
||||
broadcastAudio(silence, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -343,6 +350,7 @@ public abstract class AudioStreamingBroadcaster<T extends BroadcastConfiguration
|
||||
}
|
||||
|
||||
mInputStream = null;
|
||||
mInputIdentifierCollection = null;
|
||||
|
||||
//Peek at the next recording but don't remove it from the queue yet, so we can inspect the start time for
|
||||
//age limits and/or delay elapsed
|
||||
@@ -377,6 +385,7 @@ public abstract class AudioStreamingBroadcaster<T extends BroadcastConfiguration
|
||||
mBytesToStreamPerInterval = (int)((double)audio.length / intervals);
|
||||
|
||||
mInputStream = new ByteArrayInputStream(audio);
|
||||
mInputIdentifierCollection = nextRecording.getIdentifierCollection();
|
||||
|
||||
mFinalSilencePadding = PROCESSOR_RUN_INTERVAL_MS -
|
||||
(nextRecording.getRecordingLength() % PROCESSOR_RUN_INTERVAL_MS);
|
||||
@@ -401,6 +410,7 @@ public abstract class AudioStreamingBroadcaster<T extends BroadcastConfiguration
|
||||
"stream recording [" + nextRecording.getPath().toString() + "] - skipping recording - ", ioe);
|
||||
|
||||
mInputStream = null;
|
||||
mInputIdentifierCollection = null;
|
||||
metadataUpdateRequired = false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user