没有必要用三个,用一个Socket即可,使用多线程来接受和处理不同的数据信息!
丢失的问题可能是处理不够及时,采用多线程应该能够解决该问题!

解决方案 »

  1.   

    1,我作的聊天室和语音聊天,没有视频,但是我用两个socket,一个用来发送文本,一个用来发送语音数据。我建议用两个,因为我在进行语音聊天的时候,否则在进行语音聊天的时候,你可能没有办法发送文本(用10兆的带宽实验过)。
    2,数据丢包的问题可以用超时重发,定义一定的时间等待返回数据,(当然这种情况要设计自己的协议返回),你也可以设计一个协议检查当前的网络速度,比如发送一个数据到对方再到返回要用的时间,然后你可以用该时间的几倍作为超时的时间,我时这样实现的。
        希望以上对你有所帮助!
      

  2.   

    说的不是很通顺,我在发送文本信息和语音的时候也是用UDP协议!
      

  3.   

    同意cococut(往事如屁!!!) 。
    如果,数据包丢失不是很严重的话,就不是太要紧。
    如果,你要求数据包丢失很少的话,你可以对udp进行封装
    然后,在接收端和发送端设计设计超时,
      对于接收端,如果收到指定序号的数据包,
    就给接收端发确认的数据包。并设为已收到标志。
    如果,接收到的数据包为已收到的,就抛弃。
    等多长时间收不到,就设超时值。(此时网络必定很坏)
      对于发送端,如果收到指定序号的数据包,这不在发送它。
    隔一段时间,如果收不到确认的数据包,就重发。直到收到它。
    如果网络很坏的话,这就要设一个超时值了。否则,越来越坏。
    比如,发多少次后,丢弃数据包。(语音的话,少数据包不太要紧吧)
      网络的就这些了。
    另外,多线程是一个好主意,不过,语音和文本分开。
    也是一个不错的想法。
      

  4.   

    我建议用两个Socket,一个用来传送video和audio,另一个用来传送字幕,video
    和audio不允许重传,而字幕可以重传.UDP传输的可靠性应该不是很好。
      

  5.   

    实际上,我觉得还是多线程加多个socket比较好一些。
    比较容易控制。
    丢包的问题,可以分开看,
    如果是在局域网内,网络链路很快,那倒无所谓校验的问题。
    如果是在广域网,或是网络链路丢包严重,那就要校验。
    由于传递的是实时的数据,还要考虑时间间隔丢弃的问题。
    可以用异步的方式进行校验,数据报上带时间戳。
    至于UDP还是TCP或是RSTP,sorry,RSTP什么东西我都不知道。
    但是UDP和TCP只是和应用的CPU占用率有关,对网络的压力其实差的并不多。
      

  6.   

    同意jxrcwzhemail(天宇)的看法!
      

  7.   

    首先,你要确定使用环境,LAN OR WAN:若是LAN就没必要使用RTP(实时传输协议),RTCP(实时传输控制协议),建议视频,音频分开传输用UDP(因为视频,音频数据量大,打包在一起一帧放不下),字幕数据用TCP(保证可靠性),这里需要注意的是视音同步的问题,你可以大致计算同一时间段内视音频数据的比例,依照这个比例建立视频音频数据的缓冲区大小,一般来说,同步的问题比较好解决。若是WAN就需要使用RTP,RTCP了,这个需要去看具体的协议标准。简单来讲,RTP就是在UDP的基础上再封装一层,主要是一些控制信息;而RTCP根据这些控制信息,调整带宽,提高优先权等等,以达到改善传输质量的目的。
      

  8.   

    我建议用一个 socket ,使用 udp,数据加个头就好了,多个 socket 没有明显优势
      

  9.   

    我们做过一个语音传输的软件,使用三个socket实现的
    其中一个tcp,两个udp的
    用户验证用tcp
    其他的传输用udp
    感觉还可以呀
    传输的文字信息不大,没什么丢失现象
      

  10.   

    我做的东西现在是用的一个socket,同时要发送音频,视频和字幕信息,视频是每采集一帧,压缩,然后就发送了,音频是每100毫秒取一次数据发送,是在一个线程中处理,字幕就是主线程的,由外部调用发送,三个都使用的这同一个socket,
    服务器是一对多的,可以接受多个客户端的点播。对了,用udp发送数据,一个包(或是一次发送数据),多大为好呢?现在我是没有处理的,压缩的视频数据,当是关键帧时就可能有10K多,非关键帧就少一些。我以前也试过,把发送大的包分小,但在局域网里没看多少差别,是不是在网络差一些就会十分明显了? 到底每次多大为好呢?
      

  11.   

    你可以用一个SOCKET,作一个SOCKET优先级对列,也可以一二级的,然后再进行处理,多线程只是编程比较简章,可以很容易出问题,而且也和单线程差不多,所以我觉得能不用就不用。
      

  12.   

    hello!
      1: 将接受缓冲区开大点可能有好处。  2: 开3个SOCKET可能控制更灵活,而且可以减少每个SOCKET的处理复杂程度,加快SOCKET的处理、响应。  我做UDP的感觉。  个人观点!   谢谢你的QQ程序
      

  13.   

    同意li_zuo_min(打印机) 的观点,分开比较好些,但要注意图像和文字同步问题。
      

  14.   

    我觉得如果单个线程单个Socket可能比较容易控制语音,图像的比例,比较容易作同步,但是多线程多Socket的效率可能会高一些,但是控制同步可能要做的工作多一些,个人意见是多线程,多socket
      

  15.   

    还有我觉得有关UDP丢包的问题,有没有可能是你播出端的速度太快导致接收端来不及接收以至丢包呢?不妨把你播出的速率降下来试一下。
      

  16.   

    还是用三个SOCKET好一点。
    基本同意用多个SOCKET,多个线程
      

  17.   

    对于MPEG1 MPEG2的数据传输可以采用传输流(TS)的格式,我们常用的是程序流(PS)的格式.TS格式以长度为188的定长包进行数据传输.在DVB(数字视频广播)中就是采用这种方式.音频,视频,字幕甚至更多种类的数据可以通过多路复用在同一个通道中传输.音频和视频等可以通过PCR进行同步.过程非常复杂.必须先把PS流转换成TS流(过程比较复杂,必须对MPEG格式很清楚).TS流的具体格式可以参考
    ISO-IEC 13818-1标准
      

  18.   

    面向不可靠连接的视频数据基本上是采用TS格式的.DVB里面是在有线电缆上的单向传输.大家开一参考VideoLan的做法,一个局域网的视频广播系统.可以在
    www.videolan.org上找到,
      

  19.   

    我建议不管是三个SOCKET、多个线程
    还是一个SOCKET、单个线程
    我认为先自己试试,我们也没太多的经验。
      

  20.   

    同意 explorer007(KKcat)  的说法,我认为开辟适当的缓冲是应该的,
    至于是否需要多个SOCKET,我还是倾向只用一个就够了。
      

  21.   

    1。3个SOCKET控制灵活方便些。
    2。同意explorer007(KKcat)的意见
      

  22.   

    最底层只有一个网卡,在真正的数据发送层还是只能一次一个包的发送,
    即使你在应用层使用了多个Socket,也就是在应用层能一次提交多个包给数据发送层,这样对驱动程序处理这种请求的能力要很好,这样包怎么丢失的你更不知道了,驱动也是程序员(只是较牛一点罢了)写的嘛,这个纯粹个人无机之想!
    其实,我对这个嘛...还真不是很懂!
      

  23.   

    如果是 LAN 的话 UDP 就可以工作的很好,我们的软件(网络会议)在
    音频模块测试时就做了一个 UDP 的,效果跟我们用的 RTP 差不多。我
    门做的是多线程的。各模块一个线程。丢数据的问题是不可避免的,音
    频如果用的是 windows  的低级音频函数的话要做到比较好的效果要注
    意线程的安排,缓冲块最好用数组,我试过的版本数组是最好的。另外
     rtp 协议栈国外有教授写了一个现成的,找找看。
      

  24.   

    各位老大,我也要做一个UPD网络传输声音文件的程序,可是对UDP、音频都不了解,请问有没有简单的源程序可以参考,让我入门?编程使用VC6
    请发至[email protected],多谢
    如果能经常联系指导我,也请留下联系方式,菜鸟感激不尽^=^
      

  25.   

    我以前做的是用三个socket,视频,音频和文字分别用三个不同的端口。视频数据包不能设的太大,一般最多512个字节。当数据是i帧时,可以用几个数据包来发送一帧数据。
      

  26.   

    我觉得还是用TCP协议好,用1个socket就够了,不管是什么格式的数据都用二进制流的方式发送。最好建立一个server端,用来监听,转发数据。要发送或接受数据的应用程序当成client端。
      

  27.   

    当然是用三个端口送了,不过要让他们同少可不容易,可以用RTP、RTCP协议来处理一下。
    UDP丢包是必然的,没办法!
      

  28.   

    会话建立可以用 sip ,我没做过,但是我们的软件用了,效果很好。
      

  29.   

    UDP协议是不可靠的传输协议,他不能保证数据不丢失,TCP才是可靠的传输协议,他保证数据可靠的到达,在局域网内应该使用TCP协议来进行传输,如果你的要求比较高,应使用QOS服务,请参考《用TCP/IP进行网络互连》和《WINDOWS网络编程技术》。
      

  30.   

    收到你 的email后,来到这儿,可以没办法帮助你阿,我和你做的很不一样
    很是抱歉,希望你早点找到答案