|
|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
- a7 C: \0 o5 l P! s6 ~" lhttp://www.iphper.com/copstr
% s" ~6 y% f& _1 }+ p( X) U光是留言板+在线涂鸦就几百行代码(看来效率低了点). w b# H$ ]4 ]$ E* V
& R" o- l% m0 q
6 R! t( Z4 H: D/ mFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
$ W0 t+ F- r$ t0 u/ e
2 b9 j5 m U+ W7 m6 E( c/ @4 D& I ?6 h( S: d$ s, s
6 M9 r7 X) G6 E1 D/ e3 [+ j
//建立与服务器的连接.9 f- M; w+ m, c( [7 L9 ?9 V" @" n- u
var sv_uri:String = "rtmp:/recordstream";+ g. z4 o. h( I% F y3 k1 a
var my_nc:NetConnection = new NetConnection ();9 F" m3 `1 R* b2 t6 H6 N# U' \. ?
my_nc.connect (sv_uri);1 ~5 y+ u( a6 X* y5 C9 w
//新建共享对象;3 ` ~: i* q0 Y T
my_nc.onStatus = function (thisObj:Object){
P+ V/ E3 l1 |- O; W if (thisObj.code == "NetConnection.Connect.Success"){5 r% f$ E0 ~& u. l' E" L
info_txt.text = "连接服务器成功!!";
8 T3 M7 S0 [. B7 K info_txt.textColor = 0x66CC00;
4 K, y2 z& F& F* S# V }
7 d' g9 q0 G" o8 z& I6 ~4 r" a6 h else{: v, x2 n5 E n1 {* L" F: A
info_txt.text = "连接服务器失败!!"
; ~) `6 `- G- f0 V2 d info_txt.textColor = 0xFF0000;% T4 n7 s, v$ I. C$ S s% H
}
! c% |+ `) k6 [! X}
: {8 m m3 ` y: Svar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
0 s! P5 W3 t4 ?& ^user_rso.connect (my_nc);" Q, V7 h3 o. u. V! d F+ z
//建立摄相头和麦克风对象
4 t' G$ v7 U* p4 g* L+ a# I1 Q6 }this.cam = Camera.get();) ?* n( U$ q/ s4 T: t0 N$ b8 H
this.mic = Microphone.get();; E6 i- A( E V9 j
videobox.attachVideo(this.cam);
( ~! U% i# b- I; s d- K/ Mvideobox.attachAudio(this.mic);1 m) G6 L+ Y/ y9 e0 X8 ^
send_ns = new NetStream(my_nc);
* d6 o, I* S3 Rsend_ns.attachVideo(this.cam);/ F4 o2 L2 X, U3 C
send_ns.attachAudio(this.mic);4 f2 K- X" P7 Q* M7 O& t
send_ns.publish("humorguy");* q, w( x6 M" S; {3 S6 X
get_ns = new NetStream(my_nc);: W& X9 N1 {7 ]9 M% C% o+ S- v
get_ns.play("humorguy");
, q6 u. G7 @0 \& f& Wvideobox2.attachVideo(get_ns);
. ~0 P) g# W; b//更新聊天内容* i9 b$ i. e+ J" B8 {
user_rso.onSync = function (){
4 y! B& C: F$ n9 K! f chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;1 X1 r2 K4 B# i' P- G
chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里# V5 A( ^1 Y' L6 B- h0 _
}
% M- ]/ Z( c+ f5 t) t//回车键发送聊天内容
1 u" b) ?# V5 v; kfunction myOnKeyDown() {! [* A9 m5 N" [* z7 R
if (Key.getCode() == 13) {
+ Z7 _: B2 d5 p: C- J. U if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){+ u; @ Q, ^- y! L/ M
Selection.setFocus(chatInput_txt);2 M6 t5 N5 Q4 y5 x4 j6 T2 A3 g2 E
user_rso.data.chatcontent = chatInput_txt.text;# g* \: }( n: X# A+ d
if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){: w: d+ ~, E4 N* k9 b7 q
user_rso.data.chatname = name_txt.text;$ Y$ x6 N% M% q! |
}, |9 G+ V% X5 U; E2 j
}
4 A. _ a( c; A* q% L2 Q6 a% o) a }
" G+ B: k" {& T' v5 E5 o6 {}# t; D" |" _' d0 X7 e! r
var myListener:Object = new Object();) ]" ^* b+ y3 J) M" o8 |
myListener.onKeyDown = myOnKeyDown;
- R2 c1 m4 a! L4 r% uKey.addListener(myListener);" f# j# f' b2 i7 v6 i3 ?$ [
//构造检测摄相头和麦克风状态的函数
; J* u9 T/ f+ H5 ]function checkforCam_Mic() {
+ s" o. ]3 O3 ~( d7 C: N0 D/ f camArray = Camera.names;
2 s! P) o2 d, u: w, e9 R micArray = Microphone.names;- h8 Y* ` `/ x# H
if (camArray.length>=1) {9 y( j i/ t5 T" @7 h7 C
temp_cam = Camera.get();
' \+ j, X y8 a& h2 Z7 I M if (temp_cam == -1) {3 `3 A, z; w1 L% z
camInfo_txt.text = '视频设备正忙!';( z$ P$ h5 e' B) Y! o
camInfo_txt.textColor = 0xFFCC00;
3 x9 U% }% M' w+ G) ~( m; i } else {& Y$ `- u6 y7 \% S) M. D2 |
camInfo_txt.text = '视频设备可用!'; \3 @! k5 t* a5 \& n# n
camInfo_txt.textColor = 0x66CC00;0 ^' }* Q5 c, g+ d
}" t! W7 D, o; z! p7 n/ {
delete temp_cam;
8 e, p! X" A% ^; ? } else if (camArray.length == 0) {
2 j6 s' ]" U2 ^+ v/ h+ r camInfo_txt.text = '没有视频设备!';7 F, u% d6 f8 m
camInfo_txt.textColor = 0xFF0000;
/ v9 O: P; v/ P3 X* |" I }! ?) E9 S8 i5 g$ [; t4 P
//检测麦克风状态 1 g8 s! F7 S) j. T
if (micArray.length>=1) {
, o F- y3 `4 O- b8 D temp_mic = Microphone.get();; r& X7 t0 R6 r/ j7 \8 T
if (temp_mic == -1) {# Y: `2 G5 r3 W
camInfo_txt2.text = '麦克风正忙!';
* c7 Q2 }( u1 z- V1 M camInfo_tx2t.textColor = 0xFFCC00;% R0 L# u% N% J2 p" d' ?" Z
} else {, h3 n4 F& t) A+ B
camInfo_txt2.text = '麦克风可用!';7 Q& N2 L8 W; T' f& T4 ~+ d: P! y
camInfo_txt2.textColor = 0x66CC00;
( i- J, x/ ?( b" @6 j2 n }
% i- h# b" q- E7 u delete mic_cam;
% h' ?1 p: g- `2 G: T } else if (micArray.length == 0) {& G$ @9 D1 }: k9 M% x3 S
camInfo_txt2.text = '没有麦克风!';
; h" }( q+ l H camInfo_txt2.textColor = 0xFF0000;
4 d. v# R; A0 H" h0 B }
9 T" G+ t& i5 {}! D9 F; W1 F+ O; l5 r; `
checkforCam_Mic(); |
|