|
|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..7 } I5 \ t7 E- ^5 B- w
http://www.iphper.com/copstr
+ O0 ^* x; s. p: }光是留言板+在线涂鸦就几百行代码(看来效率低了点)
" P1 Z' [! h! P5 M! C. ?& x$ s+ ~- Q
% v7 E' g6 I. Q! \) V w
, D2 F* f& i* C5 \FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了9 R g; a; _0 E
|3 R; R' n3 M+ ^# B! W) g1 J6 `6 K
4 H9 z Y) Z* u% c8 g( v
//建立与服务器的连接.
6 t4 D y T- B6 G5 Bvar sv_uri:String = "rtmp:/recordstream";
, J( r6 v( T% evar my_nc:NetConnection = new NetConnection ();$ |' t4 j( z; ?* g! U; o+ a+ |7 r' S
my_nc.connect (sv_uri);
: K! R! e6 Y e. a$ u/ Q//新建共享对象;
- E6 @; P, v' v) m/ e& W2 w$ }my_nc.onStatus = function (thisObj:Object){5 O: e2 N% `1 p
if (thisObj.code == "NetConnection.Connect.Success"){, _9 @4 s6 `3 v( i
info_txt.text = "连接服务器成功!!"; ?4 O2 E) e; p$ ?5 n
info_txt.textColor = 0x66CC00;5 D, T( n6 f& E5 |" P$ ^
}
4 d! m' f( B+ c! [ else{
% P1 N* T' `7 n( f) R' F info_txt.text = "连接服务器失败!!"
) F! U4 U! I: \% Z8 }/ @# n% R info_txt.textColor = 0xFF0000;
/ ]4 V( J4 E5 Y9 n5 y9 S7 m% K1 q }
, ^; I2 M4 I" i/ i8 l}. ^, \9 c5 Y }9 E+ Q6 J. Z7 D
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);3 _2 G. M& g1 t
user_rso.connect (my_nc);
' ~( n; @7 G5 ? e//建立摄相头和麦克风对象
5 S1 U0 P+ `& ]" Mthis.cam = Camera.get();
& n% P9 R* |: g% [9 q* k/ Lthis.mic = Microphone.get();2 |* L& p }4 }) G
videobox.attachVideo(this.cam);6 @9 o* I0 P- t0 J( h3 b; h
videobox.attachAudio(this.mic);
7 e$ \: G6 f8 m3 Dsend_ns = new NetStream(my_nc);
; b7 g, t0 t+ s$ Z, }: @: S& Usend_ns.attachVideo(this.cam);
) i! [6 @7 ~# O. T5 Ssend_ns.attachAudio(this.mic);5 O$ N2 ?' U% B2 n# J. }
send_ns.publish("humorguy");
8 K ^; S- r. O2 L2 ^get_ns = new NetStream(my_nc);
6 _8 X; Q8 ?$ ?! rget_ns.play("humorguy");
( q; Q6 s( ?+ B& C8 `% _# B$ v# x# uvideobox2.attachVideo(get_ns); y0 w0 m+ j$ y8 E5 r g0 m( R) l
//更新聊天内容
- D2 O9 i3 m1 Kuser_rso.onSync = function (){, G$ c* x4 _, _$ c1 J! E# `/ [, u
chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
( b$ Q5 [4 z4 k! ^ c5 j+ x: l& Z chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
) U: j3 S2 h% o1 h% A c, [/ {}$ ~/ E, B; _, x* a, [0 h% Q
//回车键发送聊天内容
4 Q5 t% d- a2 f* ^& W. c( Tfunction myOnKeyDown() {
3 ?6 y3 h1 p7 ^( \5 O if (Key.getCode() == 13) {# I4 Q' V5 o% p
if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){2 L: Y* \( W; f; W6 F% \# X( k s) w
Selection.setFocus(chatInput_txt);) h6 v9 [! z) g# u) p0 l: |
user_rso.data.chatcontent = chatInput_txt.text;3 G1 d" _* q/ f, G i8 y2 X
if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
) M7 g; c; g1 E. u6 D( T$ O% k( ^- [7 W user_rso.data.chatname = name_txt.text;! t4 ]- M8 e2 {! B" P
}
) T9 L4 H; ], g& x }# o s5 I: }1 X8 }
}
; L% d! p* A+ j! H' x0 m}- o5 j1 i6 ]; s( B( [; H/ f2 D
var myListener:Object = new Object();
1 o$ h% L& C j* p: QmyListener.onKeyDown = myOnKeyDown;, R$ l/ m0 Q# V) A& J
Key.addListener(myListener);
7 Q/ i' Q: E/ P% X& O$ M. N% D4 L//构造检测摄相头和麦克风状态的函数
/ _ `- C) L) x+ k& dfunction checkforCam_Mic() {0 u2 Z7 J( E9 s9 H' p# M% W
camArray = Camera.names;2 b& {* v! g# z/ ~* f5 o: d
micArray = Microphone.names;
. R7 G& J Q* T) p0 ~ if (camArray.length>=1) {
: v$ C$ n0 k w2 b1 V6 q0 ~+ d/ i | temp_cam = Camera.get();
% ], r2 K+ l- K if (temp_cam == -1) {
" u5 { z8 o) I camInfo_txt.text = '视频设备正忙!';
6 n b1 v+ d }5 ^" w. p camInfo_txt.textColor = 0xFFCC00;
! d% W) K# P0 R } else {
: [" ]0 o# w! n' h8 U2 [ e6 g) Z camInfo_txt.text = '视频设备可用!';2 |( N( }/ Z+ A3 n1 q
camInfo_txt.textColor = 0x66CC00;
% c) x0 v* \, ] r. P1 W }; W% L5 X4 K2 M% \
delete temp_cam;
9 B, I3 S' l9 n } else if (camArray.length == 0) {
2 |$ U0 D. o1 z# ]4 d camInfo_txt.text = '没有视频设备!';) ?7 l6 [4 A& l2 w% Z: G H
camInfo_txt.textColor = 0xFF0000;
* y( ?, n" o: w# `9 ^ }
8 N( i0 @; x5 }! j) v5 } //检测麦克风状态
# X: \2 |; t4 G; B. c/ S$ X if (micArray.length>=1) {/ ?1 j1 E( ~3 E* O3 N9 ?% l
temp_mic = Microphone.get();
5 }, C4 g* w6 E if (temp_mic == -1) {" e* s1 k" A3 n. j
camInfo_txt2.text = '麦克风正忙!';& w* T1 q! t" w) w
camInfo_tx2t.textColor = 0xFFCC00;
! s6 M# j( d% v0 o j* R8 ~5 a } else {
& S% Y" Q. w+ N" s+ T) J1 d camInfo_txt2.text = '麦克风可用!';
C9 g' w/ y9 n camInfo_txt2.textColor = 0x66CC00;7 @. X) o: S3 t7 H# T7 m
}& a% O; X8 |7 e" O
delete mic_cam;
# z4 P5 Y" N3 \; o! e- Q } else if (micArray.length == 0) {
7 t; B- M' c6 j0 e/ ^) K camInfo_txt2.text = '没有麦克风!';$ Z! t) g3 C+ [ D
camInfo_txt2.textColor = 0xFF0000;
7 L/ q( s6 t, s [- B) m" O }
/ U* @/ k3 H) G5 q}3 S4 k r+ a0 n8 r! m6 q
checkforCam_Mic(); |
|