说得越清楚,我会结贴分越高!!第一  我想问的是流媒体文件或者图像文件传输的问题,我有点搞不明白,怎样比如 A方 向 B方 传输一个视频文件?怎样组织缓冲区进行传输?说说基本的步骤?是不是一般文件头,信息体数据分别先后写到缓冲区?第二  比如我要用系统API写一个录音程序?那么,应该怎样组织缓冲区接收录音信息?我把它保存在一个文件,这个文件应该根据什么格式写入?或者你要播放一个你录好的声音文件,是不是还要分析这个文件的头啊?但是缓冲区又是怎样的反正就是关于  文件—缓冲区—数据格式  这三者不知道关系? 下面我举个例子,我要传一个MP3格式的文件给对方,有5M,但是我准备的缓冲区只有512K,装不下5M啊,信息头和信息数据是不是应该分开传,分开传对方接收的数据不就分开了吗?求高手指点?

解决方案 »

  1.   

    "我要传一个MP3格式的文件给对方,有5M,但是我准备的缓冲区只有512K,装不下5M啊,信息头和信息数据是不是应该分开传,分开传对方接收的数据不就分开了吗?求高手指点?"
    应该分开的。设计两个线程,一个传输数据,一个传输控制信息(如果需要的话)。数据当然要分开,接受端可以将这些数据再组装起来。
      

  2.   

    如果你是自己定义一套收发机制,那发送的时候你可以把文件拆成N个短包依次发送,你自己定义这个包的格式,在接收端再进行组包处理。录音一般用双缓冲,一般写成wav格式。先写文件头,再写入录音数据。播放音频文件显然需要分析文件头,不然播放器怎么知道音频的编码格式是什么。文件就是按照一定的数据格式存储的,他们是对应关系。缓冲区是你在编程的时候才用到的用来临时存储数据的。和文件、数据格式没有必然联系。
      

  3.   

    第一,你如果只是传输一个文件的话,而不是流式的数据。无论你怎么组织,只要按照源文件的顺序排列原文件的数据就行。不需要关心文件头。
    第二,数据格式的话,有很多种mp3,wav,wma,rm,他们的编码方式都不同。也有各自对应的解码方式。至于它们是否是公开的就不知道了。最后一问,请看“第一”。over
      

  4.   

    楼主要想A向B传输视频文件,可以在A和B两端各开辟一条线程用来传输视频文件,采用TCP,A先把视频文件的名称和大小发过去,B接收到后创建接收视频文件的线程,A也创建一条线程发视频文件内容,此时数据包中只有视频文件内容信息头和信息数据分开传,可以先发送一个文件信息头过去,然后再只发文件数据,直到文件发送完
      

  5.   

    看在你100分的面子上我给你说说。
    1)传文件的时候
    这个比较简单,A方按照与B方约定的数据块大小,利用SOCKET发给B方 B方每接到一个数据包时候就写下文件,记下OFFSET。当然你也可以等20个数据包写一次也可,先保存在内存里。这样对磁盘的压力比较小。
    如果考虑断点续传的话,就做一些标记。2)实时视频
    A方需要先用VFW或者DSHOW采集,然后需要用H264或者其它编码格式压缩,每采集一帧视频数据用H264压缩后,发送给B方。考虑到数据包到达的先后顺序以及套接字的效率,需要用RTP,UDP协议。B方接收后可以实时播放。另外考虑到带宽以及外网丢包的问题。视频分为I帧和P帧,实在不行就丢掉P帧。3)音频
    类似视频,压缩使用GIPS,G.729都可以,QQ用的是GIPS。传输也用RTP来确保到达的先后顺序。音频需要有个JITTER BUFFER,就是抖动缓冲区,而不是来了数据就播放,这样声音会比较平滑。缺点是缓冲区越大延迟也越大。
      

  6.   

    你5M的文件先分成512K每一块 顺序的传 传完最前面512K就传随后的第二个512K 缓冲区公用的
    接收方建立一个空文件写 收满512K写一下 因为总是从文件最后面开始写也就是附加 你这个文件最终被还原成一个5M的mp3