|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
! e% p. O0 R* b6 ^$ }http://www.iphper.com/copstr$ Z8 O9 Z' J( J* ~0 U: a& H& T, c. B
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
p, F2 C) q; b7 i! ?
2 O* ]: J6 a `
) u1 W" z5 B& ^" Y; _FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了" I! s. }+ r3 m; R8 [! |
5 a( X. p9 ^- I3 H! m- W- O8 b) ^/ P, a1 {
/ @. q h# U+ h8 t' D0 |//建立与服务器的连接.
6 A* }/ D: R* e1 Nvar sv_uri:String = "rtmp:/recordstream";
+ b* {2 B9 s1 cvar my_nc:NetConnection = new NetConnection ();- W/ |" I; ^, C3 {) E9 S- F
my_nc.connect (sv_uri);
0 k5 r8 u7 H' T: g+ C//新建共享对象;; b5 z0 a+ s; n0 |9 S* E
my_nc.onStatus = function (thisObj:Object){
. h: v( s& ] U# k2 }/ R if (thisObj.code == "NetConnection.Connect.Success"){
, g. E$ `! y* I" y5 O info_txt.text = "连接服务器成功!!";
' W. f4 i: T3 _: L# P info_txt.textColor = 0x66CC00;9 @4 u. y* G5 c! K9 R% [
}
4 ?& T1 c. l F4 s' F! j else{3 g2 k8 J& c* j
info_txt.text = "连接服务器失败!!"
) Q G# e; H4 K" X0 [ info_txt.textColor = 0xFF0000;
# I+ h: v( |2 s: l M7 A }& u* {) q& `" u3 a# O
}
1 ]$ t7 M$ K( Q0 rvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
( @: p- F8 M Xuser_rso.connect (my_nc);6 Z: a/ R3 x, y/ t* [2 K5 c& x
//建立摄相头和麦克风对象
" B% R* d9 m- h* f2 r! |0 R, u a; g! d, Bthis.cam = Camera.get();- I' {: x: Q9 W& K# G
this.mic = Microphone.get();
4 ^1 N3 X& K8 w2 y& W. Dvideobox.attachVideo(this.cam);1 ^" N" I# C& y: y! `8 P
videobox.attachAudio(this.mic);
6 q, a& }# E- _0 ?7 fsend_ns = new NetStream(my_nc);; }* d/ Q3 A' l* h
send_ns.attachVideo(this.cam);% b2 o2 C$ n$ ` a& S- }* P
send_ns.attachAudio(this.mic);
/ j4 i* ^# G8 [! Z; ?2 Q# Asend_ns.publish("humorguy");) k) N3 f' H" I" n
get_ns = new NetStream(my_nc); q: q' x2 ^- R8 J9 A/ g; N5 O' c
get_ns.play("humorguy");
# F9 W q. G" T% {5 J/ a' x; Nvideobox2.attachVideo(get_ns);2 q) T* h# i- @6 ?
//更新聊天内容- f7 X4 O. c+ m7 j+ }* T2 M
user_rso.onSync = function (){
. p, [ w8 W% }9 O9 ?( m' G chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;6 I2 @) G% v9 O5 r6 F
chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
0 B L5 S% A& H* v& L}+ w" l- {+ A8 |! [$ H" G( j
//回车键发送聊天内容4 c7 ~0 R+ S4 N) h/ ]
function myOnKeyDown() {4 g1 j# B1 h8 M) d- [4 l
if (Key.getCode() == 13) {
8 F v7 A+ ^ [- ^9 D+ a8 j if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
$ E; _/ x4 x3 p8 p5 P7 p" Q Selection.setFocus(chatInput_txt);
) V9 k* b% ]- x# B# I1 h user_rso.data.chatcontent = chatInput_txt.text;
3 [8 o ?( L( _( \' ] if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
5 r* Z) D: S9 q user_rso.data.chatname = name_txt.text;! K' Y3 j+ Y5 f3 p4 ]+ n' x4 V
}
/ ^6 F3 K4 G' y4 C3 q/ L- m/ [ }
+ u! ]" |( u# U) K3 q }
! F4 {! b: q2 `* e# O9 j! l+ u}
6 c: l+ E" [ I2 G3 J/ s7 Q, T: Uvar myListener:Object = new Object();
! e6 S* ^# ~# F8 vmyListener.onKeyDown = myOnKeyDown;
; t# M( J8 |0 h5 ^; sKey.addListener(myListener);" L. |% Y$ y A: p5 {
//构造检测摄相头和麦克风状态的函数& W) V7 e2 O2 I. z O
function checkforCam_Mic() {
7 ]" k. U2 M1 ^+ e# } a7 E camArray = Camera.names;" Z" p* L/ E1 T* ]
micArray = Microphone.names;
7 H( k3 H+ \) Q. l8 K8 ~ if (camArray.length>=1) {
+ h- [3 `& \* E7 k temp_cam = Camera.get();" F: }# I! X8 h( Y
if (temp_cam == -1) {7 Y& @7 k: B- b: E1 M; V1 Z
camInfo_txt.text = '视频设备正忙!';
8 n* W$ W6 ^- V/ Y camInfo_txt.textColor = 0xFFCC00;( S' r) A9 w! w9 [( A
} else {% H3 R3 s3 g9 z7 Y+ j7 B& A N$ r
camInfo_txt.text = '视频设备可用!';
^& F( L7 E# g3 C! E camInfo_txt.textColor = 0x66CC00;" `6 h/ d9 N; z7 T# v& o/ ?
}
) t+ ]4 {9 S! d Q; S$ E( ~ delete temp_cam;3 |" D- o9 j1 E# A* B) ]& M
} else if (camArray.length == 0) {
0 r7 D# z2 b7 z# o8 k camInfo_txt.text = '没有视频设备!';+ J2 H! a' d2 B- U
camInfo_txt.textColor = 0xFF0000;6 |8 W: }5 Y3 n% M3 a( R. U# L+ \8 |
}% D& i9 I. x8 T
//检测麦克风状态 ; s$ w* h! d: J3 l
if (micArray.length>=1) {
9 C* N( [; ]: t9 y) S' E4 c, L; g temp_mic = Microphone.get();
& P/ t! @+ e7 W S if (temp_mic == -1) {
+ D6 Y& s3 _3 ~# d( M4 o3 A camInfo_txt2.text = '麦克风正忙!';8 b& z, @5 `& f$ C+ A
camInfo_tx2t.textColor = 0xFFCC00;( b7 T* b0 A6 q ^1 O8 }7 \
} else {; `, o6 t# a0 s4 S) k
camInfo_txt2.text = '麦克风可用!';8 g( U/ i8 a5 L8 m) q
camInfo_txt2.textColor = 0x66CC00;
' i' l( `2 {8 h }
$ s& c2 Y( v6 x9 Q% ~8 A delete mic_cam;
5 [3 p5 ]* B( N* {7 r } else if (micArray.length == 0) {
" d3 I+ M5 Y0 x, ? camInfo_txt2.text = '没有麦克风!';5 C. d/ p/ t- _' |( N
camInfo_txt2.textColor = 0xFF0000;! _3 H2 E7 ^! e8 Z0 C7 p
}
6 l; o+ K+ p0 K/ u! f4 F}
- ]1 m- K) x% bcheckforCam_Mic(); |
|