最近有一个项目,需要视频传输,我对此不很熟悉,请教各位高手。
在网上看到一些,视频传输的一些例子是用UDP协议的。为什么不用TCP协议呢,另外有看到一些关也IOCP的介绍是使用TCP协议的,到底哪个方案好些。
另外用directx show是不是本身就能可以实现视频传输,性能如何?
在网上看到一些,视频传输的一些例子是用UDP协议的。为什么不用TCP协议呢,另外有看到一些关也IOCP的介绍是使用TCP协议的,到底哪个方案好些。
另外用directx show是不是本身就能可以实现视频传输,性能如何?
directshow本身并不涉及网络传输,不过可以参考dsnetwork示例(一个filter而已)至于UDP还是TCP,其实都不是问题。UDP需要考虑丢包和包乱序的问题, TCP不用考虑这些,但效率可能略低(不过得看UDP实现代码的质量了)。
你还可以用DirectShow,也可以用底层的Wave相关的API来实现~~~
见rfc1880, rfc3550
另外请教一下用ICSeqCompressFrame压以后的数据,是否直接存到文件里,其他的播放器就能播放吗?
这样352*288*25*3~7M=56Mbps,
用mpeg4压缩率相对比较大,但也要根据各帧间图像变化幅度来压缩,所以压缩后的码流是不固定的。
然后播放器需要有数据流解压缩的驱动程序。一般来说这样就可以播放了吧
avi格式是通用的啊,是遵循RIFF格式的文件
MainAVIHeader:
DWORD dwMicroSecPerFrame; // 视频帧间隔时间(以毫秒为单位)
DWORD dwMaxBytesPerSec; // 这个AVI文件的最大数据率
DWORD dwPaddingGranularity; // 数据填充的粒度
DWORD dwFlags; // AVI文件的全局标记,比如是否含有索引块等
DWORD dwTotalFrames; // 总帧数
DWORD dwInitialFrames; // 为交互格式指定初始帧数(非交互格式应该指定为0)
DWORD dwStreams; // 本文件包含的流的个数
DWORD dwSuggestedBufferSize; // 建议读取本文件的缓存大小(应能容纳最大的块)
AVIStreamHeader:
DWORD dwFlags; // 标记:是否允许这个流输出?调色板是否变化?
WORD wPriority; // 流的优先级(当有多个相同类型的流时优先级最高的为默认流)
WORD wLanguage;
DWORD dwInitialFrames; // 为交互格式指定初始帧数
DWORD dwScale; // 这个流使用的时间尺度
DWORD dwRate;
DWORD dwStart; // 流的开始时间
DWORD dwLength; // 流的长度(单位与dwScale和dwRate的定义有关)
DWORD dwSuggestedBufferSize; // 读取这个流数据建议使用的缓存大小
DWORD dwQuality; // 流数据的质量指标(0 ~ 10,000)