欢迎来到天天文库
浏览记录
ID:36014344
大小:91.00 KB
页数:5页
时间:2019-04-29
《java异常处理的优劣之道》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、利用JAVA实现局域网的跨平台实时视频传输吴良斌(福建信息职业技术学院福州,350003)摘要:本文首先分析了在局域网中视频传输的特点和模型及存在的问题,并针对不同的平台,提出一种通用的实时视频传输的解决方案。那就是在SUN公司提出的JMF多媒体框架基础上进行扩展,实现一个与平台无关的基于RTP/RTCP协议的流式媒体传输模型的系统设计,由于流媒体传输系统本身是一个复杂和广泛的研究领域,它本身处于不断改进的过程中。基于此在本文的最后阐述了今后流媒体可能的研究方向。关键词:JAVA;客户/服务器;RTP/R
2、TCP;实时视频传输;JMF5绪论目前在局域网内部实时传输视频已经得到广泛应用。且以传输视频的局域网大多数是有线局域网,主要因为有线局域网技术成熟,传输速度快,稳定性好。但在视频数据量大时,也会出现工作不稳定、数据堵塞、甚至于严重的延迟现象。要能实现视频传输与平台的无关性,我们首先要知道在局域网中视频传输的典型模式。在局域网中视频传输采用的是服务器/客户机模式,一个视频系统的功能模块如下图所示,它包括5个功能模块:l视频采集和视频显示:视频采集设备负责将视频信息输入计算机,如数码摄像头等。而视频显示负责播
3、放视频信息,如一般的显示终端。l编码和解码工具:编码软件负责将视频采集设备传送过来的视频信号编码成流媒体格式,而解码软件与之相反负责将媒体数字信号转化成终端可识别的信息。l视频压缩和视频解压:视频媒体数据量巨大必须将编码后的视频媒体数据进行高效的压缩,然后将压缩后的数据在网络上传输。其相应的解压模块负责将数据还原成为原来的流媒体格式。l传输协议:流媒体数据由于自身的特点,在网络上传输时将采用和过去诸如文字,静态图像等不同的网络协议来进行传输。l传输网络:一般来说视频传输可以在现有任何网络上进行传输,更高的
4、带宽将有利于视频传输效率的提高,也能够保证其播放质量。实时视频传输工作流程在上图中,可以看到作为整个传输模式的底层,传输协议有着至关重要的作用。在本文实现的方案中主要采用的是RTP/RTCP协议,该协议是由IETF为视音频的实时传输而设计的传输协议。当前的视频传输系统存在的问题主要有:可扩展性差、格式不统一等。我们都知道JAVA具有平台无关性的特点,对此本文利用JMF(JavaMedia5Framework)的多功能并对其原有接口加以扩展,就可以实现基于RTP/RTCP的流媒体传输模型。1基于JMF架构实
5、现RTP/RTCP传输模型JMF(JavaMediaFramework)是Sun公司提出的Java媒体架构,它是对应Java2平台标准版(J2SE)的一种可选用的应用编程接口(API)。JMF的源代码通过SCSL(Sun社团源代码许可模式)发布。下面给出本文实现视频传输系统的结构及其有关的代码。1.1结构介绍1.1.1服务器:接受多台客户端连接,传送客户端信息VideoServer.java:定义服务器Socket和输入输出流ServerFrame.java:定义服务器界面1.1.2客户端:通过服务器,互
6、相浏览视频、收听音频和文字交流RTPTransmit.java:定义RTP视音频数据传送RTPReceive.java:定义RTP视音频数据接收VFWAuto.java:调用JMF视音频设备接口Client.java:定义客户端Socket和控制RTP传输MainFrame.java:定义客户端主界面和功能1.1.3其他类:服务器和客户端共享包CustInfo.java:客户端信息类Customer.java:客户端请求包,序列化Msg.java:客户端文字聊天记录1.2关键组件的实现1.2.1视频、音频
7、设备捕获在“系统设置”窗口中调用JMF的设备搜索接口,调用代码如下:VFWAuto.java部分代码:publicVFWAuto(){Vectordevices=(Vector)CaptureDeviceManager.getDeviceList(null).clone();Enumerationenum1=devices.elements();while(enum1.hasMoreElements()){CaptureDeviceInfocdi=(CaptureDeviceInfo)enum1.next
8、Element();Stringname=cdi.getName();if(name.startsWith("vfw:"))CaptureDeviceManager.removeDevice(cdi);}intnDevices=0;for(inti=0;i<10;i++){Stringname=com.sun.media.protocol.vfw.VFWCapture.capGetDriverDescriptionName(i
此文档下载收益归作者所有