使用jrtplib传输一个视频

可以抽象出几个独立的模块
1.网络传输
2.视频
  2.1 视频源采集
  2.1 视频压缩、还原
  2.2 视频回放

如果要源代码,估计是不可能了,每个环节都是蛮大的工程,
不过我可以告诉你每个模块需要注意的环节

1.网络传输
  1.1)TCP不太适合做点对点传输,所以必须将协议层定位在UDP上
  1.2) UDP互联网上传输是不可靠的,在数据包超过1400字节的情况下,易出现路由器舍弃包,如何解决多媒体数据可靠到达呢,有2种不同的方向,各有所长:
  1.2.1) JRTP模式,网络传输层自身不去做数据包拆组包工作,要求视频模块控制到最后的视频数据在1400字节以内,由于视频不可靠到达,并不会影响最终显示结果,最多是丢包时有花屏现象,同时JRTP有一个长处,可以在互联网上做组播。短处显而易见,无法解决不可靠的问题,视频还好,如果是文件传输的话,就会出大问题了,一般都接收不完全的。
  1.2.2)扩展可靠UDP协议,类似的开源项目有Enet,UDT,Raknet,他们都不限制调用者数据包长度,内部都封装了可靠送达机制,缺点就是没法做组播。
  Enet到1.2版本以后基本不再更新,Enet有一个BUG,就是在中国的双网环境下无法做到双网互通,即电信的A点无法与网通的B点 P2P通讯,优点是稳定,传输速度也可以。
  UDT现在的版本是4.1,一直在更新,作者好像是一个美籍华人(赞一个!),优点是传输速度超快,几乎没缺点,我使用只发现一个BUG,应用程序在COM模式下会出现退出时程序异常,作者曾答应修正,但是sourceforge一直被禁,也不知道改了没有。
  Raknet在很多网络游戏里面有使用,我没看出什么优点,做得早应该算优点吧,缺点我测试下来,传输速度有大问题,在网络游戏里面反正数据量不大,也无所谓,做视频传输,不推荐使用。
  1.3)NAT穿透问题
  这个不算什么新问题了,自己google吧。

2.视频
2.1视频采集
  可在DirectX SDK里面看范例
2.2视频压缩
  现在主流使用.263,.264编码(FlV即采用该格式)
  源码比较难找,我也推荐另外一个XVID,这个可以到xvid.org上去下载.
2.3视频回放
  还是DirectX SDK自己看范例

你可能感兴趣的:(互联网,网络,Google,flv,路由器,网络游戏)