问大家一下,为什么搞了半天,还在云里雾里徘徊, 想撞墙啊, 那里有泡沫做的墙,我撞。
还有个问题问大家, 请问我有可能把  流媒体自己研究出来吗。好想踢足球啊!!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分  
    这里发言,表示您接受了CSDN社区的用户行为准则。 
    请对您的言行负责,并遵守中华人民共和国有关法律法规,尊重网上道德。 
    转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。 sf(算法)
      

  2.   

    package com.rtsp;import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.InetAddress;
    import java.net.Socket;public class Test {
    private static int seq = 1 ;
    private static final String CRLF = "\r\n";
    private static final String URL = "rtsp://192.168.4.45:554/service?";
    //private static final String URL = "rtsp://192.168.3.80:554/D:\\1122.mp4";
    /**
    * @param args
    * @throws IOException
    */
    public static void main(String[] args) throws IOException {
    Test t = new Test();
    t.start();
    }private void start() throws IOException {
    // TODO 自动生成方法存根
    String mes = "";Socket s = new Socket(InetAddress.getByName("124.42.50.52"), 554);
    PrintWriter out = new PrintWriter(s.getOutputStream());
    BufferedInputStream bis = new BufferedInputStream(s.getInputStream());// 第一次发数据
    // out.print("OPTIONS rtsp://124.42.50.52:554 RTSP/1.0" + CRLF);
    // out.print("CSeq: 1" + CRLF);
    // out.print("User-Agent: RealMedia Player Version 6.0.9.1235 (linux-2.0-libc6-i386-gcc2.95)"
    // + CRLF);
    // out.print("ClientChallenge: 9e26d33f2984236010ef6253fb1887f7" + CRLF);
    // out.print("PlayerStarttime: [28/03/2003:22:50:23 00:00]" + CRLF);
    // out.print("CompanyID: KnKV4M4I/B2FjJ1TToLycw==" + CRLF);
    // out.print("GUID: 00000000-0000-0000-0000-000000000000" + CRLF);
    // out.print("RegionData: 0" + CRLF);
    // out.print("ClientID: Linux_2.4_6.0.9.1235_play32_RN01_EN_586" + CRLF);
    // out.print("Pragma: initiate-session" + CRLF);
    // out.print(CRLF);
    // out.print(CRLF);
    // out.flush();
    // mes = read(bis);
    // System.out.println(mes);//String realChallenge1 = getValue(mes, "RealChallenge1: ");//System.out.println("2:-->" + mes);
    // 第二次发送数据
    out.print("DESCRIBE " + URL + " RTSP/1.0"
    + CRLF);out.print("CSeq: " + seq++ + CRLF);
    // out.print("User-Agent: RealMedia Player Version 6.0.9.1235 (linux-2.0-libc6-i386-gcc2.95)"
    // + CRLF);
    out.print("Accept: application/sdp" + CRLF);
    //out.print("Session:" + session + CRLF);
    out.print("Bandwidth: 10485800" + CRLF);
    out.print("SupportsMaximumASMBandwidth: 1" + CRLF);
    out.print("GUID: 00000000-0000-0000-0000-000000000000" + CRLF);
    out.print("Require: implicit-play" + CRLF);
    out.print("RegionData: 0" + CRLF);
    out.print(CRLF);
    out.print(CRLF);
    out.flush();
    mes = read(bis);
    System.out.println("DESCRIBE:-->" + mes);//String realChallenge2 = RealChallenge.calcChallenge(realChallenge1);
    //String realCheckSum = RealChallenge.calcCheckSum(realChallenge2);
    // 第三次发送数据
    out.print("SETUP rtsp://124.42.50.52:554/service/streamid=0 RTSP/1.0"
    + CRLF);
    out.print("CSeq: " + seq++ + CRLF);
    //out.print("RealChallenge2: " + realChallenge2 + ", sd=" + realCheckSum
    // + CRLF);
    out.print("RDTFeatureLevel: 2" + CRLF);
    // out.print("User-Agent: RealMedia Player Version 6.0.9.1235 (linux-2.0-libc6-i386-gcc2.95)"
    // + CRLF);
    out.print("Transport: x-pn-tng/tcp; mode=play" + CRLF);
    //out.print("If-Match:" + session + CRLF);
    out.print(CRLF);
    out.print(CRLF);
    out.flush();
    System.out.println("SETUP:-->" + mes);
    String session = getValue(mes, "Session:");
    System.out.println("11111111??:" + session);
    // 第四次发送数据
    // out.print("SETUP rtsp://124.42.50.52:554/service/streamid=1 RTSP/1.0"
    // + CRLF);
    // out.print("CSeq: " + seq++ + CRLF);
    // out.print("Subscribe: stream=0;rule=0,stream=0;rule=1" + CRLF);
    // out.print("RDTFeatureLevel: 2" + CRLF);
    // out.print("Transport: x-pn-tng/tcp; mode=play" + CRLF);
    // out.print("User-Agent: RealMedia Player Version 6.0.9.1235 (linux-2.0-libc6-i386-gcc2.95)"
    // + CRLF);
    // out.print("Session:" + session + CRLF);
    // out.print(CRLF);
    // out.print(CRLF);
    // out.flush();
    // System.out.println("SETUP:-->" + mes);// 可能会用UDP传输数据,真晕啊// 第五次发送数据// out.print("SET_PARAMETER rtsp://124.42.50.52:554/service RTSP/1.0"
    // + CRLF);
    // out.print("CSeq: 5" + CRLF);
    // out.print("Subscribe: stream=0;rule=0,stream=0;rule=1,stream=1;rule=0,stream=1;rule=1"
    // + CRLF);
    // //out.print("Session:" + session + CRLF);
    // //out.print(CRLF);
    // out.print(CRLF);
    // out.flush();
    //
    // mes = read(bis);
    // System.out.println("SET_PARAMETER:-->" + mes);
    session = getValue(mes, "Session:");
    out.print("PLAY " + URL + " RTSP/1.0" + CRLF);
    out.print("CSeq: " + seq++ + CRLF);
    out.print("Session:" + session + CRLF);
    // out.print("User-Agent: RealMedia Player Version 6.0.9.1235 (linux-2.0-libc6-i386-gcc2.95)"
    // + CRLF);
    out.print("Range: npt=0.000-" + CRLF);
    out.print(CRLF);
    out.print(CRLF);
    out.flush();
    mes = read(bis);System.out.println("PLAY:-->" + mes);byte[] b = new byte[1024];
    int t = 0, t1 = 0;
    boolean f = true;
    StringBuilder sb = new StringBuilder();
    BufferedOutputStream bos = new BufferedOutputStream(
    new FileOutputStream("d:/tmp.rm"));while ((t = bis.read(b)) > 0) {
    System.out.println(new String(b, 0, t));
    // if (f) {
    // // 没有找到
    // t1 = sb.length();
    // sb.append(new String(b, 0, t));
    // int index = sb.indexOf(CRLF + CRLF);
    // if (index < 0)
    // continue;
    // f = false;
    // bos.write(b, index - t1 + 2, b.length + t1 - 2 - index);
    // } else {
    // bos.write(b, 0, t);
    // }
    // System.out.println("读取:" + t + "bits");
    }
    System.out.println("完成");
    bos.close();
    bis.close();
    s.close();
    }private static String read(BufferedInputStream bis) throws IOException {
    byte[] b = new byte[1024];
    StringBuilder sb = new StringBuilder();int r = 0;
    while (sb.toString().indexOf(CRLF + CRLF) < 0 && (r = bis.read(b)) > 0) {
    sb.append(new String(b, 0, r));
    }
    return sb.toString();
    }private static String getValue(String mes, String key) {
    int index = mes.indexOf(key);
    if (index < 0)
    return null;
    return (mes.substring(index + key.length(), mes.indexOf("\r\n", index)));
    }

      

  3.   

    晕。。你还自己造轮子呢。。你用一个开源的就可以啦 red5 就可以解决你的这个问题啦。。
      

  4.   

    哥都结贴了,你跑过来了,Red5什么东东啊,他是使用使用RTMP作为流媒体传输协议我用的是rtsp协议