Java 尝试视频流时android中的SocketTimeoutException

Java 尝试视频流时android中的SocketTimeoutException,java,android,Java,Android,我正在尝试在pc和android设备之间制作一个视频流应用程序。所以我得到了这个错误“SocketTimeoutException” 我想知道同样的代码在JavaSE上是否运行良好。 但在android中,它会向服务器发送运行和停止请求,但我无法像JavaSE中那样接收数据包。谢谢。我不确定,也不知道这是否是您想要的,但尽量不要设置超时,只需将这行注释掉:RTPsocket.setTimeout(5)。。。。这可能是因为,这种行为与android和javaSE不同……但只有在需要超时的情况下找到

我正在尝试在pc和android设备之间制作一个视频流应用程序。所以我得到了这个错误“SocketTimeoutException”

我想知道同样的代码在JavaSE上是否运行良好。
但在android中,它会向服务器发送运行和停止请求,但我无法像JavaSE中那样接收数据包。谢谢。

我不确定,也不知道这是否是您想要的,但尽量不要设置超时,只需将这行注释掉:RTPsocket.setTimeout(5)。。。。这可能是因为,这种行为与android和javaSE不同……但只有在需要超时的情况下找到解决办法时才这样做……谢谢你的评论,但它仍然不起作用。但是,如果您有任何关于如何在pc和android设备之间进行视频流传输的信息,这将更加有用,再次感谢。只找到以下内容:
private class ChatOperator extends AsyncTask<Void, Void, Void> {
    DatagramPacket rcvdp;
    DatagramSocket RTPsocket;
     int RTP_RCV_PORT = 25000;
    Timer timer;
    byte[] buf;
    final static int INIT = 0;
    final static int READY = 1;
    final static int PLAYING = 2;
     int state;
    Socket RTSPsocket;
     BufferedReader RTSPBufferedReader;
     BufferedWriter RTSPBufferedWriter;
     String VideoFileName;
    int RTSPSeqNb = 0;
    int RTSPid = 0;
    final static String CRLF = "\r\n";
     int MJPEG_TYPE = 26;

    @Override
    protected Void doInBackground(Void... params) {
        buf = new byte[15000];
        int RTSP_server_port = 4444;
        String ServerHost = "10.0.3.2";
        try {
            InetAddress ServerIPAddr = InetAddress.getByName(ServerHost);

            VideoFileName = "media/movie.Mjpeg";
            RTSPsocket = new Socket(ServerIPAddr, 4444);

            RTSPBufferedReader = new BufferedReader(new InputStreamReader(
                    RTSPsocket.getInputStream()));
            RTSPBufferedWriter = new BufferedWriter(new OutputStreamWriter(
                    RTSPsocket.getOutputStream()));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println(e.toString());
        }
        try {

                RTPsocket = new DatagramSocket(RTP_RCV_PORT);

                RTPsocket.setSoTimeout(5);


            } catch (SocketException se) {
                System.out.println("Socket exception: " + se);
                System.exit(0);
            }

            RTSPSeqNb = 1;

            send_RTSP_request("SETUP");

            if (parse_server_response() != 200)
                System.out.println("Invalid Server Response");
            else {
                state = READY;
                System.out.println("New RTSP state: READY");
            }
        System.out.println("Play Button pressed !");
            RTSPSeqNb++;
            send_RTSP_request("PLAY");
            if (parse_server_response() != 200)
                System.out.println("Invalid Server Response");
            else {
                state = PLAYING;
                System.out.println("New RTSP state: PLAYING");
                new java.util.Timer().scheduleAtFixedRate(new TimerTask() {
                    @Override
                    public void run() {
                        rcvdp = new DatagramPacket(buf, buf.length);

                        try {
                            RTPsocket.receive(rcvdp);
                            RTPpacket rtp_packet = new RTPpacket(rcvdp.getData(), rcvdp.getLength());
                            System.out.println("Got RTP packet with SeqNum # "
                                    + rtp_packet.getsequencenumber() + " TimeStamp "
                                    + rtp_packet.gettimestamp() + " ms, of type "
                                    + rtp_packet.getpayloadtype());
                            rtp_packet.printheader();
                            int payload_length = rtp_packet.getpayload_length();
                            byte[] payload = new byte[payload_length];
                            rtp_packet.getpayload(payload);

                            bmp = BitmapFactory.decodeByteArray(payload,0,payload_length);
                            System.out.print("a packet recieved");
                        } catch (IOException e) {
                            //e.printStackTrace();
                            System.out.println("Nothing Recieved");
                        }
                    }
                }, 0, 200);
            }
        return null;
    }


    private int parse_server_response() {
        int reply_code = 0;

        try {
            String StatusLine = RTSPBufferedReader.readLine();
            StringTokenizer tokens = new StringTokenizer(StatusLine);
            tokens.nextToken();
            reply_code = Integer.parseInt(tokens.nextToken());
            if (reply_code == 200) {
                String SeqNumLine = RTSPBufferedReader.readLine();
                String SessionLine = RTSPBufferedReader.readLine();
                tokens = new StringTokenizer(SessionLine);
                tokens.nextToken();
                RTSPid = Integer.parseInt(tokens.nextToken());
            }
        } catch (Exception ex) {
        }
        return (reply_code);
    }

    private void send_RTSP_request(String request_type) {
        try {

            RTSPBufferedWriter.write(request_type + " " + VideoFileName + " "
                    + "RTSP/1.0" + CRLF);

            RTSPBufferedWriter.write("CSeq: " + RTSPSeqNb + CRLF);

            if (request_type.equals("SETUP")) {
                RTSPBufferedWriter.write("Transport: RTP/UDP; client_port= "
                        + RTP_RCV_PORT + CRLF);
            }
            else {
                RTSPBufferedWriter.write("Session: " + RTSPid + CRLF);
            }

            RTSPBufferedWriter.flush();
        } catch (Exception ex) {

        }
    }

}
RTPsocket.receive(rcvdp);