package streamExample.channel;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder;
import streamExample.agent.EncodedFrameListener;
import streamExample.handler.H264StreamDecoder;
import streamExample.handler.StreamClientHandler;
import streamExample.handler.StreamClientListener;
import streamExample.handler.StreamFrameListener;
import java.awt.*;
public class StreamClientChannelPipelineFactory implements ChannelPipelineFactory {
protected final StreamClientListener streamClientListener;
protected final StreamFrameListener streamFrameListener;
protected final Dimension dimension;
private final EncodedFrameListener encodedFrameListener;
public StreamClientChannelPipelineFactory(
StreamClientListener streamClientListener,
StreamFrameListener streamFrameListener,
EncodedFrameListener encodedFrameListener,
Dimension dimension) {
super();
this.streamClientListener = streamClientListener;
this.streamFrameListener = streamFrameListener;
this.encodedFrameListener = encodedFrameListener;
this.dimension = dimension;
}
@Override
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline pipeline = Channels.pipeline();
// add an simple indicator handler
pipeline.addLast("stream client handler", new StreamClientHandler(streamClientListener));
// add the frame codec
pipeline.addLast("frame decoder", new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 4, 0, 4));
// add the video stream handler
// change the below false --> true ,if using the netty's frame codec
pipeline.addLast("encoded image notifier", new EncodedImageNotifier(encodedFrameListener));
pipeline.addLast("stream handler", new H264StreamDecoder(streamFrameListener, dimension, false, false));
return pipeline;
}
}