
在网络中,存在着三种发送报文的方式:单播、广播、组播。数据采用单播(Unicast)方式传输时,服务器会为每一个接收者单独传输一份信息,如果有多个接收者存在,网络上就会重复地传输多份相同内容的信息,这样将会大量占用网络资源。数据采用广播(Broadcast)方式传输时,系统会把信息一次性的传送给网络中的所有用户,不管他们是否需要,任何用户都会接收到广播来的信息。
当前,诸如视频会议和视频点播等单点发送、多点接收的多媒体业务正在成为信息传送的重要组成部分。在一点发送多点接收的前提下,单播方式适合用户较少的网络,而广播方式适合用户稠密的网络,当网络中需求某信息的用户量不确定时,单播和广播方式效率很低。这时组播(multicast)应运而生,它实现了网络中单点到多点的高效数据传送,能够节约大量网络带宽,降低网络负载。组播传输信息的方式如图所示。1出现Local Data AddressDoes not belong to any of this hosts local interfaces错误:
主要问题是发送视频和音频的程序需要在服务器上运行,你可以选择Win2000 Server 或者Win2003 Server,问题就解决了。
2传输声音和视频的方法如下:
a传输声音或者视频文件
编译完AVTransmit2java后,再命令提示符中输入命令:java AVTransmit2 file:testwav 224224123123 22222(注意文件的类型是wav 或者mov 、mpg的文件,不可以是mp3、rmvb等其他不支持的文件。传输支持文件格式有限,我也没有办法,应该在添加相关的插件就行了,希望大家提供帮助),其中testwav即传输的文件名,224224123123为多播地址,22222为端口号
接收方法:编译完AVReceivejava后,在命令提示符中输入命令:java AVReceive 224224123123/22222即可接受到声音文件
b传输麦克风的音频,在传输之前先检查电脑录音控制的选项是否为麦克风(步骤:打开桌面任务栏上的音量控制,选择选项---->属性----->调节音量选择录音,之后在下面的音量控制属性中选中麦克风。单击确定。接着跳到录音控制,选择麦克风就行了)。使用的命令是:java AVTransmit2 dsound:// 224224123123 22222,此时就开始传输声音了。
接收方法同上
c传输摄相头视频,使用的命令为:java AVTransmit2 vfw://0 224224123123 22222
接收方法同上
d关于广播、组播和单播
广播:对于局域网广播你可以使用广播的地址,如你的子网掩码是2552552250,即C类的默认子网掩码,你的广播地址可以是1921683255。(注:我的局域网ip地址分配为1921683X)。如子网掩码不同,你可以参照相关的网络常识自己推算。
接收时也使用多播地址来接受,假如发送方的机器地址为:192168346。发送时在发送放的机器上运行java AVTransmit2 file:testwav 1921683255 22222,接收时使用java AVReceive2 224224123123 22222。才能完成接收这和网上的说法不同,端口号不要填错,地址任意。按网上的说法,使用的接收地址应为为192168346,可是我没有成功,总是出现Local Data AddressDoes not belong to any of this hosts local interfaces的错误,而使用多播地址反而成功了。具体的参数我就不多介绍了,有问题可以给我留言。
组播:使用组播地址发送,组播地址接收即可
单播:假如你只想给某台机子发送,那么就在发送方输入命令,如:java AVTransmit2 file:testwav 192168347 22222,这时你只会将声音流文件发送给47号计算机。而接受时还是使用多播地址,如java AVReceive2 224224123123 22222。这是就听到声音了。
总之,使用RTP传输,在接受时都在使用多播地址,在发送时根据情况而定,至于ttl你可以不去管它。不只大家是怎么实现的,反正网上的资料让我变的很失望,真正的成功源于实践。下面摘取一段让大家欣赏(尽信书则不如无书)
网上摘取:
Transmitting Audio and Video over RTP
The AVTransmit2 class is very similar to the VideoTransmit, but uses RTP managers
to send the video and audio streams
Since the media tracks are transmitted in multiple sessions, you'll need to
use one Player per track on the receive side Using JMStudio, you can
start multiple Players from the "File" menu using the "New Window"
item Then either:
use the "Open URL" item to open one RTP session per track The URL to use is:
rtp://<sourceIP>:<port>/media
Where <sourceIP> is the IP address of the RTP session and the port
number is the same one that is used on the transmitting side
OR
Open RTP session and specify <sourcIP> and <port>
How to run this sample
1 Run AVTransmit2 with the required 3 command line parameters
For example, we can use any of the following:
- java AVTransmit2 file:clips/clip01mpgmpg 224112112112 22222
2 To receive the transmission on the client side use JMStudio:
- use open RTP session and specify group: 224112112112 & port: 22222
AND use FILE -> New Window and open RTP sesssion with port 22224
OR
- use open URL and specify: rtp://224112112112:22222/video
AND use FILE -> New Window and open URL with 22224/audio
Notes:
You should run 1 then 2, otherwise AVTransmit2 will find the port number used
You can also use the program to send only audio or video as follows:
- java AVTransmit2 javasound://0 224112112112 22222 (audio only)
- java AVTransmit2 vfw://0 224112112112 22222 (video only)
In such case create only one instance of JMStudio
Use Unicast:
- java AVTransmit2 file:clip01mpg 1288247 22222
Where 1288247 is the receicver address
If the sender address is 1288249 it will use port 22222 as well
to send out data In this case the receiver (eg, JMStudio)
should specify the sender as: 1288249 22222
Therefore to use unicast you should have two machines since
you can not use the same port for both sender and receiver
Receiving Audio and Video using RTP
AVReceive2 uses the RTPManager API to receive RTP transmissions
AVReceive2 performs the following tasks:
Open one RTP session per session address given
Listen for the NewReceiveStreamEvent from the ReceiveStreamListener
Create a JMF Player for each stream received for playback
This sample program can be used in conjunction with JMStudio,
the AVTransmit2 sample or any other RTP compliant transmitter
The IP address should be the address of the computer which transmits the data; or the multicast address if multicast is being used for the transmission
The ports should be the same as what's being used by the transmitter
How to run this sample
1 Run AVTransmit2 with the required 3 command line parameters
For example:
- java AVTransmit2 file:clips/clip01mpgmpg 224112112112 1234
2 Run AVReceive2 and specify the RTP session addresses to receive from
For example:
- java AVReceive2 224112112112/1234 224112112112/1236
to simultaneously receive 2 different RTP sessions (video and audio)
Note: because of port reuse, it must run in this order, 1 then 2使用java 实现多网卡下 组播的监听 与发送消息。只查询到只有监听多网卡例子,补充下多网卡下的发送。
>
组播的最大好处就是节省带宽。
组播的特点:
组播就是类似于发布-订阅模式,一端是出版商,进行数据发布(向组播地址发送数据),一端是订阅者,根据内容决定订阅哪些数据(加入多播组)。
出版商向组播地址发送数据,数据在网络中传输,只有一份就可以,经过交换机时,交换机之下的子网中如果没有人订阅,则数据继续传输;如果有人订阅,则交换机将把数据复制多份,转发给子网的订阅者。
一般是根据传输bai的消息特征将duIP地址分为单播、广播或多播。
1 单播 (Unicast)
一个zhi单播IP地址dao只能标识一台用户主机,一台用户主机只能识别一个单播IP地址。一份使用单播IP地址为目的地址的IP报文,只能被一台用户主机接收。
2 广播(Broadcast)
一个广播IP地址能够标识某确定网段内的所有用户主机,一份使用广播IP地址为目的地址的IP报文,能够被该网段内的所有用户主机接收。IP广播报文不能跨网段传播。 广播分组的目标IP地址的主机部分全为1,如:
C类网络19216810的默认子网掩码为2552552550,其广播地址为1921681255,其主机部分为十进制数255或二进制数11111111(全为1)。
3 组播/多播(Multicast):解决了一个主机向特定的多个接收者发送消息的方法。
一个组播IP地址能够标识网络不同位置的多个用户主机,一台用户主机可以同时识别多个组播IP地址。一份使用组播IP地址为目的地址的IP报文,能够被网络不同位置的多个用户主机接收。 多播地址范围为224000~239255255255。
组播技术可以提供包括流媒体、视频会议、IPTV等在内的各种宽带增值业务,但这些业务的顺利开展还依赖于有效的业务管理、监控及安全控制。结合在业务运营管理方面的理解和经验积累
组播技术的实现需要解决以下几方面问题:
组播源向一组确定的接收者发送信息,而如何来标识这组确定的接收者?——这需要用到组播地址机制;
接收者通过加入组播组来实现对组播信息的接收,而接收者是如何动态地加入或离开组播组的?——即如何进行组成员关系管理;
组播报文在网络中是如何被转发并最终到达接收者的?——即组播报文转发的过程;
组播报文的转发路径(即组播转发树)是如何构建的?——这是由各组播路由协议来完成的。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)