используя netty для отправки нескольких сообщений RTSP - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу создать клиента RTSP, чтобы отправить сообщение RTSP.Я использую netty, чтобы написать это, но мой код может отправить только одно сообщение.как отправить другое сообщение?Мой код клиента выглядит так:

public class RtspClient {
    public static class ClientHandler extends SimpleChannelInboundHandler<DefaultHttpResponse> {


        @Override
        public void channelReadComplete(ChannelHandlerContext ctx) {
            ctx.flush();
        }


        protected void channelRead0(ChannelHandlerContext ctx, DefaultHttpResponse msg) throws Exception {
            System.out.println(msg.toString());
        }

    }


    public static void main(String[] args) throws InterruptedException {

        EventLoopGroup workerGroup = new NioEventLoopGroup();

        final ClientHandler handler = new ClientHandler();

        Bootstrap b = new Bootstrap();
        b.group(workerGroup);
        b.channel(NioSocketChannel.class);
        b.option(ChannelOption.SO_KEEPALIVE, true);
        b.remoteAddress("127.0.0.1", 8557);
        b.handler(new ChannelInitializer<SocketChannel>() {
            protected void initChannel(SocketChannel ch) {
                ChannelPipeline p = ch.pipeline();
                p.addLast("encoder", new RtspEncoder());
                p.addLast("decoder", new RtspDecoder());

                p.addLast(handler);
            }
        });

        Channel channel = b.connect().sync().channel();

        DefaultHttpRequest request = new DefaultHttpRequest(RtspVersions.RTSP_1_0, RtspMethods.PLAY, "rtsp:123");
        request.headers().add(RtspHeaderNames.CSEQ, 1);
        request.headers().add(RtspHeaderNames.SESSION, "294");
        channel.writeAndFlush(request);

        Thread.sleep(10000);

         System.out.println(channel.isWritable());
         System.out.println(channel.isActive());
            request = new DefaultHttpRequest(RtspVersions.RTSP_1_0, RtspMethods.TEARDOWN, "rtsp3");
            request.headers().add(RtspHeaderNames.CSEQ, 2);
            request.headers().add(RtspHeaderNames.SESSION, "294");


        }
        channel.writeAndFlush(request);
        Scanner sc = new Scanner(System.in);
        sc.nextLine();
        channel.closeFuture().sync();

}

этот код может отправлять только первое сообщение.Сервер не получил вторые данные.как отправить другое сообщение?

1 Ответ

0 голосов
/ 03 декабря 2018

Вы хотите использовать DefaultFullHttpRequest или вам нужно "завершить" каждый DefaultHttpRequest с помощью LastHttpContent.

...