【急,要交项目了】类似于做QQ的视频聊天...求教原理

xiaoyao1212121 2012-08-03 09:26:19
我自己做了QQ的视频聊天
这里跳过客户端和服务器的部分:
(就是我要跟令一个客户端进行视频聊天,我就发送我开放的端口给服务器,服务器那边得到我的Ip加上我开放的端口帮我转发给那个客户端,这步已经连接上了)

【请求视频】客户端1 (port)-> 服务器(请求用户的ip + port) -> 【被请求】客户端2

之后 客户端1(ip + port)开一个线程[函数:f()] <--> 客户端2(ip+port) 也开一个线程[函数: g()]

然后,让客户端1,先发图片过去
private int flag = 0;

void f()
{
if(flag == 0)
{
把自己视频上的图片截图下来,序列化之后发给 客户端2
flag = 1;
}
else
{
1.接受发来的图片,显示在pictureBox上
2.把自己视频上的图片截图下来,序列化之后发给 客户端2
}
}
客户端2,
void g()
{
1.接受到图片之后显示在picturebox上
2.把自己视频上的图片截图下来,序列化之后发给 客户端2
}

这样处理好像发送得很慢,超级卡,而且有的时候 甚至不能通讯..
序列化,接受包都没问题

问题就是好像这种模式不是视频聊天的模式

我是各自两边都开线程
然后 客户端1 这边先发图片, 客户端2接受到图片之后,再发一张给 客户端1, 客户端1接受到之后 再发一张给客户端2
这样一直下去

我很急。。。。请大家帮帮忙!马上要交项目了!
...全文
3493 60 打赏 收藏 转发到动态 举报
写回复
用AI写文章
60 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhang338748 2014-09-26
  • 打赏
  • 举报
回复
本来想找人建站的,可是百度搜到的尽是不靠谱的,要么没技术要么巨坑钱。这里靠谱,慢慢学,自己建站!
HLS Developer 2013-06-01
  • 打赏
  • 举报
回复
新手路过,按图片显示是视频的形式吗 我正也想做个这个
Y_N_Y 2012-09-08
  • 打赏
  • 举报
回复
[Quote=引用 56 楼 的回复:]
引用 55 楼 的回复:
为了你这帖子 我刚刚注册这个账号。
总之请你加油 作为比你更新的新手 请多多指教!


哈哈,大牛不肯以自己真实的号码来回复这条帖子哈!
[/Quote]

完全不是这样的..刚刚接触这块东西。其实我也面临一个视频聊天的项目 但是基本上没有基础 想从头学习。
恩..看了看日期 你这个目前已经做成了吧?
xiaoyao1212121 2012-09-08
  • 打赏
  • 举报
回复
[Quote=引用 54 楼 的回复:]
序列化是指整个图片压缩传过去?
[/Quote]

先把图片压缩了,之后再序列化传过去!!
xiaoyao1212121 2012-09-08
  • 打赏
  • 举报
回复
[Quote=引用 55 楼 的回复:]
为了你这帖子 我刚刚注册这个账号。
总之请你加油 作为比你更新的新手 请多多指教!
[/Quote]

哈哈,大牛不肯以自己真实的号码来回复这条帖子哈!
Y_N_Y 2012-09-07
  • 打赏
  • 举报
回复
为了你这帖子 我刚刚注册这个账号。
总之请你加油 作为比你更新的新手 请多多指教!
M44346460 2012-08-13
  • 打赏
  • 举报
回复
序列化是指整个图片压缩传过去?
a1196218954 2012-08-12
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 的回复:]
没有现成的示例代码,只能简单说说了
1:用摄像头抓视频,DirectX.Capture 可以抓 , VFW的API也可以抓,还有一些非官方的封装类也可以抓视频数据. 具体代码可以去搜索,例子应该不少
2:将数据转化为流媒体并且压缩数据,传递给接收端,接受端最好设置一个循环缓冲区,设置两个指针,一个表示当前播放位置,一个表示当前存储位置,这样可以最大程度的保证播放的流畅性。
3:视频聊天通过服……
[/Quote]
这位大哥回答得就很好,基本上面把需要的知识点都包括进去了。对我很有帮助,谢谢了。
lucene456 2012-08-10
  • 打赏
  • 举报
回复
http://www.adobe.com/cn/products/flash-media-streaming/features.html
flash media server 4.5 的功能
lucene456 2012-08-10
  • 打赏
  • 举报
回复
百科上面的介绍

Flash Media Server 4版本概述   为了满足你能够便捷地开始传送更高质量的媒体体验和互动应用程序的要求,你具有下面4个可以选择的版本:   Flash Media Streaming Server 4:一款能够启动传送HD视频的优秀、低成本选项,它利用广播公司使用的相同实时内容保护措施来保护大部分你目前收看的收费视频。   Flash Media Interactive Server 4: 一项在Flash Media Streaming Server中实现的很合理的设置,它能够利用DVR支持、实时F4F打包技术(基于业界标准MP4-HTTP传送的碎片优化)和IP多播支持,增加你的容量和媒体传送的选项。 该互动服务器也是多用户应用程序的中心,例如具有运行于TCP(目前UDP)的低时延协议的视频聊天和视频归档。   Flash Media Enterprise Server 4: 终极产品,它能够使用具有新的RTMFP协议的对等互助网络(peer-assisted networking)控制大规模媒体传送。 该服务器能够用于在你的企业网中传送更高质量的媒体或将其传送给你的客户,或者用于在大大降低的带宽和基础设施成本的情形下提供用户生成的体验。 Flash Media Development Server 4:你可以使用Flash Media Enterprise server的完全版开始测试和开发你的应用程序。 该版本包含对等互助网络(peer-assisted networking)的完全支持功能,最多可以支持50个对等连接和10个RTMP连接。   Flash Media Server 4功能概述当与Flash Player 10.1和 AIR 2 组合使用时,Flash Media Server 4的所有版本具有下列新的特点和功能(Flash运行环境的移动版也能支持这些功能):   HTTP动态流媒体源服务(HTTP dynamic streaming origin services) (预配置Apache web服务器)支持Flash Media Server 4 用作一个F4F文件格式的源。   绝对时间代码(Absolute timecode) 允许你对音频和视频流进行同步以便支持多摄像角度、音频feed、广告线索和其它数据feed。   动态流媒体的更快速交换功能(Faster switching for dynamic streaming) 可以通过具有RTMP流媒体协议的更快速交换时间来改善多比特速率视频的体验,而RTMP流媒体协议能够减少由波动网络引起的中断。   RTMP缓存改进功能(RTMP buffer enhancements) 通过快进、快退和即时回找功能支持新的预看体验,而这些功能使得你可以提供更为令人心动的体验。   64-位平台(64-bit platform) 可以充分利用大内存空间,支持更大文件以及使得附加的资源可用。   新平台(New platforms) 支持 Microsoft Windows 2008、Red Hat Enterprise Linux 5和CentOS 5.3(一种免费企业级操作系统)以帮助降低总拥有成本(total cost of ownership)。   差异化服务(Differentiated services(DiffServ)支持尽力而为(best-effort)业务保证的服务质量(quality of service),这样你可以确保你的通信和媒体不会中断。   在所有版本的这些公共功能之外,Flash Media Interactive Server 4 还添加了下列功能:   IP多播功能(IP multicast)完全支持IP多播以支持你的业务充分利用使用Flash创建的优秀视频体验的优势,而无需压垮你的网络,并且充分利用现有的支持多播网络。   HTTP动态流媒体实时F4F打包功能(HTTP dynamic streaming live F4F packaging)支持你从任何实时流媒体或服务器侧播放列表(线性流媒体)中生成F4F文件,这些媒体流或播放列表可以利用嵌入Apache服务器传送,或将它们作为内容传送网络的一个源使用。 UDP单播传输功能(UDP Unicast transport)能够充分利用使用UDP服务器-客户端传输的极低时延的优势。
lucene456 2012-08-10
  • 打赏
  • 举报
回复
Red5的主要功能和ADOBE公司的FMS类似,提供基于Flash的流媒体服务的一款基于Java的开源流媒体服务器。它由Java语言编写,使用RTMP作为流媒体传输协议,这与FMS完全兼容。它具有流化FLV、MP3文件,实时录制客户端流为FLV文件,共享对象,实时视频播放、Remoting等功能。用Red5替换FMS后,客户端不用更改可正常运行。
xiaoyao1212121 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 48 楼 的回复:]
Red5的主要功能和ADOBE公司的FMS类似,提供基于Flash的流媒体服务的一款基于Java的开源流媒体服务器。它由Java语言编写,使用RTMP作为流媒体传输协议,这与FMS完全兼容。它具有流化FLV、MP3文件,实时录制客户端流为FLV文件,共享对象,实时视频播放、Remoting等功能。用Red5替换FMS后,客户端不用更改可正常运行。
[/Quote]

呵呵,刚听说....有木有源码给参考下,我现在基础比较差,知道它的功能但并不知道如何把他加到代码里
xiaoyao1212121 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 的回复:]
C#没有封装好的视频传输的库.. DirectShowLib,DShowNET,都没有,现在我也在做这个,做法跟lz一样
[/Quote]
你也是这样做???远程测试如何?
xiaoyao1212121 2012-08-09
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 的回复:]
大哥你用adobe 的 fms 不可以么? c# 里面装个flash 播放器,
服务器 是flash meidia server

或者red5
这样来的快 估计很快就可以拿去忽悠啦
哈哈
没试过呢,不知道这个想法能不能成
[/Quote]

请问这个要怎么使用呢!
  • 打赏
  • 举报
回复
我没做过,不过感觉视频流应该是用些KMP类的算法的吧,就是把你的数据的“变化”给传递过去……
直接发图片感觉好裸啊……你的图片就算想自己裸搞,做个分块,只发送有变化部分可能会好此吧。
另外视频的时候应该是需要保持流畅优先的吧,记得QQ视频最开始的时候,很明显的就是声音和图像没有在时间上对齐,图像有明显地滞后,但是基本可以保持流畅。
另外应该需要有一个缓冲区,然后信号量保护。
剩下的就是看流量和计算能力的问题了,但我估计瓶颈应该还是在流量上,如果流量也没问题,应该会很流畅的。
没做过这种应用,见笑。
大概的一个思路啊……
sxcong 2012-08-09
  • 打赏
  • 举报
回复
视频聊天你竟然发图片。。。。。。
图像占用的带宽比起视频流来是高上百倍的。

使用xvid,压缩视频流发出去,对方再解码播放。使用directshow采集播放比较简单,编解码就用开源的xvid,下载下来,上面有例子。
zhulihui133 2012-08-09
  • 打赏
  • 举报
回复
如果 我做的话
我就采用 flash 来试一下
zhulihui133 2012-08-09
  • 打赏
  • 举报
回复
如果 我做的话
我就采用 flash 来试一下
lucene456 2012-08-09
  • 打赏
  • 举报
回复
如果 我做的话
我就采用 flash 来试一下
lucene456 2012-08-09
  • 打赏
  • 举报
回复
视频的采集通讯 播放都由flash 来完成
加载更多回复(40)

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧