|
|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
* L( ]& Z' ^5 j* f) g) khttp://www.iphper.com/copstr1 {; ~6 U h" B* k
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
) ], B2 M; F) K" j2 w; K8 e( ^& O
& f$ O- h# ]& J* K( o) _: V$ }
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
* i; w/ X$ z2 [ z. p
+ a1 M0 @3 s8 r: m' J) M4 u6 @4 a0 ~( i
6 D* C& O4 ^7 s! I4 D9 x2 C# b
//建立与服务器的连接.
4 b; L* d: U: m+ _5 x/ jvar sv_uri:String = "rtmp:/recordstream";
" H: I/ r5 z# A; D/ }2 _9 cvar my_nc:NetConnection = new NetConnection ();
6 E* F: q/ h& O1 {, B5 W4 o/ fmy_nc.connect (sv_uri);& R8 C4 X; J& ?
//新建共享对象;( N2 [7 N( y/ K# ^3 T; V4 d
my_nc.onStatus = function (thisObj:Object){6 f: V1 J9 ~2 S. o
if (thisObj.code == "NetConnection.Connect.Success"){$ ?7 i% @6 ^) V/ h9 o, G
info_txt.text = "连接服务器成功!!";
; l* e$ t* F( _& l( B! m info_txt.textColor = 0x66CC00;
) Z; ~: O% E4 F6 T }! T t, h. ~, B2 S7 g% w
else{+ N# j/ K8 @4 V, S. S
info_txt.text = "连接服务器失败!!"0 |5 O, w: a; I; m" p
info_txt.textColor = 0xFF0000;
; |# A6 j) C# r6 r }( R8 y0 X; l2 {4 r& d: m
}8 q3 R6 p) L6 s2 y' C |' b
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
b: A e- o% Nuser_rso.connect (my_nc);
6 Y/ L( |9 A4 [: H3 @& q& ^. Y//建立摄相头和麦克风对象- X- u& A [! p
this.cam = Camera.get();
' ]- q) a4 p+ J" j a. h0 e' uthis.mic = Microphone.get();7 n1 [$ I5 l9 p* A0 F$ r6 @& a
videobox.attachVideo(this.cam); n6 A1 n8 u$ j
videobox.attachAudio(this.mic);
- v/ m# m7 f* z& n9 s# @- I Csend_ns = new NetStream(my_nc);3 |2 p$ H: o* l6 x' O9 D3 R4 I
send_ns.attachVideo(this.cam);
: ^$ z# a5 }2 [6 esend_ns.attachAudio(this.mic);. d- M* o+ i3 j6 b* {3 \! _
send_ns.publish("humorguy");1 P9 o# O2 u* U: w
get_ns = new NetStream(my_nc);3 V6 s- r& Z5 H7 K5 T
get_ns.play("humorguy");
' ~7 Z7 G( U$ i5 avideobox2.attachVideo(get_ns);. G+ h( R/ O6 f2 r4 i! b4 h) [
//更新聊天内容0 t% G7 {+ V, L5 |% ?3 {
user_rso.onSync = function (){
6 ?5 z/ A# F G8 q. @ chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
8 w |$ g' v. ~( ]: p" S& \/ z chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
+ }8 b( P" _4 f6 e+ z}
: t$ P" Y* O1 G0 [//回车键发送聊天内容
5 D" N7 J9 E' o2 |function myOnKeyDown() {
3 G% C2 T7 r0 h if (Key.getCode() == 13) {0 `" t8 F( ?, M8 B( Q7 h- g
if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){5 a! y6 p. ?5 x. S) H5 Y
Selection.setFocus(chatInput_txt);* Y& z/ r' O" j3 L: w
user_rso.data.chatcontent = chatInput_txt.text;
/ c& I7 U, G: ^: m; q4 { if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){$ F% c, z4 X8 {1 e% r0 P( z Q+ V
user_rso.data.chatname = name_txt.text;
1 ^, A, O7 E6 s! _; m6 C }
" Y$ C9 g V5 }( {3 x }' m3 ^ o) k7 f' b1 H
}
3 H: q. i5 H: s7 x3 ]4 n0 q& v( V}# N) _ |! k/ L' V+ S- n& g* c9 T
var myListener:Object = new Object();) Z- x# D8 R/ }7 t' I
myListener.onKeyDown = myOnKeyDown;! |9 }+ g4 s9 O" p
Key.addListener(myListener);
4 J- g" z- T2 K3 }0 g0 \: q//构造检测摄相头和麦克风状态的函数6 G. ?- M6 M, C* j6 J
function checkforCam_Mic() {
" H4 E# Y: n9 j: ]/ b4 ?6 C camArray = Camera.names;1 I3 G# I y- Z% c
micArray = Microphone.names;9 T+ C& Z$ z, k0 f6 z. ]
if (camArray.length>=1) {' E- G9 m' g* t! M; C; w8 M
temp_cam = Camera.get();1 p* h, r" I" J0 t" Q4 Y) G
if (temp_cam == -1) {' q! B- T" b( Z4 E$ X# o) ~( p' R
camInfo_txt.text = '视频设备正忙!';
7 z( j" A: Z8 t5 y5 ~0 b c4 @ camInfo_txt.textColor = 0xFFCC00;
0 i7 e& ]) {6 B3 R$ D" Z$ A } else {5 [' i7 Y2 K5 R; U
camInfo_txt.text = '视频设备可用!';9 a: R7 r5 V( @8 J9 I5 e; Y
camInfo_txt.textColor = 0x66CC00;3 y( U! z3 w2 D& p7 C
}
' J- Z: l) [: k( X$ S& k& T1 [ delete temp_cam;
3 [" K! ] J3 y& e0 _. G } else if (camArray.length == 0) {
9 k5 W' a, s4 h camInfo_txt.text = '没有视频设备!';
1 Z8 D4 q7 r5 A! I0 o; M- \3 F5 ~. E2 G/ G camInfo_txt.textColor = 0xFF0000;
1 g7 e7 o' X t2 {; j }
- ?, m) r: k6 W% e2 l* Z- Z //检测麦克风状态 5 C" x0 f$ N0 t- o; ~& W0 G: G
if (micArray.length>=1) {
. l M$ j2 H0 \; N temp_mic = Microphone.get();5 j; S. c+ I7 P
if (temp_mic == -1) {+ X, L* [. H4 @; N4 M
camInfo_txt2.text = '麦克风正忙!';$ J, y& a& ~2 e7 U% r: R. y- j8 ]4 U
camInfo_tx2t.textColor = 0xFFCC00;& u5 o. U7 b1 _2 t. A) ~# X: a1 `
} else {, {. R p p- K' J: Q: X( n! R
camInfo_txt2.text = '麦克风可用!';
" ?! W) G' \; y2 I8 P camInfo_txt2.textColor = 0x66CC00;
, J- m" k( j* f# Q6 Z }
+ U" y4 Q" D& @2 K delete mic_cam;4 j$ @" [) N( {8 O. q2 \2 S4 |
} else if (micArray.length == 0) {
5 F/ n+ k: c: V ? camInfo_txt2.text = '没有麦克风!';
4 F$ r' ]! l. A' S/ a9 F camInfo_txt2.textColor = 0xFF0000;
j5 w+ a# q- n9 V: r }
& f- ]" W8 B t" r/ ~9 W& L3 G! S}0 D( B. q5 J/ t5 F* z% H' w- K
checkforCam_Mic(); |
|