最近在搞在线UDP视频传输,在客户端抓图,压缩后生成数据存储在
FrameBuf:array [0..704*576*3 ] of Byte; 这样的一个数组中
再通过 IdUDPClient1.SendBuffer(FrameBuf,Ret); 将数据发送到服务端,现在我想怎么样才能在服务端得到的TStream中转换成 FrameBuf并进行解压。或者谁有最简单的点对点视频,包括采集,压缩,解压,显示,要求100K的网络中不卡的视频100R收 

解决方案 »

  1.   

    首先,UDP发送的包字节数不要太大,你这704*576*3得是多少字节啊。
    每个UDP包不要超过1024字节。你先创建一个缓冲区,行将生成的数据放在这个缓冲区,然后循环每次发送 1024 字节。在每个数据包前添加包序号,
    接收时按顺序处理。
    要提高速度,一个是网络,在就是对源数据进行压缩处理。
    至于怎么压缩那就不知道了,这可以每个搞视频语音传输聊天的核心技术。
      

  2.   

    TStream的派生类TMemoryStream有个Memory属性,是指针类型,始终指向Stream的首字节。你可以这样访问
    type
      PFrameBuf = ^TFrameBuf;
      TFrameBuf = array [0..704*576*3 ] of Byte;  PFrameBuf(stream.Memory)[0]
      

  3.   

    setlength(buffer,size);
    stream.Position := 0;
    stream.read(buffer[0],size);