说得越清楚,我会结贴分越高!!第一 我想问的是流媒体文件或者图像文件传输的问题,我有点搞不明白,怎样比如 A方 向 B方 传输一个视频文件?怎样组织缓冲区进行传输?说说基本的步骤?是不是一般文件头,信息体数据分别先后写到缓冲区?第二 比如我要用系统API写一个录音程序?那么,应该怎样组织缓冲区接收录音信息?我把它保存在一个文件,这个文件应该根据什么格式写入?或者你要播放一个你录好的声音文件,是不是还要分析这个文件的头啊?但是缓冲区又是怎样的反正就是关于 文件—缓冲区—数据格式 这三者不知道关系? 下面我举个例子,我要传一个MP3格式的文件给对方,有5M,但是我准备的缓冲区只有512K,装不下5M啊,信息头和信息数据是不是应该分开传,分开传对方接收的数据不就分开了吗?求高手指点?
应该分开的。设计两个线程,一个传输数据,一个传输控制信息(如果需要的话)。数据当然要分开,接受端可以将这些数据再组装起来。
第二,数据格式的话,有很多种mp3,wav,wma,rm,他们的编码方式都不同。也有各自对应的解码方式。至于它们是否是公开的就不知道了。最后一问,请看“第一”。over
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,就是抖动缓冲区,而不是来了数据就播放,这样声音会比较平滑。缺点是缓冲区越大延迟也越大。
接收方建立一个空文件写 收满512K写一下 因为总是从文件最后面开始写也就是附加 你这个文件最终被还原成一个5M的mp3