|
|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
2 _" d @% G j) S8 thttp://www.iphper.com/copstr
9 z: o- x$ F% G1 v+ W光是留言板+在线涂鸦就几百行代码(看来效率低了点): D7 J2 h5 X. C4 j
| Z# o% X9 g5 Q D
+ S+ [. o# B2 AFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
* u, T. Y* r# c* f$ d
8 H, y- M4 a0 y
; @/ G* J4 ~# {$ B7 _, m2 J) h
' U, ^) { J. Y% ^" k+ q" I//建立与服务器的连接.
7 u( o( H4 n0 U W% qvar sv_uri:String = "rtmp:/recordstream"; ]9 x6 u2 g1 u9 K' @3 r
var my_nc:NetConnection = new NetConnection ();
9 [; ?, E7 u# ~ q3 Zmy_nc.connect (sv_uri);, ~/ p6 k( i, b, L. C( b7 @8 {
//新建共享对象;
) _$ b' o/ ]5 V3 I; J5 \2 x7 fmy_nc.onStatus = function (thisObj:Object){
8 F7 d' H2 A+ L. L if (thisObj.code == "NetConnection.Connect.Success"){" }; {. M- `. h; D- p
info_txt.text = "连接服务器成功!!";, j, A* w$ S/ e% b1 ~$ ~& _6 s) q
info_txt.textColor = 0x66CC00;
( c: Y) R+ ^ H* H Z* X }
# ?9 X6 f+ v& f( T9 s! { else{
: g4 u; A) q- Q! R% u. q+ k$ L2 P info_txt.text = "连接服务器失败!!"
1 u& o4 j" m; K" T5 \* k: L info_txt.textColor = 0xFF0000;
- d* e2 q; z! d9 O' b- w }
1 o5 X$ {& S% k9 y1 z2 D1 B}5 [) @% m7 Z( `
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);" V7 h. T$ z$ ?) } _4 U
user_rso.connect (my_nc);
8 f4 x7 K3 |$ }) L& K$ E//建立摄相头和麦克风对象3 F3 [' x" |. G8 \& K# B6 A' W8 E
this.cam = Camera.get();
a9 D; L( W7 mthis.mic = Microphone.get();
5 g- v& X/ R. J" Qvideobox.attachVideo(this.cam);1 E; g1 M* W5 X4 B2 x% C b
videobox.attachAudio(this.mic);
4 {- o: S9 V% o! F% {# csend_ns = new NetStream(my_nc);+ H3 ^& n2 ~7 m! U" @# @; v
send_ns.attachVideo(this.cam);* E& G) u+ X3 S) y- d; A
send_ns.attachAudio(this.mic);
/ c# [% k4 m; |+ g4 r/ w& Wsend_ns.publish("humorguy");/ d* r* M8 D! p2 z1 ]/ v( e& W' h
get_ns = new NetStream(my_nc);
i5 c" @! ?2 o" X4 `get_ns.play("humorguy");- `9 K) ]- k% Y- W
videobox2.attachVideo(get_ns);
" k; W4 Q( m+ k" L0 Z2 C" U) F) S//更新聊天内容
& p: ?2 ]+ b6 b/ ^! i6 Cuser_rso.onSync = function (){3 A/ S4 \8 T, h5 N W& {
chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;( V, G+ E; m& q) {) G5 @ R
chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
8 |4 I7 F( @8 t6 R$ x$ L} v/ ` T- s( z+ \" W; E; F
//回车键发送聊天内容" Y, F+ }5 `, ?1 A/ e) ^$ Y
function myOnKeyDown() {; N7 z! W$ r0 C' C1 K7 p% q) }8 S
if (Key.getCode() == 13) {
( \1 D0 w$ a; \8 _, N if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){) o% L) h* i4 }( I
Selection.setFocus(chatInput_txt);: U1 S4 `1 d+ z, u0 Y8 o# }& M) n
user_rso.data.chatcontent = chatInput_txt.text;8 U- M$ `: x: H9 U" z9 }" K0 q9 m
if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
2 |' P5 ^5 v2 p5 A5 D7 U5 y user_rso.data.chatname = name_txt.text;" d% H+ `& x8 q# P+ f+ ^
}
6 c; K; J2 l) u, t u }
+ j: b+ |# \0 ~5 U }
( E% r/ Z/ K, s% g$ K4 w, ]$ q}
2 `3 v) C' v4 Z" I2 mvar myListener:Object = new Object();5 O5 i7 S4 O+ ?6 e! b; |
myListener.onKeyDown = myOnKeyDown;
) R) u0 I0 G4 K+ o* j6 S* z- uKey.addListener(myListener);9 H: A6 |3 [# F3 i0 G
//构造检测摄相头和麦克风状态的函数
P: z! t4 B) v; v* Yfunction checkforCam_Mic() {+ ]. E8 a5 |# `7 ]% P# R
camArray = Camera.names;; M' v3 G- @. q/ c, |. o. F
micArray = Microphone.names;, m1 w% N4 @1 e8 U2 \' z
if (camArray.length>=1) {" K. Y5 P0 `$ _7 j6 w) g
temp_cam = Camera.get();
0 z3 Q; B2 V, s1 C: e" O if (temp_cam == -1) {" L# H. q$ B [6 e! l8 r2 g8 S
camInfo_txt.text = '视频设备正忙!';
( `: b# w3 m3 }2 T5 Q& T camInfo_txt.textColor = 0xFFCC00;; s& ^6 r/ a) x% j' v- _3 H5 H3 \1 F
} else {
1 x. i; V7 l- W6 g, n* ~* E _ camInfo_txt.text = '视频设备可用!';/ v) f! l4 ~9 A+ m
camInfo_txt.textColor = 0x66CC00;
5 w; m& \' n5 q2 A" w0 j }
/ \. {/ a$ c, E delete temp_cam;
" F) A( J4 {& b' {. U } else if (camArray.length == 0) {) {# j5 S' k9 ^2 Z% W, N2 g
camInfo_txt.text = '没有视频设备!';
7 I) f- C2 v3 D, s; B' \ camInfo_txt.textColor = 0xFF0000;
! D. x' u7 j1 Y }
& z+ `3 t% b! }6 _9 x* G5 x, } //检测麦克风状态
& W( X7 T. a8 q( e if (micArray.length>=1) {
6 F% U2 x [0 h1 y( R A temp_mic = Microphone.get();
: Y# K' [3 H, d1 ? if (temp_mic == -1) {3 f9 [5 j% \+ e# I4 w8 g
camInfo_txt2.text = '麦克风正忙!';
* ?$ c9 S0 f* B: G camInfo_tx2t.textColor = 0xFFCC00;( Q/ C) d5 b: d2 y5 b& E
} else {# E6 m' o9 q1 \9 ?, W5 k
camInfo_txt2.text = '麦克风可用!';
1 s; a/ @5 d: K3 R" R! y* L camInfo_txt2.textColor = 0x66CC00; u0 s$ i$ Y5 g3 C( p& E( Z
}' v2 h: c' e3 U. p7 v
delete mic_cam;( u$ y2 I+ {: [# U5 M9 Q) s2 C
} else if (micArray.length == 0) {
a9 C2 V4 _: N6 N6 U' B: \) X. w camInfo_txt2.text = '没有麦克风!';( E* u0 d g. r6 r
camInfo_txt2.textColor = 0xFF0000;# Q1 o1 `. z8 E6 u
}
; ~9 X+ m7 s' _1 V$ u7 T}
5 o% N7 o& O9 g( _+ F, echeckforCam_Mic(); |
|