package org.red5.demos.rtsp; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.red5.proxy.StreamingProxy; import org.red5.server.adapter.MultiThreadedApplicationAdapter; import org.red5.server.api.IContext; import org.red5.server.api.Red5; import org.red5.server.api.scope.IBroadcastScope; import org.red5.server.api.scope.IScope; import org.red5.server.api.stream.IBroadcastStream; import org.red5.server.api.stream.IStreamListener; import org.red5.server.api.stream.IStreamPacket; import org.red5.server.net.rtmp.event.IRTMPEvent; import org.red5.server.scope.BroadcastScope; import org.red5.server.stream.IProviderService; import org.red5.server.stream.message.RTMPMessage; public class Application extends MultiThreadedApplicationAdapter implements IStreamListener { ICYStream output; AxisTest input; StreamingProxy streamer; int limiter = 1024; public boolean appStart(IScope scope) { super.appStart(scope); output = new ICYStream("axis"); output.setScope(scope); input = new AxisTest(output); output.setVideoFramer(input); output.addStreamListener(this); streamer = new StreamingProxy(); streamer.init(); streamer.setApp("bwservice"); streamer.setHost("192.168.10.2"); streamer.setPort(1935); streamer.start("axisrecord" + System.currentTimeMillis() / 1000, "record", new Object[] {}); IContext context = scope.getContext(); IProviderService providerService = (IProviderService) context.getBean(IProviderService.BEAN_NAME); if (providerService.registerBroadcastStream(scope, output.getPublishedName(), output)) { IBroadcastScope bsScope = (BroadcastScope) providerService.getLiveProviderInput(scope, output.getPublishedName(), true); } Thread runner = new Thread(input); runner.start(); return true; } public List<String> getRooms() { List<String> results = new ArrayList<String>(scope.getScopeNames()); return results; } public Set<String> getStreams() { return getBroadcastStreamNames(Red5.getConnectionLocal().getScope()); } public synchronized void checkBW(int seconds, int chunkSize) { BandwidthChecker checker = new BandwidthChecker(Red5.getConnectionLocal(), seconds, chunkSize); this.addScheduledOnceJob(1000, checker); } @Override public void packetReceived(IBroadcastStream stream, IStreamPacket packet) { RTMPMessage m = RTMPMessage.build((IRTMPEvent) packet, packet.getTimestamp()); try { limiter--; if (limiter > 1) { streamer.pushMessage(null, m); } else { if (streamer != null) { stream.removeStreamListener(this); streamer.stop(); streamer = null; } } } catch (IOException e) { e.printStackTrace(); } } }