|
|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
+ @/ r1 _" p- U! yhttp://www.iphper.com/copstr% e+ E& V8 }! t" y
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
0 y, S$ O7 @; Z
8 i9 t2 i8 u v! \- e8 t: z& e8 Y
: M( J" J2 _! N+ P9 N$ |+ d* g! p7 PFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了1 {7 e" E3 C: }; @2 h! m1 ^# X: T5 O
5 |' m$ n8 n) J9 }! T& }( F) W/ c) N, [$ T$ T; [1 c$ w& }* _1 d* E
3 L7 A0 N: b( p3 v//建立与服务器的连接.
3 u. N# j8 Z x5 _3 A" Vvar sv_uri:String = "rtmp:/recordstream"; o: ?9 A' h3 X7 y
var my_nc:NetConnection = new NetConnection ();
% S. _; |4 e2 |! ymy_nc.connect (sv_uri);, c: h: w5 r! w( ?. d
//新建共享对象;
2 {' p& ?& K2 q! lmy_nc.onStatus = function (thisObj:Object){& k9 f7 x7 P+ z8 P. Z) o4 j; Q
if (thisObj.code == "NetConnection.Connect.Success"){' T# B! A w2 U; C0 P
info_txt.text = "连接服务器成功!!";: f, D+ y1 ~, P
info_txt.textColor = 0x66CC00;
7 w6 O+ e/ ^0 Q; | }8 B: s8 \6 A- @; {1 |# K/ e
else{
% u. r ~2 |) z info_txt.text = "连接服务器失败!!"& G2 G! |7 q$ @& e$ w
info_txt.textColor = 0xFF0000;
+ s* M: s# Z7 X0 j. {: R- Z }% [5 F, w6 [! h0 _4 F7 R& x1 i3 T
}. {; f9 A" P8 p
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
% H& L( J/ R7 x4 q5 q+ Cuser_rso.connect (my_nc);
- R- X' f; y/ U+ P9 v//建立摄相头和麦克风对象9 m7 a% }( h V0 n
this.cam = Camera.get();* F: j6 Z& @% N) A2 |- @6 x% G3 [
this.mic = Microphone.get();4 i) k- S6 N) b$ F$ [# W% U3 _
videobox.attachVideo(this.cam);; H& d/ Q0 T" k* w. s+ l
videobox.attachAudio(this.mic);
F3 S7 x' v- e: x% y! ~7 T. Ysend_ns = new NetStream(my_nc);
2 w$ P# Q' L5 r/ q3 Ksend_ns.attachVideo(this.cam);9 X4 h, `8 r: k8 [* l/ ?/ I
send_ns.attachAudio(this.mic);: X$ j0 G- E* e# {6 ^
send_ns.publish("humorguy");* K/ y/ Y7 z* M' e- ~# p1 {% F, |
get_ns = new NetStream(my_nc);
; E7 _/ ?+ L5 h# Z+ M1 wget_ns.play("humorguy");
7 w' Y: q6 G8 v' lvideobox2.attachVideo(get_ns);$ w, r! J/ {8 z* }6 f3 S
//更新聊天内容9 C3 G; u! F4 [; U; h) |
user_rso.onSync = function (){
1 e* ?" m5 L' u3 G& Y D4 \ chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;; R% k! M e, g
chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里8 B4 {/ t! s" \* t' ] n
}
" b f9 H2 R$ h//回车键发送聊天内容
3 g, A% u; T% Afunction myOnKeyDown() {" v8 T3 X, h2 n
if (Key.getCode() == 13) {
" n# E! u& ~9 X m8 f if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){+ v: e& B7 j1 I. Z: y
Selection.setFocus(chatInput_txt);& H$ T2 l& s( T5 d# {) A
user_rso.data.chatcontent = chatInput_txt.text;
8 \$ @$ O! d0 n" o/ [) s6 B+ l if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){& S. V& V5 O/ b5 K4 ~ @- W. {
user_rso.data.chatname = name_txt.text;. a9 }* G+ J' |$ s' m
}+ |* R' v. Q7 ]. J, D
}
1 w/ b3 W7 G" [1 P }
9 A }! [& v0 m8 s' W1 A}
?" X- z& z& }8 V7 ]4 i0 uvar myListener:Object = new Object();9 o. U* m7 M. h! Z7 d
myListener.onKeyDown = myOnKeyDown;4 B: k; E" p9 W: w4 ~
Key.addListener(myListener);
+ B5 f1 @+ y) ?' v+ ^//构造检测摄相头和麦克风状态的函数
# m5 _# z9 r% |7 W/ Afunction checkforCam_Mic() {. B( W+ c9 ?5 b$ z H
camArray = Camera.names;! _% U* ^* Q; g, E- P
micArray = Microphone.names;
" y p5 A, `4 T- O- Y5 O: I if (camArray.length>=1) {
1 v4 ?9 |" ?' }+ {5 Z/ Y6 ? temp_cam = Camera.get();( o! c1 ?# Y3 n; x
if (temp_cam == -1) {
$ t# ]3 I( H8 ^4 F/ ~8 T# X. ` camInfo_txt.text = '视频设备正忙!';
$ ^" j4 Z) z1 |1 ~ camInfo_txt.textColor = 0xFFCC00;
0 }1 H8 `3 g' Z4 u% ^6 N( U0 h } else {
! Z h$ [6 O, z& {8 |) v camInfo_txt.text = '视频设备可用!';. k/ m0 n- l1 Y
camInfo_txt.textColor = 0x66CC00;/ [" ~# |) m+ L# ~! D
}7 i$ P: ] r$ D# F. f+ P$ t$ M) U5 p
delete temp_cam;
: c* L2 `% s3 c& h- r } else if (camArray.length == 0) {5 i& g* L+ d9 @% {6 Z2 D9 h
camInfo_txt.text = '没有视频设备!';$ Q# Q0 \- j2 ~4 n- I4 O" u: Z
camInfo_txt.textColor = 0xFF0000;. j( j3 _& u& S
}
7 _) ^8 y9 F/ V //检测麦克风状态 5 @2 d- F# p, f) x
if (micArray.length>=1) {
c8 J `+ w) L temp_mic = Microphone.get();
; e; }4 h( u* ~ if (temp_mic == -1) {
6 |$ v+ g; H8 f6 Z: v& q$ ?* ^ camInfo_txt2.text = '麦克风正忙!';9 D! K8 ^! E- H9 U- S( P1 j: O* O( x
camInfo_tx2t.textColor = 0xFFCC00;
( _- Q3 |5 S' P/ U' N a2 q } else {
/ e$ r0 Y* A% X7 v1 p! t camInfo_txt2.text = '麦克风可用!';
$ u9 H- ^! L, D; G3 P3 p camInfo_txt2.textColor = 0x66CC00;9 l, B$ P7 O- h. f2 z4 K
}
9 q+ u& I) q: u" j4 Y& F delete mic_cam;& s5 f$ z6 l* l+ o+ j6 L# m
} else if (micArray.length == 0) {
$ l6 Y" c t7 b+ c0 M F7 Z2 } camInfo_txt2.text = '没有麦克风!';" H3 _# ?! h# i& l8 F, o3 K8 e
camInfo_txt2.textColor = 0xFF0000;
) f4 T5 U6 N- D; a, l }
6 O* K+ w- i3 H6 u8 @2 }8 a}
; S" A: R3 S2 @ Y1 R- xcheckforCam_Mic(); |
|