|
|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
- G- L( H" Z+ P+ p" V' c( y7 \http://www.iphper.com/copstr1 c7 e' j! c5 v
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
1 e. P# Q! W# y6 X D7 ?/ ~; |# ^7 o/ {3 z
! X$ G' s( r$ `# d4 e9 j" }" u! F
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了; u) k) z# b; f3 B
/ q+ a" \3 h' q9 j5 r$ G
8 y4 S% g4 Y$ T7 Z" A5 Q
. Y. A) u4 \7 H3 [8 N$ O* u# I//建立与服务器的连接.
; W9 C( u' ^8 l: T/ `var sv_uri:String = "rtmp:/recordstream";+ ?1 ], C5 E- ?! V: T
var my_nc:NetConnection = new NetConnection ();
4 [" x I3 q) C% gmy_nc.connect (sv_uri);* O: O6 u* T* I b$ [! Y
//新建共享对象;
# n8 A( A; K( s* p1 lmy_nc.onStatus = function (thisObj:Object){
: J9 M, P- K, A# |. A/ { if (thisObj.code == "NetConnection.Connect.Success"){, P* D6 f* s) q! t5 \1 {
info_txt.text = "连接服务器成功!!";* l i4 f- t+ x9 y, o9 {
info_txt.textColor = 0x66CC00;3 N4 n4 H- u6 O* f8 i
}
8 e3 _ Y3 {0 ]# m1 f8 `: ] else{
+ A) T3 a1 K! b5 C info_txt.text = "连接服务器失败!!"
' H" f$ P$ S: w. V info_txt.textColor = 0xFF0000; i' X' C! R% Z# R3 e( V d
}! D: @- g8 q7 B; B7 G9 y/ v2 W
} K1 r# o# N! r; P# ?
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);2 F) D# v, o4 O, G( D$ I& c
user_rso.connect (my_nc);0 @ k5 n* o0 V& V* E
//建立摄相头和麦克风对象" `) ]2 Q' Z. S) v4 U
this.cam = Camera.get();
; J# x5 Y$ G7 w* c Hthis.mic = Microphone.get();9 r0 E. v( }6 U, O- i' c( b% w
videobox.attachVideo(this.cam);9 O& z9 Q" X) p" P3 F
videobox.attachAudio(this.mic);" _. d) k* S: o) `# Y, j' m n
send_ns = new NetStream(my_nc);
7 P- }0 \5 x8 c9 [& [send_ns.attachVideo(this.cam);7 d2 ?7 p3 A. j. K" {# ~/ {- u
send_ns.attachAudio(this.mic);3 V. b5 h; \! A# X% t4 }
send_ns.publish("humorguy");
5 r9 t6 C- d( d1 W6 j/ }1 y( @4 lget_ns = new NetStream(my_nc);" b6 j# F* d2 [. k
get_ns.play("humorguy");- q3 Y; y8 v" o4 T+ V
videobox2.attachVideo(get_ns);
1 |: U5 w8 y# d B9 {2 j S% R//更新聊天内容
$ N0 s4 T' X( auser_rso.onSync = function (){
4 O7 G0 ^8 }, ] chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;, j* r6 a0 J' r6 K. G- X! p0 _: w% e
chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里& e N! K" U7 o$ g; u
} P' G# n3 K3 E( m
//回车键发送聊天内容
" ~+ O9 F9 E" R: l% l* g1 B Qfunction myOnKeyDown() {2 H( v9 p. t' L1 y. ^
if (Key.getCode() == 13) {% d" L- ~4 n+ E& @% A6 F" Y) Y1 D# q' v
if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){! o/ Y3 f& \1 U
Selection.setFocus(chatInput_txt);
* V8 J% B& V; r7 N, J user_rso.data.chatcontent = chatInput_txt.text;( H9 H0 r6 H2 ^8 ^7 L/ x+ ?
if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){4 J, X7 f5 D0 Z/ \9 h' a
user_rso.data.chatname = name_txt.text;1 |4 y! [* Y( q3 p4 ~
}
, `7 `0 @4 J7 N3 l. ?8 Y+ h( [. F }: `' L3 B" }( J' d
}
' K! Q# L3 v/ C}
% g9 d' D% y- A( x$ Q( Avar myListener:Object = new Object();7 H4 {" j [' ?
myListener.onKeyDown = myOnKeyDown;$ @: s: j+ A3 y7 K5 N& i# D+ R2 q
Key.addListener(myListener);: H d/ u. ~/ r/ f# \
//构造检测摄相头和麦克风状态的函数* L# O9 W/ h6 ~% ^6 |& Q# F7 L
function checkforCam_Mic() {7 {7 {$ p9 I/ n9 R" m* E
camArray = Camera.names;
* @% u9 }$ z6 w \( m6 n micArray = Microphone.names;
8 h5 n# {$ D8 B if (camArray.length>=1) {
' C+ W7 R: E6 f1 c$ }8 K0 p temp_cam = Camera.get();& N n7 v. e3 t$ @( N' N1 R; n% z
if (temp_cam == -1) {; @/ S X2 Q" I7 b5 `$ c2 v& l
camInfo_txt.text = '视频设备正忙!';, Q ?! [: Y. ~! p4 S- @
camInfo_txt.textColor = 0xFFCC00;: m9 u: W* |+ s0 X }$ F$ n& j
} else {
( ?4 U" r8 n& o% r. w: K camInfo_txt.text = '视频设备可用!';
$ }9 h) d% [( i9 N2 n camInfo_txt.textColor = 0x66CC00;
6 N6 z% {. C ~2 W% P! s8 U }
8 r- k) x$ h% b( J' _- v5 ] delete temp_cam;
7 b$ y; t4 |. d z } else if (camArray.length == 0) {3 S- d4 r' c" q9 j
camInfo_txt.text = '没有视频设备!';' q3 m+ }/ @7 z5 q( [) ^% v
camInfo_txt.textColor = 0xFF0000;/ L" G4 t0 Z4 b" }* B; K
}
4 h+ c: |) H0 k6 c: F7 q$ y$ @ //检测麦克风状态
! A+ x7 s7 {! f4 X8 p5 n7 J if (micArray.length>=1) {
- z5 P% X( O8 s. i temp_mic = Microphone.get();
! s: J( d1 C6 M9 n* N- F. R if (temp_mic == -1) {) \- V' a o7 K! t1 O
camInfo_txt2.text = '麦克风正忙!';7 r2 W0 C/ h% F8 N8 \5 S
camInfo_tx2t.textColor = 0xFFCC00;
' h* q2 e* E3 K' }# s. f6 c# \ } else {) p) f) p3 R$ o! d* N
camInfo_txt2.text = '麦克风可用!';+ [+ @$ L7 t- p3 i7 x
camInfo_txt2.textColor = 0x66CC00;- G4 l q& S( S# t+ b7 `, K6 \
}& w& ]- p; A. A, ^7 b
delete mic_cam;4 {! o) t5 [7 K' h2 W
} else if (micArray.length == 0) {& ] O1 R% C O% d: h1 s9 a$ o
camInfo_txt2.text = '没有麦克风!'; K; z \- N: d; }
camInfo_txt2.textColor = 0xFF0000;
) n2 y3 C7 U7 ~- }9 H5 g }
2 w+ V8 Z% R \' Y. Z5 t}1 i# |( l* g6 X. s
checkforCam_Mic(); |
|