diff --git a/src/audio/broadcast/AudioBroadcaster.java b/src/audio/broadcast/AudioBroadcaster.java index 59c903c7..be544ae1 100644 --- a/src/audio/broadcast/AudioBroadcaster.java +++ b/src/audio/broadcast/AudioBroadcaster.java @@ -223,7 +223,8 @@ public abstract class AudioBroadcaster implements IAudioPacketListener } catch(IOException ioe) { - mLog.error("Error deleting temporary internet recording file: " + recording.getPath().toString()); + mLog.error("Stream [" + getBroadcastConfiguration().getName() + "] - error deleting temporary internet " + + "recording file: " + recording.getPath().toString() + " - " + ioe.getMessage()); } } @@ -354,44 +355,51 @@ public abstract class AudioBroadcaster implements IAudioPacketListener { if(mProcessing.compareAndSet(false, true)) { - if(mInputStream == null || mInputStream.available() <= 0) + try { - if(mFinalSilencePadding > 0) + if(mInputStream == null || mInputStream.available() <= 0) { - broadcastAudio(mSilenceGenerator.generate(mFinalSilencePadding)); - mFinalSilencePadding = 0; + if(mFinalSilencePadding > 0) + { + broadcastAudio(mSilenceGenerator.generate(mFinalSilencePadding)); + mFinalSilencePadding = 0; + } + + nextRecording(); } - nextRecording(); - } - - if(mInputStream != null) - { - //We need to stream at 13.888 fps (144 byte frame) to achieve 2000 Bps or 16 kbps - mBytesStreamedRequired += 2000; //2000 bytes per second for 16 kbps data rate - int bytesToStream = mBytesStreamedRequired - mBytesStreamedActual; - - //Trim length to whole-frame intervals (144 byte frame) - bytesToStream -= (bytesToStream % 144); - - int length = Math.min(bytesToStream, mInputStream.available()); - - byte[] audio = new byte[length]; - - try + if(mInputStream != null) { - mBytesStreamedActual += mInputStream.read(audio); + //We need to stream at 13.888 fps (144 byte frame) to achieve 2000 Bps or 16 kbps + mBytesStreamedRequired += 2000; //2000 bytes per second for 16 kbps data rate + int bytesToStream = mBytesStreamedRequired - mBytesStreamedActual; - broadcastAudio(audio); + //Trim length to whole-frame intervals (144 byte frame) + bytesToStream -= (bytesToStream % 144); + + int length = Math.min(bytesToStream, mInputStream.available()); + + byte[] audio = new byte[length]; + + try + { + mBytesStreamedActual += mInputStream.read(audio); + + broadcastAudio(audio); + } + catch(IOException ioe) + { + mLog.error("Error reading from in-memory audio recording input stream", ioe); + } } - catch(IOException ioe) + else { - mLog.error("Error reading from in-memory audio recording input stream", ioe); + broadcastAudio(mSilenceGenerator.generate(PROCESSOR_RUN_INTERVAL_MS)); } } - else + catch(Exception e) { - broadcastAudio(mSilenceGenerator.generate(PROCESSOR_RUN_INTERVAL_MS)); + mLog.error("Error while processing audio streaming queue", e); } mProcessing.set(false); @@ -447,17 +455,18 @@ public abstract class AudioBroadcaster implements IAudioPacketListener metadataUpdateRequired = false; } + + removeRecording(recording); } catch(IOException ioe) { - mLog.error("Error reading temporary audio stream recording [" + recording.getPath().toString() + - "] - skipping recording"); + mLog.error("Stream [" + getBroadcastConfiguration().getName() + "] error reading temporary audio " + + "stream recording [" + recording.getPath().toString() + "] - skipping recording - ", ioe); mInputStream = null; + metadataUpdateRequired = false; } - removeRecording(recording); - broadcast(new BroadcastEvent(AudioBroadcaster.this, BroadcastEvent.Event.BROADCASTER_QUEUE_CHANGE)); } diff --git a/src/audio/broadcast/BroadcastModel.java b/src/audio/broadcast/BroadcastModel.java index fa0f10d2..9f0416a5 100644 --- a/src/audio/broadcast/BroadcastModel.java +++ b/src/audio/broadcast/BroadcastModel.java @@ -53,11 +53,11 @@ public class BroadcastModel extends AbstractTableModel implements Listener