|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..) e- s/ H0 Z8 E/ z% L& J6 i
http://www.iphper.com/copstr
9 c& b& _) ~- n光是留言板+在线涂鸦就几百行代码(看来效率低了点)9 L( k+ z4 V i# R+ k6 L* J
% l! y& F9 m" a: C8 t0 B; z! O. A
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
1 R& N4 J4 d2 n8 W- C. H8 B3 t5 T9 j# N5 v( [0 H& {( l: q# I9 t2 m
* n) y2 B5 Y. S9 k# l
& |8 u, }& o; X/ X) K1 t3 f# t//建立与服务器的连接.1 T6 ?6 S: I/ N) s5 F6 d- B0 O
var sv_uri:String = "rtmp:/recordstream";9 z4 \+ j2 V& [0 ?2 h& _
var my_nc:NetConnection = new NetConnection ();% J2 m* H: ]' L5 d! `
my_nc.connect (sv_uri);0 {3 ?& {. a/ e7 U2 Z( j# M
//新建共享对象;
2 c9 J$ ?# U2 T* Y( r! Emy_nc.onStatus = function (thisObj:Object){
7 z9 j$ p1 R1 Y if (thisObj.code == "NetConnection.Connect.Success"){
4 O. u# X- j5 n# X' I8 l info_txt.text = "连接服务器成功!!";
# v9 u' d4 y* h3 m& W! ]% a info_txt.textColor = 0x66CC00;
# x- T+ U+ B5 Q+ |6 e }- X% f: U0 n* ?! `4 k
else{4 ]' D/ T5 C; m$ A+ b" t
info_txt.text = "连接服务器失败!!"9 C* H4 [6 C, P r
info_txt.textColor = 0xFF0000;
) M$ c$ v) C# l8 `0 a }# e7 D1 E( j1 C9 p
}
/ H! F' F( h' \: H4 D) p0 h+ G3 Wvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
9 d7 W. z: E% x( V5 y- nuser_rso.connect (my_nc);- i2 `. L: X4 I: N0 j9 k
//建立摄相头和麦克风对象0 w, J- S1 N/ B- E- U1 T
this.cam = Camera.get();
2 t y# l3 |$ D- lthis.mic = Microphone.get();
7 S7 j% c4 `; d, Tvideobox.attachVideo(this.cam);1 v' Y; R, X# K! p3 J; h O* z
videobox.attachAudio(this.mic);; V- j4 Y( w# w6 i3 @8 w, A
send_ns = new NetStream(my_nc);
& U% G, S/ l6 M# X) g/ T% B* f& psend_ns.attachVideo(this.cam);0 T- k2 Y4 @1 g% H# V/ D) ?, `
send_ns.attachAudio(this.mic);1 J0 }) f( Z1 r5 i; R8 \ _
send_ns.publish("humorguy");
( q9 Z9 c6 N$ I. d' C; {3 Lget_ns = new NetStream(my_nc);
+ ~. N1 P o% N5 b7 }1 }, {3 eget_ns.play("humorguy");
/ c( U$ D! w# f$ Y9 d- A7 Mvideobox2.attachVideo(get_ns);
9 A/ i0 |/ Q7 V+ h) c' h2 ?//更新聊天内容
/ v' U) R- q( A) n- Tuser_rso.onSync = function (){
1 G7 p& X; E" ~' g; l0 v# W# e( U chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
2 A5 w2 q- F5 Q" q2 ~' A8 L3 S( h chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里: {+ b) I: @0 X
}, i' u3 n5 C, N8 s$ P
//回车键发送聊天内容' i& |4 W8 Q+ T1 [' V7 R" R
function myOnKeyDown() {# S* P! y- V* w9 T2 F
if (Key.getCode() == 13) {1 P0 i7 O) f( B/ E3 T% h
if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){$ y. O4 @9 U+ g' C0 [1 y, e
Selection.setFocus(chatInput_txt);
3 I6 J7 O$ V! } user_rso.data.chatcontent = chatInput_txt.text;
8 |* {) d+ n1 G3 l! l/ Q% D if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){! k0 q/ ^# G1 j. L' S
user_rso.data.chatname = name_txt.text;) L8 |6 K/ e6 Q+ `6 _8 [# H& l
}
8 D- s$ l+ z" s5 c- v" u }
% ?, C& O! I' ?0 s2 _ }
/ ~& T+ ^' v7 Y% P( M}
& X' |# M3 K/ F- g: W; f& kvar myListener:Object = new Object();
: H: l4 \- T% w# G0 D! _; dmyListener.onKeyDown = myOnKeyDown;; f% l; [+ o# C6 ~
Key.addListener(myListener);( X- V+ p0 s9 M0 o
//构造检测摄相头和麦克风状态的函数
$ x4 d! [9 B6 s+ @2 pfunction checkforCam_Mic() {
! J/ j# u7 v) W' v: z! R8 F camArray = Camera.names;& Z7 {1 h3 c3 E4 m( b- K, X
micArray = Microphone.names;
/ b: K9 [8 ^2 P' E6 H if (camArray.length>=1) {/ h0 M5 N" R$ N
temp_cam = Camera.get();
i: U8 _' e( y5 X% }; E. W if (temp_cam == -1) {, M. L& {) G& S
camInfo_txt.text = '视频设备正忙!';
! U! F$ z# g* x* k6 t5 X$ O camInfo_txt.textColor = 0xFFCC00;
) n; O) H8 H" Z% \1 @* U! ]9 N0 ^( [ } else {
1 l4 X" F* {& ?6 t0 d camInfo_txt.text = '视频设备可用!';2 q+ I9 X g2 b
camInfo_txt.textColor = 0x66CC00;& L* x$ f6 h) |! Y+ x) w
}
/ d3 q& g% L" E u% y delete temp_cam;) `' X' ]: _7 R. ^
} else if (camArray.length == 0) {
2 \9 p# `) f; }; v( U camInfo_txt.text = '没有视频设备!';
% H$ {. v. s& X# {! t% S( p+ H camInfo_txt.textColor = 0xFF0000;
. T0 U2 J( c( T2 l p6 a/ m }3 E& _$ R( I$ T2 i b O9 y
//检测麦克风状态 " X0 m. |1 [& R% ?9 O
if (micArray.length>=1) {+ K( z; v, K1 ^6 j6 \" e& e% C$ ?
temp_mic = Microphone.get();* c4 e# {1 [9 J, O2 s; G8 c9 O" H
if (temp_mic == -1) {
# G2 F/ ~7 Q* R( S1 e$ _( a camInfo_txt2.text = '麦克风正忙!';3 u4 J2 k1 K3 d0 U0 S* I% p5 K
camInfo_tx2t.textColor = 0xFFCC00;+ c# P+ p# W: r G- r& k
} else {' g% Y+ a! H) h1 g! }. W
camInfo_txt2.text = '麦克风可用!';
# q4 _/ W) J4 ^0 N' P" D0 v% v. A camInfo_txt2.textColor = 0x66CC00;
0 ^' V. ~$ h5 e! P }
$ i7 I( k4 \. T delete mic_cam;
7 A9 v1 T4 ~' f! C# s# ?( u } else if (micArray.length == 0) {2 T0 X+ N& h8 H5 k5 {
camInfo_txt2.text = '没有麦克风!';# V9 j3 E, R5 ?9 S
camInfo_txt2.textColor = 0xFF0000;! h- ~* U+ m7 ^5 y5 R: U! O
}& L$ [+ J9 X4 D
}6 |" O7 r# n0 V' o1 V' ]
checkforCam_Mic(); |
|