用Java实现网络语音信号传送

一、引言

Java是一门适合于分布式计算环境、尤其是Internet程序设计的语言。这不仅仅在于java具有很好的安全性和可移植性,还在于java为Internet编程提供了丰富的网络类库的支持。利用这些网络类库,可以轻松编写多种类型的网络通信程序。然而由于某些限制,Java在传输多媒体信息方面的应用不是很广,大部分的应用都集中在网络上传输语音等音频信号的方面。传输音频信号应用方案一般有两种,一是应用于数据广播的多对一传输,例如音频数据服务器向数个客户端发送音频数据信号,其最广泛的应用则是某些网上的IP电话,大家经常可以看到不少这种提供在线IP电话服务的网站的客户端都是使用的嵌在网页上的Java Applet程序,用来实现拨号、通话等等基本的网络电话功能; 第二种方案则是我们今天要涉及的部分,一对一的音频信号数据的传输。这种方案的应用范围更广。大家都去过语音聊天室,大部分的语音聊天室的语音聊天功能的实现就是使用的Java技术,大家对这样网页的源代码分析一下就可以发现这一点。

我曾开发一个项目,涉及使用java来实现在网络上传输语音数据。开发中遇到不少问题,而且在互联网上发现关于java语音传输的资料比较少,寻找了许多天,最终从一个开放源代码的一个简单的Answer Machine 演示程序中获得了解决问题的方法。今天我就把我在点对点传输音频信号方面的一些经验拿出来,与大家共同探讨这方面的问题。

二、存在的问题

在网络上传输音频的方面存在的问题主要可以归纳为以下几点:

1 双方之间的网络连接

要进行频数据的传输,首先就是要建立数据连结。常用的通讯协议中,TCP较可靠,所以用在不允许数据丢失的应用上。而UDP则较多应用于处理速度要求较快、数据传输可靠性要求不是很高的应用上,如数据广播。通信协议的选择取决于我们所要做的应用的类型。怎样建立网络连接,稳定的接收和发送音频信号的数据流是关键。

2 音频信号的采集以及回放

在进行音频信号的采集中我们必须考虑到采样率的问题,声音信号的采样率有8Khz、16Khz、32Khz、44Khz等,每种数据采样虑产生的数据量都不一样,越高的采样率产生的数据量越大,所以我们要选择合适的采样率以适应网络的带宽。

3 音频数字信号的编码与解码。

如果把直接采集到的音频信号数据流在网络上进行传输,它所占有的带宽也是十分大的,以8Khz的采样率采集14位的音频数据那么就有以下这样的一个式子:

14 bit * 8000/second=112,000 bits/second or112kbps

从中我们可以看出以这样的方式传输音频数据,每秒需要向网络中发送112kb的数据。所以。从节省带宽的角度考虑,我们很有必要对这样的数据进行压缩。对多媒体信号的压缩我们有许多可以选择的格式,如mp2、mp3、GSM等等。同样,我们这里也存在一个对压缩格式进行选择的问题,考虑到音频数据传输的及时性,对传输的音频数据质量的要求,以及各种压缩格式的压缩比率以及进行压缩和解压缩所要耗费的系统资源等方面问题,选择合适的压缩格式就显得尤为重要。

时间: 2024-11-01 02:43:57

用Java实现网络语音信号传送的相关文章

Java IO: 网络

原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 校对:方腾飞 Java中网络的内容或多或少的超出了Java IO的范畴.关于Java网络更多的是在我的Java网络教程中探讨.但是既然网络是一个常见的数据来源以及数据流目的地,并且因为你使用Java IO的API通过网络连接进行通信,所以本文将简要的涉及网络应用. 当两个进程之间建立了网络连接之后,他们通信的方式如同操作文件一样:利用InputStream读取数据,利用OutputStre

Java的网络功能与编程 一

编程|网络 Java的网络功能与编程徐迎晓(上海大学计算中心25#)                       摘  要:Java语言是Internet上最热门的编程语言,本文针对        Java的网络功能,对Java从网络上获取图象.声音.        HTML文档及文本文件等编程方法作了初步的介绍,同        时介绍了动态获取网络上资源的方法作了介绍.文中        提供了大量简明易懂的实例. 关键词:Java:Internet:网络     Java语言是Intern

JAVA的网络功能与编程 二

编程|网络     五.显示网络上其他HTML文档     利用Java提供的getAppletContext().showDocument(URL)可以 显示其他结点的HTML文档,同前面的显示网络上其他结点的图象, 有两种格式,下面各举一例:                       ●程序8   格式一 import java.applet.*; import java.awt.*; import java.net.*; public class showdoc extends Appl

如何使用Java测试网络连通性

概述 在网络编程中,有时我们需要判断两台机器之间的连通性,或者说是一台机器到另一台机器的网络可达性.在系统层面 的测试中,我们常常用 Ping 命令来做验证.尽管 Java 提供了比较丰富的网络编程类库(包括在应用层的基于 URL 的网 络资源读取,基于 TCP/IP 层的 Socket 编程,以及一些辅助的类库),但是没有直接提供类似 Ping 命令来测试网络连通 性的方法.本文将介绍如何通过 Java 已有的 API,编程实现各种场景下两台机器之间的网络可达性判断.在下面的章节中 ,我们会使

Java的网络功能与编程

摘 要:本文初步介绍了如何使用Java编程语言从网络上获取图象.声音.HTML文档及文本文件等的方法,还介绍了如何动态获取网络资源,同时提供了大量简明易懂的实例. 关键词:Java:Internet:网络 Java语言是Internet上新兴的编程语言,对Java的特性以及基本的编程方法已有很多文章作过介绍.但是,广大Java爱好者更希望了解Java更深一步的编程方法,本文就Java的网络功能及其编程方法作一初步的介绍. 为了方便初次接触Java的读者,本文先就Java编程的一些常识作简单介绍.

Java解析网络数据流的三种特殊方法

Java作为最开放的语言,已越来越受到网络程序员的青睐.但这一青睐族有着同样的经历--曾经都为网络上通信的Java数据格式而烦脑. 笔者也不例外,曾经为此而查阅了很多文档,经过反复测试才 得以解决,如今笔者已经在所从事的很多电子政务项目中顺利的应用.今天笔者写此文,介绍用Java解析网络数据的三种特殊方法,希望对正在寻求这方面问题答案的读者有所帮助. UTF8转换成GB2312 当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式.

我有个java连接网络的程序,想要在windows登陆前执行这个程序,请教该如何做

问题描述 我有个java连接网络的程序,想要在windows开机以后,用户登陆前执行这个程序,请教该如何做 问题补充:ZavaKid 写道 解决方案 楼主可以参考这个,很可能对楼主有用: http://www.cnblogs.com/codeyu/archive/2009/09/03/1559736.html解决方案二:首先windows登陆前网卡不一定初始化好了,这时候连接网络有可能是不通的.可以考虑驱动的形式解决方案三:引用恩,就是我自己写个java程序封装成了exe可执行的程序,这个程序是

java中网络编程关于使用ObjetInputStream传输报错的问题,求大神指点

问题描述 java中网络编程关于使用ObjetInputStream传输报错的问题,求大神指点 以下贴出来的代码为通过ObjectInputStream(OutputStream)在客户端与服务器端之间交互时传输的对象,提供的图片中一个是客户端的代码片段,一个是服务器端的代码片段. 现在问题出在当客户端输完账号密码点击确定时,客户端卡死(应该是线程阻塞).服务器端抛出异常 :java.lang.ClassNotFoundException: com.wish.data.TransferObjec

网络编程-求 扩展UDP实现SR可靠数据传输 的java程序...网络工程专业作业

问题描述 求 扩展UDP实现SR可靠数据传输 的java程序...网络工程专业作业 .UDP向应用层提供不可靠数据传输服务,本课题的任务是扩展UDP的服务,使其对应用层提供采用SR(选择重传)的可靠的数据传输服务. 2.可靠数据传输机制设计: 2.1 UDP不可靠数据传输服务抽象: 2.2扩展UDP实现SR可靠数据传输: 2.2.1 如何体现流水线机制? 2.2.1 如何应对传输过程中的错误,实现SR? 2.3可靠数据传输机制的验证系统. 课设大作业....小弟在这跪求一份....下周就要交了