【急,要交项目了】类似于做QQ的视频聊天...求教原理
我自己做了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
这样一直下去
我很急。。。。请大家帮帮忙!马上要交项目了!
------解决方案--------------------视频不会 只会发图片 但是 可以给你改进思路
1.图片格式,给定小格式的图片,你自己查下那个格式的图片小。
2.图片传输过来是否给内存流清理资源。
你看看能帮助你不
------解决方案--------------------
用udp发送,每100毫秒发送一张图片给对方(效率高的话可以考虑更短的发送时间),只要对方收到新图片就放到pictruebox!这只是我的一个思路,毕竟没做过视频聊天的。
------解决方案--------------------
晕死。
视频或者语音通讯,最关键的是开发编码、解码器,传送的是帧的差分信息而不是整个帧。
会点通讯不算什么技术。
------解决方案--------------------楼上正解哈c#本来就封装得够完整了。这个并不算是技术。
------解决方案--------------------
------解决方案--------------------你这有点QQ远程协助的味道了。哈哈。
视频聊天这种事情,三言两语很难说清,要想有人帮忙,估计得花银子了
------解决方案--------------------让你知道自己的问题如果不算是一种对你的帮助的话,我想你也就一般地在北大青鸟毕业就行了,不要想“视频聊天”这种项目。我面试过好几个在3、4个月的培训班里做过这个项目的学生,比如说我问他们“加好友的流程是怎样的”,他们(甚至一位“组长”)竟然回答我说:“先在SQL Server数据库里查询出所有用户人员,放到Tree上显示,然后用户为好友打勾,然后将勾选的人保存到用户的好友表中做为好友”。我整个要吐了。为什么那样的培训班要聘请那样的只做过OA程序的人当老师却要坑爹学员说他会做IM呢?为什么?
------解决方案--------------------视频聊天
远程控制
我都做不了
我只能做点
客户端发个hello
服务端回个world
------解决方案--------------------
没有现成的示例代码,只能简单说说了
1:用摄像头抓视频,DirectX.Capture 可以抓 , VFW的API也可以抓,还有一些非官方的封装类也可以抓视频数据. 具体代码可以去搜索,例子应该不少
2:将数据转化为流媒体并且压缩数据,传递给接收端,接受端最好设置一个循环缓冲区,设置两个指针,一个表示当前播放位置,一个表示当前存储位置,这样可以最大程度的保证播放的流畅性。
3:视频聊天通过服务器中转有点不太靠谱,使用的人越多,服务器负荷越重 最好还是点对点的方式,采用UDP协议,当然如果要支持不同局域网内的机器使用,需要涉及到打洞穿透路由的技术,网上去查很多这方面原理和代码