package us.sosia.video.stream.channel; import java.awt.Dimension; 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 us.sosia.video.stream.handler.H264StreamDecoder; import us.sosia.video.stream.handler.StreamClientHandler; import us.sosia.video.stream.handler.StreamClientListener; import us.sosia.video.stream.handler.StreamFrameListener; public class StreamClientChannelPipelineFactory implements ChannelPipelineFactory{ protected final StreamClientListener streamClientListener; protected final StreamFrameListener streamFrameListener; protected final Dimension dimension; public StreamClientChannelPipelineFactory( StreamClientListener streamClientListener, StreamFrameListener streamFrameListener, Dimension dimension) { super(); this.streamClientListener = streamClientListener; this.streamFrameListener = streamFrameListener; 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 falst --> ture ,if using the netty's frame codec pipeline.addLast("stream handler", new H264StreamDecoder(streamFrameListener,dimension,false,false)); return pipeline; } }