|
|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
. c% w* M& g) F- W* u, Ohttp://www.iphper.com/copstr& X$ T) t1 y' B: G
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
1 T/ E: T: Y" e) M; n6 H ~
# d* p4 l) V9 L$ z2 Z3 m, W5 @! n+ d6 v3 A
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
* W/ _# p( P- q, O2 k5 O
6 j2 G$ ^5 z% \$ U' d9 t- s$ m* C. x* `5 a1 ?9 X/ k" l
+ f8 ?: o6 [, r# |( U7 Y Q
//建立与服务器的连接.
+ k8 r8 v2 m5 ]) l* c4 Xvar sv_uri:String = "rtmp:/recordstream";0 K4 x4 I% P8 w/ |
var my_nc:NetConnection = new NetConnection ();
2 K% @ C( e% P# l- c5 imy_nc.connect (sv_uri);4 n, W" Z" W& Z/ Q
//新建共享对象;
6 K {4 \+ p7 k% c1 o/ m' cmy_nc.onStatus = function (thisObj:Object){
: z. O- S7 e3 z5 y+ R# o: D8 K* p if (thisObj.code == "NetConnection.Connect.Success"){
8 X2 ]* V8 _0 w& f info_txt.text = "连接服务器成功!!";
( B# r- E, r- F info_txt.textColor = 0x66CC00;
% n( l. W9 H1 p3 q3 y" g6 I# B }
. j6 m2 C, M2 |6 a5 y. k% |: P) T else{3 g% `$ A0 |$ i) t
info_txt.text = "连接服务器失败!!"0 ?* K. b$ U/ _2 Q6 q$ S7 z
info_txt.textColor = 0xFF0000;- N# i6 S/ R3 C) G5 W! b! z
}6 P5 n5 U) N6 M$ r( L
}
+ l1 v& o" H4 Y" R0 q+ L+ ?* avar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
O4 y$ ^% ]( [! X" g7 ]user_rso.connect (my_nc);0 M- I' |$ {% J2 d
//建立摄相头和麦克风对象
, o1 y/ B9 M$ w1 G2 Uthis.cam = Camera.get();
5 ~5 t0 p! B- M/ Fthis.mic = Microphone.get();
* Z2 g u/ X1 D" d3 Kvideobox.attachVideo(this.cam);0 x! k1 o. H" U' ]! V' p% m7 _9 T" Q4 K
videobox.attachAudio(this.mic);7 j, M- v8 P5 E
send_ns = new NetStream(my_nc);2 l$ d+ U# k9 Q9 E4 W
send_ns.attachVideo(this.cam);5 j' [) y1 r5 x/ y0 E# o
send_ns.attachAudio(this.mic);
' H. B6 v' e0 m4 ?/ vsend_ns.publish("humorguy");3 k6 d$ E, d0 C
get_ns = new NetStream(my_nc);* s/ Z/ S$ ^, F
get_ns.play("humorguy"); F4 C7 T9 l2 y
videobox2.attachVideo(get_ns);
+ B, D6 E; \0 A# {$ y$ s//更新聊天内容3 \( e- T% v7 n1 H
user_rso.onSync = function (){
; N, n5 \8 m, n( v# @$ E chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;7 z2 @6 i1 \; r! ~) f2 l: U
chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
9 i5 k4 R( S3 |}
3 a) }6 h5 a/ `& w* C% {//回车键发送聊天内容
" \" n& T; [7 N9 r% \. Ofunction myOnKeyDown() {
) n# S: c6 P# d3 w0 Y. K if (Key.getCode() == 13) {# E8 ]+ o- Z5 E6 P, |4 @$ z" S
if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){5 C7 \! |, u3 X+ K' X# N1 z
Selection.setFocus(chatInput_txt);7 I U- F3 p) a. M0 B
user_rso.data.chatcontent = chatInput_txt.text;
) v$ q) M H) C8 J% ` if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
. ^3 r( B' e; ?2 \. B8 z user_rso.data.chatname = name_txt.text;5 Z, c ?9 x+ k5 G1 x- V
}
% _- X& p1 V8 o3 \ }
- L" f/ m, U9 G* o$ r }: w: v" d3 M7 @* d
}
5 I) N, j8 ?, f+ kvar myListener:Object = new Object();1 ?/ @" w. v! u$ _5 T
myListener.onKeyDown = myOnKeyDown;/ E; S1 h' ^2 S+ {6 A. | F# r
Key.addListener(myListener);
6 Y7 i2 t i) k' \0 Q; A! t//构造检测摄相头和麦克风状态的函数1 u- Y( H& `5 k T4 v' ~8 R
function checkforCam_Mic() {) J, W! E! f9 e& B0 _
camArray = Camera.names;3 b$ l6 l' W* X4 v# F
micArray = Microphone.names;
' E( h7 X5 G) r- G% _, B. Q if (camArray.length>=1) {. T$ W# h: d& t. x
temp_cam = Camera.get();
( ?4 N- K) W! Q1 u8 ?( N0 ` if (temp_cam == -1) {9 Q+ z8 ]! l t
camInfo_txt.text = '视频设备正忙!';! ]# F6 |7 O6 l- k
camInfo_txt.textColor = 0xFFCC00;8 h5 j) _# F- u8 D) t/ \/ z% j/ l0 b7 g
} else {
, s2 A7 s/ y: u' A; t, ~3 e camInfo_txt.text = '视频设备可用!';
% Q2 n9 S1 x' ?2 i camInfo_txt.textColor = 0x66CC00;$ N" S& w8 t3 W5 b) x7 i
}
$ w, F! d2 b$ P3 D delete temp_cam;. R4 k; D& Q5 W- V( ^
} else if (camArray.length == 0) {/ o% n) V; |" n( W+ D
camInfo_txt.text = '没有视频设备!';. k) y" m* d$ O8 s7 ^
camInfo_txt.textColor = 0xFF0000;
' o. q# m) R9 N1 C }
9 \* x5 h2 l" J* ]& o //检测麦克风状态
% v0 v! t' K6 M) b6 @$ k if (micArray.length>=1) {* L, S; ?: d" |' [+ \! }
temp_mic = Microphone.get();
0 t- z" o, |, A) p! a5 W* O5 B if (temp_mic == -1) {8 q6 R" |" A9 u& A( Q/ N
camInfo_txt2.text = '麦克风正忙!';
0 |0 o2 _* K/ L8 D camInfo_tx2t.textColor = 0xFFCC00;
0 d7 S% B1 g! v7 ^/ a } else {+ a8 K" a( j" _; c [* U' b$ R
camInfo_txt2.text = '麦克风可用!';
, X: l% I2 e2 w- I, D camInfo_txt2.textColor = 0x66CC00;
( d5 R" ^& F! t' G g, D$ P }* @9 p x* m# P2 h
delete mic_cam;
% k' S* G8 k5 H1 q- M1 L } else if (micArray.length == 0) {& J2 Q# t2 g: k
camInfo_txt2.text = '没有麦克风!';8 z( Q7 s& Y- Z. D3 S( c4 I
camInfo_txt2.textColor = 0xFF0000;
( O. Z# j" Q6 ^) t1 c* Z1 x2 | }) p1 z2 }, s8 r @/ M2 N8 c
}
6 w- |! ^ s3 v$ b mcheckforCam_Mic(); |
|