|
|
发表于 2006-1-6 10:57:59
|
显示全部楼层
其实大多数支持流媒体的传输协议,普遍的也只有mms,rtsp和流http协议3个了
流http协议没什么特殊的,就是简单的把流媒体文件当作普通的文件一部分一部分的传输数据
mss也没什么太大新鲜的,微软自己的东东,这就不奇怪了,为什么mms协议url后面大多数是wmv,asf等格式的文件,而没有rm文件呢,和real死对头嘛.踏简单的把文件的文件头部分(包括数据块的头部分)在一开始交互的时候先传输出来,然后在进行数据传输部分.(具体协议的交互网上有资料描述,不过是en的资料)
rtsp协议成为主流,real_rtsp的组合与mms_asf系列的组合一直是比较普遍的.(wmv.wma和asf属于同一系列下,从asf发展出来的).rtsp协议传输一开始的时候使用SDP描述协议(当然不只这一种,这种普遍而已)传输文件头信息.把rm文件的头部进行了解析传送出来,然后再进行传输数据.
注意rtsp的interleave特点哦,为了这写程序的时候费了好大脑筋.当然rtsp作为主流,微软渐渐把mms过度为rtsp,现在rtsp也支持asf系列文件的传输,但是解析sdp有所不同.(比rm简单多了,real这个变态,可麻烦了),想了解更多的朋友,可以看看mplayer代码,里面对于rtsp传输rm部分.代码还是很容易看的懂的.但是mplayer好象不支持rtsp传输asf系列的文件,只支持mms传输asf文件.所以这部分是自己抓包,慢慢重新啃出来的.
流媒体本来原理就是边下载边播放,所以用来下载东西本来就不奇怪嘛,想net transport一样,大家通讯都用同一种协议,当然可以下载了.只不过在生成本地文件的时候比较麻烦而已.mplayer当然不需要生成,缓存就ok了.net transport和flashget那样还得了解rm,asf文件的具体格式才好.
rm文件在rfc里有,简单,从rtsp的sdp描述里可以生成头文件,数据传输的时候还得重新生成一个数据包的包头+数据,
asf文件比较复杂,文件头n多,头都大了,100多页的文档,好在rtsp和mms传输里都很简单,头部不需要分析,rtsp里只需要base64的解码,而mms里根本不用管.数据部分也不用在重新生成一个packet_head也是直接用,因为本来传输的时候就是packet_heat+data嘛,所以easy. |
|