package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.NetStatusEvent;
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.net.GroupSpecifier;
import flash.net.NetStream;
import flash.net.NetGroup;
import flash.media.Video;
import flash.media.Camera;
import flash.media.Microphone;
import flash.media.SoundCodec;
import flash.text.TextField;
[SWF(backgroundColor = 0x666666,width = 1003,height = 527)]
public class P2pBroad extends Sprite
{
private var server:String = "rtmfp://p2p.rtmfp.net/";
private var key:String = "9bb73c685f27383f07976dbb-60df5c2574da/vini123.com";
//private var key:String = "9bb73c685f27383f07976dbb-60df5c2574da";
private var myNc;
private var myNs;
private var myGroup;
private var myName;
private var myType;
private var joinedGroup:Boolean = false;
private var myCam;
private var myMic;
private var vid;
public function P2pBroad():void
{
Init();
}
private function Init()
{
//bt=new Label();
bt.width = 80;
bt.height = 21;
var id = int(Math.random() * 120);
myName = "crazy" + id;
if (id%2==0)
{
myType = "tea";
bt.label = "发布视频";
}
else
{
myType = "stu";
bt.label = "观看视频";
}
bt.visible = false;
bt.x = stage.stageWidth - bt.width - 10;
bt.y = stage.stageHeight - bt.height - 10;
bt.addEventListener(MouseEvent.CLICK,clickHandler);
sendBt.width=80;
sendBt.height=21;
sendBt.label="发送信息"
sendBt.visible=false;
sendBt.addEventListener(MouseEvent.CLICK,sendHandler);
linkServer();
}
private function sendHandler(e:MouseEvent)
{
sendMessage();
}
private function clickHandler(e:MouseEvent)
{
if (myType=="tea")
{
publishStream()
}
else
{
playStream();
}
sendBt.visible=true;
e.currentTarget.visible=false;
}
private function setupGroup()
{
//var groupspec = new GroupSpecifier(myName);
/*
GroupSpecifier类可以构造一个传递到NetStream和NetGroup的构造函数的加密groupspec字符串。
一个groupspec指定一个RTMFP P2P群组,包括功能、限制和成员授权等信息。
构造函数中的"myGroup/groupOne"为群组标识,可以随意字符串代替
*/
var groupspec:GroupSpecifier = new GroupSpecifier("myGroup/groupTwo");
//设置群组中post群发方式是否可用
groupspec.postingEnabled = true;
//指定是否能通过ip多播方式交换更新关于组成员的信息。
groupspec.ipMulticastMemberUpdatesEnabled = true;
groupspec.multicastEnabled = true;
groupspec.serverChannelEnabled = true;
/*
将相关的群组加入某个IP地址并侦听相关的端口
Multicast的IP地址需要从不低于224开始,端口需高于1024 ————“224.0.0.0:1024”
为保证唯一性,一般设置高一些比较可靠:)
*/
groupspec.addIPMulticastAddress("225.225.0.1:30303");
myNs = new NetStream(myNc,groupspec.groupspecWithAuthorizations());
myNs.addEventListener(NetStatusEvent.NET_STATUS,statusHandler);
myNs.client=this;
//在已成功的连接nc上创建一个群组
//groupspecWithAuthorizations:返回一个包含授权的加密的groupspec字符串, 传给NetGroup的构造函数。
myGroup = new NetGroup(myNc,groupspec.groupspecWithAuthorizations());
//为群组增加事件侦听
myGroup.addEventListener(NetStatusEvent.NET_STATUS,statusHandler);
}
private function publishStream()
{
myCam = Camera.getCamera();
if (myCam!=null)
{
myCam.setMode(320,240,10);
myCam.setQuality(0,80);
vid=new Video();
vid.width = 320;
vid.height = 240;
vid.x=500;
vid.y=150;
vid.attachCamera(myCam);
myNs.attachCamera(myCam);
addChild(vid);
}
else
{
trace("你视频都没有,还想搞直播");
}
myMic = Microphone.getMicrophone();
if (myMic!=null)
{
myMic.codec = SoundCodec.SPEEX;
myMic.setSilenceLevel(0);
myMic.framesPerPacket = 1;
myMic.gain = 10;
myMic.rate = 45;
myNs.attachAudio(myMic);
}
else
{
trace("你的电脑连麦克风都木有么!");
}
myNs.publish("heihei");
}
private function playStream()
{
vid=new Video();
vid.width=320;
vid.height=240;
vid.x=500;
vid.y=150;
vid.attachNetStream(myNs);
myNs.bufferTime=2;
myNs.play("heihei");
var txt:TextField=new TextField();
txt.text="aaaaaaaaaaaa";
addChild(txt);
addChild(vid);
}
private function sendMessage():void
{
var obj=new Object();
obj.sender = myGroup.convertPeerIDToGroupAddress(myNc.nearID);
obj.user = myName;
if(inTxt.text.length<=1)
{
return;
}
obj.text = inTxt.text; //"你是第" + int(Math.random() * 100) + "个猪";
trace(inTxt.text);
myGroup.post(obj);
receiveMessage(obj);
inTxt.text="";
}
private function receiveMessage(str:Object):void
{
trace("aaa:"+str.user);
write(str.user + ": " + str.text);
}
private function write(str)
{
//trace(str);
txt.appendText(str+"\n");
}
private function linkServer()
{
myNc=new NetConnection();
//myNc.ObjectEncoding = ObjectEncoding.AMF3;
myNc.addEventListener(NetStatusEvent.NET_STATUS,statusHandler);
myNc.connect(server+key);
//myNc.connect("rtmfp://stratus.adobe.com/HawkPrerelease-4e4efa13755c/FMSer.cn");
//myNc.connect("rtmfp://219.130.135.238/");
}
private function statusHandler(e:NetStatusEvent)
{
trace(e.info.code);
var code = e.info.code;
switch (code)
{
case "NetConnection.Connect.Success" :
trace("aa:"+myNc.nearID)
setupGroup();
break;
case "NetGroup.Connect.Success" :
joinedGroup = true;
break;
case "NetStream.Connect.Success" :
bt.visible = true;
break;
case "NetGroup.Posting.Notify" :
receiveMessage(e.info.message);
break;
default :
break;
}
}
}
}
分享到:
相关推荐
【P2P视频聊天】是一种基于点对点(Peer-to-Peer)技术的通信方式,它在局域网内提供多样化的交流功能,包括文字聊天、文件传输以及视频聊天等。这种方式的优势在于减少了中央服务器的压力,每个参与者既是客户端也...
3、局域网内的P2P直播,不消耗任何外网带宽 4、可设置的视频清晰度和缓冲时间 5、无延时的即时文字和表情传输 6、礼物/消费/主播结算/房间类型等功能 7、播放录像功能 Feelink的技术优势: 1、直播低延时、文本数据...
在P2P聊天程序中,UDP被选择是因为其快速发送数据的能力,适合实时性要求高的应用,如音频、视频聊天。 2. NAT(网络地址转换): NAT是一种网络技术,用于将内部网络的私有IP地址转换为公有IP地址,以便在互联网...
系统的主要功能包括文字聊天、文件传输、语音聊天和视频聊天等,以满足用户的在线交流需求。 首先,本文对国内外聊天工具的发展情况和现今的发展方向进行了详细的分析,并对开发环境和开发语言进行了简单介绍。然后...
"双人视频文字聊天"的文件名暗示了这是一个实现两人间同时进行视频和文字交流的应用或示例。可能包括客户端和服务器端的源码,涉及前端界面交互、后端服务器逻辑以及P2P通信的实现细节。 综上所述,P2P视频和语音一...
1. **用户界面(UI)**:用于输入IP地址、显示视频和文字聊天窗口的图形界面,可能使用Windows Forms或WPF实现。 2. **网络通信模块**:负责建立连接、发送和接收数据,实现客户端和服务器之间的通信。 3. **音视频...
7. **文件传输**:除了文字聊天,局域网P2P聊天还可能支持文件共享。文件传输需要考虑断点续传、文件分块传输以及错误检测和恢复策略。 8. **用户界面**:友好的用户界面是任何聊天软件的关键。开发者需要设计简洁...
TCP提供可靠的双向通信,适合语音和文字聊天,而UDP则常用于实时数据传输,如语音通话的实时音频流。 2. **多线程**:为了实现实时的聊天功能,软件通常会使用多线程技术,一个线程负责接收数据,另一个线程负责...
7. **聊天功能实现**:P2P聊天工具通常包含文字聊天、文件分享、音视频通话等功能。这些功能的实现涉及到音频/视频编码解码、流媒体处理、错误检测与纠正等一系列复杂的技术。 8. **用户界面与交互设计**:良好的...
1. 文字聊天:用户间可以实时发送文字信息。 2. 文件传输:支持局域网内的快速文件分享,无需通过云存储或邮件等外部手段。 3. 游戏集成:如文中提到的五子棋游戏,可以实现多人在线对战,所有游戏逻辑和状态更新都...
- 聊天:这里指的聊天功能是允许用户之间进行实时文字、语音或视频通信的一种功能,常见于各种即时通讯软件中。 【知识点详解】: 1. **Qt网络模块**:Qt提供了QNetworkAccessManager和QTcpSocket等类,使得开发者...
本项目"ios平台p2p 聊天工程源码(支持发文字和图片)"正是这样一个实例,它利用了库快科技提供的P2P SDK进行开发。下面将详细介绍这个项目中的核心技术和涉及的知识点。 首先,P2P(Peer-to-Peer)通信是构建点对...
- **社交互动**:除了视频聊天,还可能包含文字聊天、表情包、虚拟礼物等元素,促进用户间的互动。 2. **技术实现**: - **网络通信技术**:使用WebRTC、SIP或H.323等标准协议实现P2P(peer-to-peer)视频通信,...
FluorineFx+Flex视频聊天室源代码是一款基于开源RTMP服务器FluorineFx构建的多人在线交流平台,其主要特点在于提供实时的视频和文字聊天功能,同时还包括了小喇叭全服务器喊话这样的特色功能。让我们深入探讨一下这...
1. **即时通信**:P2P网络可以让两个或多个用户直接建立连接,进行即时的文字、语音或视频交流。用户之间的通信数据不需经过服务器中转,减少了服务器负载,同时提高了消息传递的速度和稳定性。 2. **文件共享**:...
P2P聊天工具就是利用这种技术实现的通讯应用,用户之间可以进行实时的文字、语音甚至视频交流。本话题主要围绕"P2P聊天工具源代码"来展开,探讨其背后的关键技术和实现原理。 首先,P2P聊天工具的核心在于网络通信...
6. **文字聊天**:除了视频,应用通常也包含文字聊天功能。这可以通过简单的HTTP请求或WebSocket实现。WebSocket提供双向通信,使得发送和接收消息更为实时高效。 7. **源码说明.txt**:这个文件可能是项目源代码的...
【VC++视频聊天系统源代码】是一个基于VC++编写的实时通信系统,它包含了音频、视频和文字聊天功能,能够支持一对一以及一对多的交互模式。这个系统对于开发者来说,是一个很好的学习和研究实例,特别适合那些希望在...
P2P聊天应用应提供直观的用户界面,支持文字、语音、视频等多种交流方式,并具备好友管理、群组聊天等功能。 9. **系统性能与稳定性**:由于P2P网络的动态性,系统需要能够应对节点的加入、离开和网络波动。负载...
本项目“视频会议,仿QQ群视频,实现多人视频,多人语音,文字聊天,表情”是一个基于QT设计的计算机类毕业设计,旨在模拟QQ群的多人交互功能,包括视频通话、语音聊天、文字交流以及表情发送等。本文将深入探讨该...