|
|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..7 T. o, ?6 A" O, r- y B
http://www.iphper.com/copstr c+ F, i) x6 y% i& o/ o3 H' Y2 `
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
/ z! r x% [% s! Z
' [ ^5 g1 E# J1 O* R( }/ b
$ Q9 O6 M( o- mFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了9 f$ x' c, U9 x, _1 x5 M
" e" @3 B" E' J3 X( V) `* ?, w. a4 Q/ Y: z k
/ A% ^& x" {' U2 D//建立与服务器的连接.
3 a4 w9 ^- Q: nvar sv_uri:String = "rtmp:/recordstream";
~ j0 e6 P/ H6 N& U! Ovar my_nc:NetConnection = new NetConnection ();
A. x4 K) E+ h5 Ymy_nc.connect (sv_uri);7 D% R8 W2 }% c3 R6 b$ w$ R
//新建共享对象;0 r% S9 q; S' x4 o' A8 w
my_nc.onStatus = function (thisObj:Object){
, n8 Q. s8 T0 z z9 y- `6 S7 o if (thisObj.code == "NetConnection.Connect.Success"){! ~- \" p5 Y! ^. r5 }
info_txt.text = "连接服务器成功!!";( ~# J; j" h% T" |
info_txt.textColor = 0x66CC00;
+ ^9 a( P5 G4 W7 E5 k3 @! x* G }
1 u1 X! v) ~, f+ k else{- f0 Y+ E0 ~! \' ^# L. M2 J7 E H
info_txt.text = "连接服务器失败!!"
; Y) G& E4 n5 l5 s info_txt.textColor = 0xFF0000;1 ~& r( L3 b: n2 Y1 y* X, w9 x7 P
}
" I: m3 c' h- E e9 {+ w}
( O! s1 s, Y6 q* xvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
! r# {, I8 S- R7 [5 D5 L5 `+ Duser_rso.connect (my_nc);* C" b; G" x$ _3 I( x) V
//建立摄相头和麦克风对象
! a! u4 y3 s I" N) w$ fthis.cam = Camera.get();. K" N* M( o% M& T! D2 A" [' B
this.mic = Microphone.get();3 m6 y( l! R; b
videobox.attachVideo(this.cam);% ^* e+ a7 I+ i+ S, ^4 N
videobox.attachAudio(this.mic);) j) O, k) A& n6 Y7 s7 R( m4 h. K/ A
send_ns = new NetStream(my_nc);
0 S" h% F, A' @send_ns.attachVideo(this.cam);6 P ~! m% B% ~. _8 v' h8 K; Z- M) I
send_ns.attachAudio(this.mic);
+ K" j9 y3 E3 R* N) C% tsend_ns.publish("humorguy");
' e; h( x% Z) @6 v6 D, I, K& Pget_ns = new NetStream(my_nc);1 ^: }+ B- P! c1 z: o6 V
get_ns.play("humorguy");
, h8 F3 b2 r( r7 w0 h2 |videobox2.attachVideo(get_ns);7 [& R2 O9 v0 p1 ?) X
//更新聊天内容
^# N4 Z$ G% f3 Y7 b) a iuser_rso.onSync = function (){$ }. f3 w. Q* ^& d/ O
chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;$ z6 R; T+ J: R6 e0 z
chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里+ x4 y& I. q B+ }, w
}
2 B# \ Z7 L5 H3 ]5 A; Q+ G//回车键发送聊天内容
- G) \4 C7 I. q4 B9 R! X4 afunction myOnKeyDown() {
& l4 O6 Q2 G+ q if (Key.getCode() == 13) {( ]; \ I S1 b+ J% p; j$ c5 z& W9 a
if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
+ ]3 {& b5 z: g8 _, K Selection.setFocus(chatInput_txt);* P$ ]4 O$ g6 }" |" ]0 k* N
user_rso.data.chatcontent = chatInput_txt.text;
" g9 T1 }" ]+ ~ if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
1 R" w% @0 r' `3 i% X4 L' _ user_rso.data.chatname = name_txt.text;
# n8 Z% T8 ^) y }8 P& T7 G0 t7 s) Q1 Q+ s
}
4 Q2 f$ a; o k$ S2 I9 u }
, N7 l3 r( Y3 `: ~3 d}
1 i+ }* m5 a4 j" Rvar myListener:Object = new Object();
, ]; K' U9 A0 v( U5 amyListener.onKeyDown = myOnKeyDown;
! Y- ^# u: y' AKey.addListener(myListener);& R) I E \# @( i' ]' l
//构造检测摄相头和麦克风状态的函数
, K. @0 v! N* A% ^/ v; Nfunction checkforCam_Mic() {9 a6 H! t& X. k/ S
camArray = Camera.names;. V8 E8 P- S- N- _
micArray = Microphone.names;6 Y' c2 r. V, ^6 m; p' W- ^6 x/ `* Y3 _
if (camArray.length>=1) {* ^- {* S7 s1 ^+ d: x
temp_cam = Camera.get();
) C9 u: R' Z2 B if (temp_cam == -1) {3 c) u. S! F, w+ w- @! C
camInfo_txt.text = '视频设备正忙!';: U$ T$ u2 ]8 t' y: k9 M
camInfo_txt.textColor = 0xFFCC00;; n. }; Z/ N8 y/ p5 J
} else {
3 E7 W% v! K+ {9 h8 o {- P camInfo_txt.text = '视频设备可用!';
7 o; y9 N0 t1 i camInfo_txt.textColor = 0x66CC00;
+ L9 G9 D* N8 M4 I* z8 S }
% M+ k v; o1 v. m8 Y3 V! x delete temp_cam;, g+ F4 e0 h' v; _; X9 H4 ?
} else if (camArray.length == 0) {& y- ] ~8 @: Z8 Z5 ^4 i
camInfo_txt.text = '没有视频设备!';
) N7 v% ] t0 a2 @& L' T camInfo_txt.textColor = 0xFF0000;- P' B- K3 S) A% O5 }, |
}' r. z" [6 o3 h5 k
//检测麦克风状态 " S6 w) x$ m; o" ]4 ]1 v
if (micArray.length>=1) {: P# R9 F" _9 W
temp_mic = Microphone.get();
6 @) X' H" Q R2 {, f$ ] if (temp_mic == -1) {
3 E# B: P) n/ E- S- G {% _ camInfo_txt2.text = '麦克风正忙!';
& D) a" f! ^ C& ? camInfo_tx2t.textColor = 0xFFCC00;
0 C% Q; D |6 E; a' o } else {1 w( a) S1 }) |% G% ?+ D
camInfo_txt2.text = '麦克风可用!';
C, |0 ]0 _9 q \5 {1 M1 D- @ camInfo_txt2.textColor = 0x66CC00;0 m3 G' @" O& f. w) E" u: I6 n
}
r7 Q: {+ k* V2 e1 K delete mic_cam;
2 |8 ^' Y! E8 \' E- p4 y' N } else if (micArray.length == 0) {
2 E! L, Z+ |/ b+ v3 T2 x2 \ camInfo_txt2.text = '没有麦克风!';8 _+ I9 s( u# m) T
camInfo_txt2.textColor = 0xFF0000;& D/ T- T0 A) e1 U
}) W- b( W4 Y) E" y* u$ u: J
}$ X3 G: x6 s7 | G) L
checkforCam_Mic(); |
|