package com.destinationradiodenver.mobileStreaming;
import java.util.Collection;
import org.jboss.logging.Logger;
import org.red5.server.adapter.MultiThreadedApplicationAdapter;
import org.red5.server.api.stream.IBroadcastStream;
import org.red5.server.api.stream.IStreamListener;
import org.red5.server.api.stream.ISubscriberStream;
import org.red5.server.stream.ClientBroadcastStream;
import com.destinationradiodenver.mobileStreaming.messages.StreamStatusMessage;
import com.destinationradiodenver.mobileStreaming.messages.StreamStatusMessage.Status;
public class Application extends MultiThreadedApplicationAdapter {
private static final Logger log = Logger.getLogger(Application.class);
private static final StreamStatusDispatcher streamStatusDispatcher = new StreamStatusDispatcher();
@Override
public void streamPublishStart(IBroadcastStream stream) {
//TODO: Programatic hostname
StreamStatusMessage statusMessage = createStreamStatusMessage(Status.ADDED, stream.getScope().getName(), stream.getPublishedName(), "127.0.0.1");
streamStatusDispatcher.dispatch(statusMessage);
super.streamPublishStart(stream);
}
@Override
public void streamBroadcastClose(IBroadcastStream stream) {
//TODO: Programatic hostname
log.infof("streamBroadcastClose: %s; %s", stream, stream.getPublishedName());
StreamStatusMessage statusMessage = createStreamStatusMessage(Status.REMOVED, stream.getScope().getName(), stream.getPublishedName(), "127.0.0.1");
streamStatusDispatcher.dispatch(statusMessage);
super.streamBroadcastClose(stream);
}
@Override
public void streamSubscriberStart(ISubscriberStream stream) {
StreamStatusMessage statusMessage = createStreamStatusMessage(Status.SUBSCRIBER_ADDED, stream.getScope().getName(), stream.getBroadcastStreamPublishName(), "127.0.0.1");
streamStatusDispatcher.dispatch(statusMessage);
super.streamSubscriberStart(stream);
}
@Override
public void streamSubscriberClose(ISubscriberStream stream) {
StreamStatusMessage statusMessage = createStreamStatusMessage(Status.SUBSCRIBER_REMOVED, stream.getScope().getName(), stream.getBroadcastStreamPublishName(), "127.0.0.1");
streamStatusDispatcher.dispatch(statusMessage);
super.streamSubscriberClose(stream);
}
public void recordShow(String publishedName) {
ClientBroadcastStream cbs = (ClientBroadcastStream) getBroadcastStream(getScope(), publishedName);
String recordname = publishedName + String.valueOf(System.currentTimeMillis() / 1000L);
try{
cbs.saveAs(recordname, false);
StreamStatusMessage statusMessage = createStreamStatusMessage(Status.STARTED_RECORDING, getScope().getName(), publishedName, "127.0.0.1");
streamStatusDispatcher.dispatch(statusMessage);
}catch (Exception e){
e.printStackTrace();
}
}
public void stopRecordingShow(String publishedName) {
ClientBroadcastStream cbs = (ClientBroadcastStream) getBroadcastStream(getScope(), publishedName);
Collection<IStreamListener> isls = cbs.getStreamListeners();
cbs.stopRecording();
for(IStreamListener sl : isls)
cbs.removeStreamListener(sl);
StreamStatusMessage statusMessage = createStreamStatusMessage(Status.STOPPED_RECORDING, getScope().getName(), publishedName, "127.0.0.1");
streamStatusDispatcher.dispatch(statusMessage);
}
public StreamStatusMessage createStreamStatusMessage(Status status, String scopeName, String publishedName, String hostname){
StreamStatusMessage statusMessage = new StreamStatusMessage();
statusMessage.setStatus(status);
statusMessage.setScopeName(scopeName);
statusMessage.setPublishedName(publishedName);
statusMessage.setServerHostname(hostname);
return statusMessage;
}
}