|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
- T# u' C* c/ ?# n+ x# m: g/ @http://www.iphper.com/copstr
+ C+ P: M: @! k8 [$ `% z- u光是留言板+在线涂鸦就几百行代码(看来效率低了点)
" Y* A: b3 R3 v" n1 s0 |( ^) p# O. R1 d/ A4 u% p% X
7 L4 k, W( W: x
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
/ u }, x6 i! J- T3 C) q$ s* h
* ]' _' Q9 ^4 P. h9 [
% c; |4 A0 P$ @* E$ L! b
% E/ Q' O4 g* v( n$ D: Q) ~//建立与服务器的连接.
7 u0 O7 F8 j! s! G& Q# Lvar sv_uri:String = "rtmp:/recordstream";
. i' Z3 k; e* ^& h$ v' g* R' Dvar my_nc:NetConnection = new NetConnection ();: R7 Z' r) X* w/ B
my_nc.connect (sv_uri);
' j- W, n% h+ H' H H//新建共享对象;* A8 ]. e ]% t) Y" W4 q+ T
my_nc.onStatus = function (thisObj:Object){
9 e: }/ q5 n0 I' s if (thisObj.code == "NetConnection.Connect.Success"){
# t( q9 B- A% Z' Q info_txt.text = "连接服务器成功!!";) Q1 k; B s! C8 a. _! {
info_txt.textColor = 0x66CC00;
3 m: D& I, q" {1 T }0 L9 U G) X S) D7 ?( Y- b
else{/ E5 ~& Z5 g7 `" D4 ~
info_txt.text = "连接服务器失败!!"4 W* U1 o% |" S; ]
info_txt.textColor = 0xFF0000;
, I. k* g! n# ]- g }2 S9 n9 Z `. m/ R4 Z8 S) |
}
$ T+ M# G. @$ o- mvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);2 `; }" ~+ t4 J! C) U. o7 g
user_rso.connect (my_nc);
2 Q- }0 g* ~. L7 l. a//建立摄相头和麦克风对象
% r# C; Q* U% K9 u4 G$ A' Kthis.cam = Camera.get();; [6 W' N# Y4 d' b' }
this.mic = Microphone.get();
/ N7 I d( p# x* E+ E Nvideobox.attachVideo(this.cam);0 s! d$ v% q/ E+ P0 R& C
videobox.attachAudio(this.mic);
1 q7 C. S5 j; t1 U2 M- z2 esend_ns = new NetStream(my_nc);* M P) E2 R: c' W
send_ns.attachVideo(this.cam);$ b0 W; }2 M. x" `" t- O q
send_ns.attachAudio(this.mic);) Y$ p2 m1 F/ U( u, ^. ^* {
send_ns.publish("humorguy");9 ]7 K3 c T2 g* h! w
get_ns = new NetStream(my_nc);
9 x& |: L' K1 `0 g- _9 C+ ]get_ns.play("humorguy");
! |8 d- m! _) N0 C8 Tvideobox2.attachVideo(get_ns);
9 d6 I- E( O' Z1 g//更新聊天内容$ C( X6 @0 l9 p: B- n2 H2 `
user_rso.onSync = function (){
) J0 W" B" k [" J: A chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;3 q; E- ~3 Z. c& ^, t
chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里! g: E; U- o+ G1 o0 J) p: S
}
8 G9 o& d5 q% r: u+ o2 W3 i3 J/ h5 }- b//回车键发送聊天内容
5 f l# ~" d) S' i. m* t9 ~function myOnKeyDown() {8 P% c( ~8 z8 v5 U8 ]' f- a
if (Key.getCode() == 13) {
/ u2 l! U- V& J if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){9 d3 u" m$ x& w" g
Selection.setFocus(chatInput_txt);
D! v: ~8 L) {" Q- e user_rso.data.chatcontent = chatInput_txt.text;
i5 J6 r& g2 l- n if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
# M [2 H; n2 m R user_rso.data.chatname = name_txt.text;# s7 ^! ~+ _8 F# m$ K0 R$ l
}" |, g$ H1 h {: T% [3 o F# d9 B
}
# F: ~+ v4 K2 w* X9 W }
: a- l3 V2 ?% |. ]}
; U) U a" T" |. H& svar myListener:Object = new Object();
$ m! N6 U! y; L2 Y8 ]' J! @* ymyListener.onKeyDown = myOnKeyDown;4 D! E5 I+ v: e1 s
Key.addListener(myListener);, W4 e# n G% ~' ^0 K- `
//构造检测摄相头和麦克风状态的函数" F$ R6 I$ G& L$ c% z
function checkforCam_Mic() {
3 y! n4 q! R7 J/ Y9 ? camArray = Camera.names;$ N/ L5 e+ R# h# }- s; @4 D- F
micArray = Microphone.names;
% _$ C! I; U' P if (camArray.length>=1) {
h- X- V% [! A* p temp_cam = Camera.get();
6 Y* {( y0 o2 E; U' }+ ?, h if (temp_cam == -1) {* i. ]$ @, x( T; i
camInfo_txt.text = '视频设备正忙!';
0 |7 x7 f5 u! O' u. \1 A+ ] camInfo_txt.textColor = 0xFFCC00;
8 j, ]/ q/ \. {& W0 R/ q } else {
% N. R5 I% o% T0 C: k m) g camInfo_txt.text = '视频设备可用!';
# b5 X' P- ^. _7 Y+ U. h2 ]: p5 f6 N camInfo_txt.textColor = 0x66CC00;
* A% H7 q( e) H: {; k/ ` }
7 I: e3 Y! U7 q/ w6 w; H% M delete temp_cam;. Q0 @. H% f; H3 V! C1 U
} else if (camArray.length == 0) {# G4 Q# Q; L* a9 g) q8 \1 ~0 o1 d$ ]
camInfo_txt.text = '没有视频设备!';0 B+ G" R' D" C( ?* e
camInfo_txt.textColor = 0xFF0000;( }2 X4 y+ R2 h
}
/ I2 l) L; ~- [& J i R) _4 b& a //检测麦克风状态
; }4 K2 J7 W+ x9 i! \% O; _ if (micArray.length>=1) {4 d" ^" I4 i9 p% ~& z7 b
temp_mic = Microphone.get();
) D* i% d0 Q5 o; k6 w2 Q- L if (temp_mic == -1) {9 C Q4 B9 y0 G" c/ Y1 {; r4 k5 ^
camInfo_txt2.text = '麦克风正忙!';" h* \/ X2 G4 e
camInfo_tx2t.textColor = 0xFFCC00;8 V% y$ r. g* V" g) L5 {% g% m
} else {
# ?8 O- h; P) a6 f- F9 L camInfo_txt2.text = '麦克风可用!';4 w, g3 S# N) Z4 r
camInfo_txt2.textColor = 0x66CC00;
) F7 b! C* k' Q3 e' l& E3 A8 V }5 j7 [* Y* Q) T q, H- y
delete mic_cam;
( y0 v, J* h( j4 [1 E } else if (micArray.length == 0) {0 R/ C- O0 w& S( p
camInfo_txt2.text = '没有麦克风!';
8 k# y2 l/ U( s7 o) \. D' E camInfo_txt2.textColor = 0xFF0000;6 u: g& k9 O5 X: r0 ]! \
}
7 G. P- @/ ]! ~2 n: y) b8 z; T+ v}; w; S9 {2 s3 h
checkforCam_Mic(); |
|