|
|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
) |! T& q2 d. t/ K# jhttp://www.iphper.com/copstr
$ B! w7 x; e% M8 j- }; p& `5 Z' L光是留言板+在线涂鸦就几百行代码(看来效率低了点); c& S: X- p! h. f$ }0 A
0 E7 I6 F) E- s4 G
4 |" A) H. T: ]/ J$ X/ }& cFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了( h2 s8 n) R0 _& P# D. V
/ W6 t( n" B- h' O- D, n
7 g/ ~# N' y5 E
$ I1 R/ _7 U% C//建立与服务器的连接./ b9 R) K" q- Z- d1 ?7 U; R+ P2 p
var sv_uri:String = "rtmp:/recordstream";" A5 @. e W$ I- b
var my_nc:NetConnection = new NetConnection ();9 q: c( A& ^) b
my_nc.connect (sv_uri);
& ]" N O# Y# _6 T//新建共享对象;
6 M4 n" g+ j& g9 }7 Z/ @9 Q7 j% Vmy_nc.onStatus = function (thisObj:Object){
6 p! d% a4 {. Q9 U( s( p4 C& M if (thisObj.code == "NetConnection.Connect.Success"){
# j" d& Q8 P/ L0 Y; ` info_txt.text = "连接服务器成功!!";
/ Q4 E- F# Z& R' [& | info_txt.textColor = 0x66CC00;
7 |" ^- r. x' s2 T9 \* N4 X' V9 d }
, l' S w1 y* A2 R8 \ else{/ S6 v2 v) B5 H) Q! ?9 b) ~' s
info_txt.text = "连接服务器失败!!"
! v D' z$ e: d7 r/ b" u info_txt.textColor = 0xFF0000;5 {+ l' n8 J( X9 |) E
}
# K* x! o: U. x6 Y+ O6 S: O# f- d/ [. Y}1 i5 L J# ]% ^+ c- H* X2 K
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);1 p0 {( i. X7 G# v# Y
user_rso.connect (my_nc);9 S1 P! L0 U, j- D. T
//建立摄相头和麦克风对象2 U. R5 [# ~6 a
this.cam = Camera.get();, h) H' k7 _2 g) g1 X0 Y
this.mic = Microphone.get();( l# h' V& j. O' D' @
videobox.attachVideo(this.cam);# V9 K( K9 M- z1 D) E% @
videobox.attachAudio(this.mic);: N" a& A; K% ^( e. v/ g
send_ns = new NetStream(my_nc);
- R8 m& R; p: N9 |' @1 Asend_ns.attachVideo(this.cam);
! X! W" @: f4 I% F; Nsend_ns.attachAudio(this.mic);
& Z4 n( j$ }- b! g' p7 Msend_ns.publish("humorguy");) [ ]7 n2 @7 ~& f* Q2 e5 X
get_ns = new NetStream(my_nc);. J& L* w7 z/ I( V* V, E* t3 F
get_ns.play("humorguy");
: z3 U3 d- D* ^videobox2.attachVideo(get_ns);2 E8 m' D/ q6 B* T" |, ^' Q! ~, w
//更新聊天内容3 J% j! r3 l* n3 l3 G
user_rso.onSync = function (){* a$ X) N O2 H( m
chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
% P+ d: q+ O& H3 Z" `' V4 s2 p chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
7 W0 _( N. e$ d( F' Z( G}$ @: l0 y/ ~& V: ^9 A
//回车键发送聊天内容' b( Y3 |' R; r- K" z2 j) |7 i8 ]+ n6 b
function myOnKeyDown() {
* V* u7 Z% X- y% P, p if (Key.getCode() == 13) {
7 r) C+ ?. J! g# ~' x' _. {/ ? if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){; B/ ^/ T) P$ E6 ^) B
Selection.setFocus(chatInput_txt);
1 _ a( p6 c, O4 a( U user_rso.data.chatcontent = chatInput_txt.text;
+ X/ G" J2 b: ]' n. u, \* z1 p if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){* X/ U- n! w) H, w7 [8 b: m$ R
user_rso.data.chatname = name_txt.text;- u w+ I0 U* a
}
- b4 V9 \4 X: o# x" _+ }% ] }
. t% R! o$ V2 u. l8 I; x% F( ^( p }4 @; w/ `% j5 Q# D
}8 { r5 Y0 Q3 r
var myListener:Object = new Object();2 p& l- u/ \9 U! ?. t+ @+ P( t1 K8 S
myListener.onKeyDown = myOnKeyDown;, N7 N. t8 Y1 {% p: _: W; R+ C! F
Key.addListener(myListener);: L9 B2 B7 o- f2 x/ x0 w+ L8 Q
//构造检测摄相头和麦克风状态的函数 ^- l( L' b( f. M
function checkforCam_Mic() {7 M5 m @) ~' g
camArray = Camera.names;1 R/ V1 ?- g: G/ W6 H, w7 F
micArray = Microphone.names;
9 j2 J |% Z! w1 @1 C0 C+ z& } if (camArray.length>=1) {
! a8 i! ?+ H% E temp_cam = Camera.get();: w8 _1 V# s$ X1 R/ k# R
if (temp_cam == -1) {
/ N) t7 V5 O/ i! H! Y ? camInfo_txt.text = '视频设备正忙!';
" Z* W+ J' o7 _% q- N8 `( w camInfo_txt.textColor = 0xFFCC00;+ g7 [% p- z4 @+ g/ D
} else {
. y: d7 H7 O3 i# ]( I z camInfo_txt.text = '视频设备可用!';
/ Z& H, b: P% R0 v, }1 T1 C* b camInfo_txt.textColor = 0x66CC00;
# l( I" q; m/ D" r4 y }4 _4 F& ?9 t$ R8 D- G" ] S1 C) x
delete temp_cam;
! k9 f* W, ~1 U6 b2 ]( p4 m } else if (camArray.length == 0) {
: F8 e1 X/ B1 ?3 e3 f4 B- s) K camInfo_txt.text = '没有视频设备!';$ b L( {9 A# i" b2 ?
camInfo_txt.textColor = 0xFF0000;% f, b, D1 l# z- ]5 O; S
}4 y( g ?3 R* s) u
//检测麦克风状态
) S4 S& x/ P) y& r, _0 x# f* ~, s if (micArray.length>=1) { k" ~0 _! O: G$ ]- H- V( q) p! o
temp_mic = Microphone.get();" y0 Y! T* x( b7 l9 s/ i, \
if (temp_mic == -1) {
l6 R4 O$ f2 J4 G camInfo_txt2.text = '麦克风正忙!';: L; z( H+ p8 V
camInfo_tx2t.textColor = 0xFFCC00;. J9 U. C3 R% {" ] Z6 ~
} else {
) x1 \$ s/ @, n+ h camInfo_txt2.text = '麦克风可用!';
8 |' S9 Q$ x8 n3 }$ L1 ] camInfo_txt2.textColor = 0x66CC00;* y, m& d+ I( y# h* {$ M
}+ {2 W3 ~! m8 h, X
delete mic_cam;" Y# V9 W% K* e; U& v
} else if (micArray.length == 0) {
! K! ^' E6 `$ T0 l+ e4 t camInfo_txt2.text = '没有麦克风!';
& [& h2 [5 s4 f4 Z0 g8 L camInfo_txt2.textColor = 0xFF0000;
( x+ x4 Y9 u# X; Y( s8 ^% c3 J }- y; o, ^8 Z( H& J$ v! F) R
}7 ?- E/ i# W: A) l
checkforCam_Mic(); |
|