|
|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法.." f$ X- i$ q! |( w
http://www.iphper.com/copstr
; T; O* ~7 p1 O7 n光是留言板+在线涂鸦就几百行代码(看来效率低了点)
$ T A0 A& j8 U0 b T, _! j8 r5 c8 u2 V( Z+ a
8 s' H5 w0 S% U' A g' x
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了+ x1 G* t; y* L- U
+ v7 {5 E- |: {2 q5 C% K" O$ H5 m7 s
0 C$ H9 }" k& y3 H- \//建立与服务器的连接.
+ X2 M! m) @! I2 S/ |0 g7 Xvar sv_uri:String = "rtmp:/recordstream";. R1 H- l! X- \1 G
var my_nc:NetConnection = new NetConnection ();" t% ^0 a+ \8 D
my_nc.connect (sv_uri);
& v3 z9 Y' j8 p* ?//新建共享对象;" N ^. L& z- e! T, T n
my_nc.onStatus = function (thisObj:Object){9 }& s; L- a4 U
if (thisObj.code == "NetConnection.Connect.Success"){
2 B* }2 b/ x- y info_txt.text = "连接服务器成功!!";
* e5 \9 P/ _/ {% s: I info_txt.textColor = 0x66CC00;
( Q+ k& u& J9 t5 n( l3 ^ }2 y& ?/ g+ e+ L5 H
else{3 W' p$ ~- R- F: F0 u- b
info_txt.text = "连接服务器失败!!"; w+ ]# j! x. N4 j7 s7 q
info_txt.textColor = 0xFF0000;3 t$ @! L. Z! @! e3 \! U8 Z+ @0 D
}
. \1 v8 _' ?8 T, J; v}
/ M) `3 U- j0 J e( D" W) o1 ]; bvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);7 R/ w6 {" Z8 q4 ?# Q
user_rso.connect (my_nc);# ^% b0 M* |+ ~8 p
//建立摄相头和麦克风对象
# U- F. T Y) xthis.cam = Camera.get();
. z# C9 E. a- d$ Z2 `this.mic = Microphone.get();% o$ A# }* W' c$ ]
videobox.attachVideo(this.cam);' @" w% S# t0 ?+ N% i G1 {
videobox.attachAudio(this.mic);. B( }7 q9 p7 r l/ M
send_ns = new NetStream(my_nc);
2 Q( Q+ A: v9 qsend_ns.attachVideo(this.cam);
- Z Z ?8 x+ p9 nsend_ns.attachAudio(this.mic); V: ^- h9 I% i
send_ns.publish("humorguy");
3 A) W$ R. S n1 s. v& Cget_ns = new NetStream(my_nc);$ t5 Y( d, }4 h9 q1 C
get_ns.play("humorguy");" P, D1 v: f ~( w
videobox2.attachVideo(get_ns);( Z( e0 j' @7 w' n' [4 D' ~, X- h
//更新聊天内容' d, U! i* ^' ^
user_rso.onSync = function (){2 M# p* Y5 P2 b4 d
chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
0 n* L0 u y- e M8 m chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里6 ^* f9 ^# f4 K. J- H
}% W2 I3 J5 L; A8 \# M/ N, t N# Z& Z
//回车键发送聊天内容
! x/ N% V# t4 `; Vfunction myOnKeyDown() {
6 v$ @7 \( c7 ]+ i* } if (Key.getCode() == 13) {2 s5 q! V4 Y6 C V! @; v
if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
0 Q: M/ h0 V0 P' t/ `5 E7 Z/ v Selection.setFocus(chatInput_txt);
4 C9 D' B% d6 I( l2 k user_rso.data.chatcontent = chatInput_txt.text;/ D2 A; T Q5 E; s% T
if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){' s' c3 x; c2 J3 I" x, f0 m
user_rso.data.chatname = name_txt.text;5 A/ h4 l+ [: q+ b% u! N
}
$ D2 _2 s* U3 c( Y) K0 V2 i }
0 T& @" H9 M: Y2 E& n% X" z }
8 B2 `: {$ p, N# J# z8 v6 T7 F. S}
. U8 ^7 V( r- |) Evar myListener:Object = new Object();
9 r# a# @* y0 L% lmyListener.onKeyDown = myOnKeyDown;
9 I, Q' i; z4 N( pKey.addListener(myListener);
5 P2 H" o9 L) B//构造检测摄相头和麦克风状态的函数
; d2 k- d4 o/ V% r9 wfunction checkforCam_Mic() {
! k. f1 F" ?, G f, c2 N camArray = Camera.names;$ E* C" x. f! C3 v+ I7 \. A7 ]
micArray = Microphone.names;
" \ A7 C: G, O+ a' ]# M, d if (camArray.length>=1) {& I- O6 {; }! ^1 b
temp_cam = Camera.get();) W, Q X- Y3 T' A! B
if (temp_cam == -1) {
! Y M- _4 G$ T/ X2 u camInfo_txt.text = '视频设备正忙!'; e5 |; t$ _5 Y9 B' Y& a* Y( x. B( u
camInfo_txt.textColor = 0xFFCC00;
6 z+ ~" J/ f; `/ c" M; Y } else {
" R+ c8 y& J( M camInfo_txt.text = '视频设备可用!';
# y0 ^3 z# I4 a3 Q2 p camInfo_txt.textColor = 0x66CC00;/ T/ o3 r [7 F! o% Q" u0 M+ T
} S+ T( b5 A7 G |
delete temp_cam;( O# ~$ W! L4 @: w: `
} else if (camArray.length == 0) {5 i G/ V, d; m: D. @5 R9 V
camInfo_txt.text = '没有视频设备!';
: V5 ] G5 X" b7 O6 Z( X/ Y/ y5 T camInfo_txt.textColor = 0xFF0000;
* Y3 _; o+ m( a2 \ }) g. Q, J' |/ I4 h( J8 ?
//检测麦克风状态 E4 g7 \/ E" ]0 O2 N! h( k
if (micArray.length>=1) {- f P0 j- ~9 a4 R- O2 m
temp_mic = Microphone.get();
2 ^# z7 C9 A2 V& r' {* z if (temp_mic == -1) {, @: x0 Z! c( V3 r: F7 Y6 O
camInfo_txt2.text = '麦克风正忙!';9 A7 S$ S2 T' E4 p6 t& o
camInfo_tx2t.textColor = 0xFFCC00;8 E% l' o; |. |) c1 E
} else {
. Q2 [* s/ e6 I camInfo_txt2.text = '麦克风可用!';
; {$ F+ w1 |0 ^2 p0 y# U) \; N3 v camInfo_txt2.textColor = 0x66CC00;7 e8 N3 G% U; i% n
}& k# J4 w$ R, S0 ]9 `2 {: D
delete mic_cam;' L4 J, t6 r. T3 k
} else if (micArray.length == 0) {! S4 s8 q0 F- t3 l0 x0 B3 A, g; k# C* O
camInfo_txt2.text = '没有麦克风!';$ D! J) y6 q* k5 p8 \+ p
camInfo_txt2.textColor = 0xFF0000;0 |7 {) T; h6 x9 F: o
}# I/ g) N4 g3 b& f. z* q0 j
}
. b$ m& K8 V5 C. d0 OcheckforCam_Mic(); |
|