|
|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..3 W* S. S% r5 A4 X$ f# p" q
http://www.iphper.com/copstr
" J( ~0 `6 e3 B. V# O光是留言板+在线涂鸦就几百行代码(看来效率低了点)# s* Q7 {/ d+ P$ q' C g; w7 L
# w7 R$ ?( L4 _
6 F+ }6 d0 {: y
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了4 |' t* k* z0 r' V7 U) C5 _# x5 X7 A
, o" [# n3 f' ^3 d% ^1 v, N+ {
% f, L* w, ]5 w; l, g//建立与服务器的连接.7 _" p% p/ T/ H1 ]8 d, N$ m: ?
var sv_uri:String = "rtmp:/recordstream";
1 k7 P2 |+ x) E! Hvar my_nc:NetConnection = new NetConnection ();
/ t. c) X, D" Wmy_nc.connect (sv_uri); c/ n* J" } X1 Z
//新建共享对象;
7 n/ d$ P7 I* smy_nc.onStatus = function (thisObj:Object){ n1 z) u8 K6 H1 x$ ~3 a
if (thisObj.code == "NetConnection.Connect.Success"){
9 F& A7 t- C" C: i! Y4 j+ F info_txt.text = "连接服务器成功!!";
- \) C" c+ [" M& G: A( O info_txt.textColor = 0x66CC00;) g2 b, T( S0 w, d5 z$ p9 J
}
$ M0 R* b4 }* d else{( R( _. ~+ n9 n! G' T3 F- t
info_txt.text = "连接服务器失败!!"
) M( \( m2 k0 J1 f3 _) D info_txt.textColor = 0xFF0000;& Q6 t% j2 Q9 {( _% X9 q' B/ R
}0 ^1 G8 d P7 G% `/ G, l
}. x; m. L( p: u; ]
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);' h+ t* _: O; \; M& D( `! @
user_rso.connect (my_nc);+ ~, u* N4 `$ N3 Y+ {2 f* r U
//建立摄相头和麦克风对象4 y9 I0 Q8 E6 E3 J) _# S I5 u F
this.cam = Camera.get();
1 A: w! p1 ~- i# P, [this.mic = Microphone.get();
, g3 q: S. W2 S ]videobox.attachVideo(this.cam);/ \* _. m$ i2 O) h1 {" u; p$ B/ ?
videobox.attachAudio(this.mic);- p1 R* {' L! v' I" X
send_ns = new NetStream(my_nc);! q) p, A( D5 e, g+ {8 _* b, s" O* V
send_ns.attachVideo(this.cam);
, U$ w7 Y# Q8 K5 P" }% rsend_ns.attachAudio(this.mic);
7 c" T( F% |/ `5 Csend_ns.publish("humorguy");
9 w) s i* ?1 g k( xget_ns = new NetStream(my_nc);1 F" p/ B& b2 T) a
get_ns.play("humorguy"); v+ e6 t" N- Z# L' i" Q% x
videobox2.attachVideo(get_ns);
3 Q+ j7 ^7 E+ v" R! E# S2 w. w//更新聊天内容, _- ~9 ]1 f. {4 {8 x6 n
user_rso.onSync = function (){
3 C: d* E1 }% K# u& C% s. b! f/ r chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;3 `6 P, R5 L% m, f! o
chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里& X" B4 N" |+ f5 G# U# U& o7 \
}' ?- @: W! ~' x
//回车键发送聊天内容/ p* P0 l+ T& X/ Y! P8 \9 E8 \& I6 v
function myOnKeyDown() {
2 Y0 p6 v @+ Q if (Key.getCode() == 13) {
0 D* M {! f, K6 ?! a& h; m! G5 L$ { if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){5 _0 y4 ?- f* V5 s r
Selection.setFocus(chatInput_txt);
. k) r: d" l Y3 h& a5 P& W2 e user_rso.data.chatcontent = chatInput_txt.text;
3 b* q7 ~/ y' d8 o( r! b" k& w if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){ T' N# u- V: O' j' l" P/ B
user_rso.data.chatname = name_txt.text;
! n2 I$ r X; W v/ { }" u/ I: c6 M# r8 M3 P7 ~1 E8 X
} d- d5 O# g3 m7 s. v, ]1 B
}
/ @6 n! F4 ]) ~* w1 i. g6 P. n5 c' z}
9 o1 y- ^" k! V$ i/ y" u; r* n; Jvar myListener:Object = new Object();( w( J6 q( B5 _( G2 k
myListener.onKeyDown = myOnKeyDown;
4 }# G8 l- c( e" |1 ~Key.addListener(myListener);+ a/ T- ~8 G; ?7 y5 g
//构造检测摄相头和麦克风状态的函数
4 q5 F u B9 |+ i2 R* P2 M ~. Ffunction checkforCam_Mic() {
4 W0 V3 Y$ d2 K6 f3 m camArray = Camera.names;- v/ {2 Y0 J. M- _1 x- v
micArray = Microphone.names;$ ~* a/ ~" K: D8 _/ M( p k
if (camArray.length>=1) {
$ E: v' E: H/ M8 ]0 L, R: _ temp_cam = Camera.get();
0 a9 V1 `8 m; r2 v if (temp_cam == -1) { C: @ z, H5 l7 ?! B
camInfo_txt.text = '视频设备正忙!'; `- q: l. L: L# K" x3 F* ~& Z% H- a
camInfo_txt.textColor = 0xFFCC00;
3 l0 M- K* `& h+ J k } else {0 ~1 W9 z9 @1 x8 `4 g! p* d
camInfo_txt.text = '视频设备可用!';" u# E$ n, p+ e k6 b
camInfo_txt.textColor = 0x66CC00;- z6 J' a% K( J+ N' D
}
0 m1 Y. F5 w5 S5 A delete temp_cam;, M8 i. { C5 E6 V# u9 ]
} else if (camArray.length == 0) {5 z/ j7 p; ]3 ~5 `9 G
camInfo_txt.text = '没有视频设备!';
% c% r& k A; }6 L9 a' A camInfo_txt.textColor = 0xFF0000;2 H# G1 H3 ]$ ]/ x
}
8 j5 z# w# l _- T //检测麦克风状态
5 a0 p |7 V& ]4 J( \ if (micArray.length>=1) {
1 L' D2 z3 E, Q. a2 s temp_mic = Microphone.get();3 |- F# p8 C9 ?; E% M
if (temp_mic == -1) {4 U Q, J5 H- ]% g% ]' z+ e. ^
camInfo_txt2.text = '麦克风正忙!';8 C, h; k$ @& x" s
camInfo_tx2t.textColor = 0xFFCC00;7 [+ E" a. j7 Y+ k7 m2 E) E2 F2 X
} else {
- v2 `/ u" f/ v+ c& E$ r) w" F camInfo_txt2.text = '麦克风可用!';
- O4 j" C& r, `; ]$ b; _! s camInfo_txt2.textColor = 0x66CC00;. m+ i. F7 _' q' x5 v
}
1 ^% G# J" |" p+ @ delete mic_cam;) d+ U( ?' h/ P2 j( j5 Y C
} else if (micArray.length == 0) {8 s7 f; O: R* g. Q) i: f
camInfo_txt2.text = '没有麦克风!';
5 b- [& C. b' f camInfo_txt2.textColor = 0xFF0000;
7 i2 e6 N$ ~3 Y" D9 r+ \ O }
+ q8 d# | }# B% _; _; z/ ?}
6 U: t1 \+ T" y& `1 w/ B" R; x" [checkforCam_Mic(); |
|