Java媒体框架(JMF):该核心框架支持不同媒体(如:音频输出和视频输出)间的时钟同步。它是一个标准的扩展框架,允许用户制作纯音频流和视频流。
这里只是说模拟视频通话的过程,而关于JMF的学习介绍请另见其他文章。
2.
JMF在处理对媒体数据方面体现了很强的功能,MyQQ的制作在这学期的前段时间已经完成了视频通话功能的模拟。语音聊天不太直观,无法截图,但其原理也和视频通话一样,只是处理的数据流不同而已。
视频聊天的过程如下:
(1).服务器VideoListener监听视频聊天请求
(2)收到用户A请求后(A把自己的Ip和端口发给服务端)
(3)客户端线程接收服务端发来的信息。根据信息的不同进行处理,需要处理的基本信息可能有:a.请求视频 b.撤销视频请求 c.同意视频通话 d.不同意视频通话
比较服务端所有的连接
如果用户名B和用户A请求的用户名B一样就向该用户发送用户请求,再读取用户B的回应,
如果用户B同意语音或者视频聊天,通知用户A,此时两用户都启动两个类,一个是发送并播放自己画面的类,另一个是等待接收对方的视频流或者音频流,收到即播放。
如果用户B不同意,将结果发回给用户A,结束此次请求
传输过程采用RTP协议,可以处理多道数据流(混合数据流),例如可以把音频和视频流一起传输过去,在接收方接收到数据流时再进行处理,分出音频流和视频流,就可以实现在视频的同时进行语音聊天了。
3.
下面模拟视频通话的过程:
(1) 视频服务器监听截图
(2)模拟一个ll用户登录
(3)模拟一个用户ss登录
(4)ss回应ll的视频截图
(5)ll申请与ss视频聊天反馈信息截图
(6)ss接受ll聊天请求,显示本地视频并传送数据流截图
(7) 用户ll接到ss传来的数据流,处理并播放数据流
4.
还有一些问题没有解决,例如因为视频设备只能供一个用户使用,如果一台机器登录两个用户,并且他们都要和其他好友视频通话,就会产生“抢资源”的现象,这个问题依然没有解决。还有一个比较突出的是:如果一个用户同时和多个用户视频通话,上面的情况依然会发生,虽然查到资料说可以采用克隆数据源的办法来解决这个问题,但是几经尝试仍未果。腾讯QQ可以解决这样的问题,但是它究竟怎么实现的我们却不得而知。
上面两个是比较突出的问题,如果你有解决的办法,请留下你的想法。
5.
如果需要代码请到CSDN下载(の,貌似CSDN有个毛病,就是刚上传的东西查看不到,所以我也不能给出网址了)-----现在可以了,http://download.csdn.net/source/2220344