java异常处理的优劣之道

上传人:xins****2008 文档编号:100697778 上传时间:2019-09-24 格式:DOC 页数:5 大小:92KB
返回 下载 相关 举报
java异常处理的优劣之道_第1页
第1页 / 共5页
java异常处理的优劣之道_第2页
第2页 / 共5页
java异常处理的优劣之道_第3页
第3页 / 共5页
java异常处理的优劣之道_第4页
第4页 / 共5页
java异常处理的优劣之道_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《java异常处理的优劣之道》由会员分享,可在线阅读,更多相关《java异常处理的优劣之道(5页珍藏版)》请在金锄头文库上搜索。

1、利用JAVA实现局域网的跨平台实时视频传输吴良斌(福建信息职业技术学院 福州,350003)摘 要:本文首先分析了在局域网中视频传输的特点和模型及存在的问题,并针对不同的平台,提出一种通用的实时视频传输的解决方案。那就是在SUN 公司提出的JMF 多媒体框架基础上进行扩展,实现一个与平台无关的基于RTP/RTCP 协议的流式媒体传输模型的系统设计,由于流媒体传输系统本身是一个复杂和广泛的研究领域,它本身处于不断改进的过程中。基于此在本文的最后阐述了今后流媒体可能的研究方向。关键词: JAVA; 客户/服务器;RTP/RTCP;实时视频传输;JMF绪论目前在局域网内部实时传输视频已经得到广泛应用

2、。且以传输视频的局域网大多数是有线局域网,主要因为有线局域网技术成熟,传输速度快,稳定性好。但在视频数据量大时,也会出现工作不稳定、数据堵塞、甚至于严重的延迟现象。要能实现视频传输与平台的无关性,我们首先要知道在局域网中视频传输的典型模式。在局域网中视频传输采用的是服务器/客户机模式,一个视频系统的功能模块如下图所示,它包括5 个功能模块:l 视频采集和视频显示:视频采集设备负责将视频信息输入计算机,如数码摄像头等。而视频显示负责播放视频信息,如一般的显示终端。l 编码和解码工具:编码软件负责将视频采集设备传送过来的视频信号编码成流媒体格式,而解码软件与之相反负责将媒体数字信号转化成终端可识别

3、的信息。l 视频压缩和视频解压:视频媒体数据量巨大必须将编码后的视频媒体数据进行高效的压缩,然后将压缩后的数据在网络上传输。其相应的解压模块负责将数据还原成为原来的流媒体格式。l 传输协议:流媒体数据由于自身的特点,在网络上传输时将采用和过去诸如文字,静态图像等不同的网络协议来进行传输。l 传输网络:一般来说视频传输可以在现有任何网络上进行传输,更高的带宽将有利于视频传输效率的提高,也能够保证其播放质量。实时视频传输工作流程在上图中,可以看到作为整个传输模式的底层,传输协议有着至关重要的作用。在本文实现的方案中主要采用的是RTP/RTCP协议,该协议是由IETF 为视音频的实时传输而设计的传输

4、协议。当前的视频传输系统存在的问题主要有:可扩展性差、格式不统一等。我们都知道JAVA 具有平台无关性的特点,对此本文利用JMF(Java Media Framework)的多功能并对其原有接口加以扩展,就可以实现基于RTP/RTCP的流媒体传输模型。1 基于JMF架构实现RTP/RTCP传输模型JMF(Java Media Framework)是Sun公司提出的Java 媒体架构,它是对应Java2平台标准版(J2SE)的一种可选用的应用编程接口(API)。JMF的源代码通过SCSL (Sun 社团源代码许可模式)发布。下面给出本文实现视频传输系统的结构及其有关的代码。1.1 结构介绍1.1

5、.1 服务器:接受多台客户端连接,传送客户端信息VideoServer.java:定义服务器Socket和输入输出流ServerFrame.java:定义服务器界面1.1.2 客户端:通过服务器,互相浏览视频、收听音频和文字交流RTPTransmit.java:定义RTP视音频数据传送RTPReceive.java:定义RTP视音频数据接收VFWAuto.java:调用JMF视音频设备接口Client.java:定义客户端Socket和控制RTP传输MainFrame.java:定义客户端主界面和功能1.1.3 其他类:服务器和客户端共享包CustInfo.java:客户端信息类Custome

6、r.java:客户端请求包,序列化Msg.java:客户端文字聊天记录1.2 关键组件的实现1.2.1 视频、音频设备捕获在“系统设置”窗口中调用JMF的设备搜索接口,调用代码如下:VFWAuto.java部分代码:public VFWAuto() Vector devices = (Vector) CaptureDeviceManager.getDeviceList(null).clone();Enumeration enum1 = devices.elements();while (enum1.hasMoreElements() CaptureDeviceInfo cdi = (Captu

7、reDeviceInfo) enum1.nextElement(); String name = cdi.getName(); if (name.startsWith(vfw:) CaptureDeviceManager.removeDevice(cdi);int nDevices = 0;for (int i = 0; i 1) System.err.println(Found device + name); System.err.println(Querying device. Please wait.); com.sun.media.protocol.vfw.VFWSourceStrea

8、m.autoDetect(i); nDevices+; VFWAuto.java调用了JMF的视频设备搜索接口,它返回一个Vector数组,里面存放包含设备信息的CaptureDeviceInfo类对象。获取本地视音频数据public static javax.media.Player player = null;public static MediaLocator audioml = null,videoml=null;DataSource dataSources = new DataSource2;/建立混合数据源dataSources0 = Manager.createDataSourc

9、e(videoml);dataSources1 = Manager.createDataSource(audioml);DataSource ds = Manager.createMergingDataSource(dataSources);player = Manager.createRealizedPlayer(ds);/建立媒体播放器player.start();Component comp;if (comp = player.getVisualComponent() != null) /comp.setSize(localVideoPanel.WIDTH, localVideoPane

10、l.HEIGHT); localVideoPanel.removeAll(); localVideoPanel.add(comp);/放置视频组件 localVideoActive=true;1.2.2 视音频数据实时传输步骤一:建立两个数据源,分别存储音频数据和视频数据。dataSources0 = Manager.createDataSource(MainFrame.videoml);dataSources1 = Manager.createDataSource(MainFrame.audioml);/videoml和audioml是MediaLocator类实例,是主窗口的视频、音频数据

11、地址DataSource ds = Manager.createMergingDataSource(dataSources);/组合视频音频数据,建立新的数据源dsProcessor processor = Manager.createProcessor(ds);/利用参数ds,建立数据处理器processor步骤二:检查视频数据格式是否合法Format checkForVideoSizes(Format original, Format supported)int width, height;Dimension size = (VideoFormat)original).getSize();

12、Format jpegFmt = new Format(VideoFormat.JPEG_RTP);Format h263Fmt = new Format(VideoFormat.H263_RTP);if (supported.matches(jpegFmt) width = size.width % 8 = 0 ? size.width : (int)(size.width / 8) * 8); height = size.height % 8 = 0 ? size.height : (int)(size.height / 8) * 8);else if (supported.matches

13、(h263Fmt) if (size.width = 128) width = 128;height = 96; else if (size.width = 176) width = 176;height = 144; else width = 352;height = 288; else return supported;return (new VideoFormat(null,new Dimension(width, height),Format.NOT_SPECIFIED,null,Format.NOT_SPECIFIED).intersects(supported);返回Format类

14、型步骤三:传输视频音频数据private RTPManager rtpMgrs;private String createTransmitter()PushBufferDataSource pbds = (PushBufferDataSource)dataOutput;PushBufferStream pbss = pbds.getStreams();rtpMgrs = new RTPManagerpbss.length;for (int i = 0; i pbss.length; i+) try rtpMgrsi = RTPManager.newInstance(); int port = portBase + 2 * i; InetAddress ipAddr = InetAddress.getByName(ipAddress); SessionAddress localA

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号