|
|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
5 s1 C" {: u1 g9 I) K/ ihttp://www.iphper.com/copstr6 I' G/ i3 L3 e$ V! G/ Q; ?
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
7 O( |9 O" d* b+ G- o4 X: ~6 t6 v; ~% I& Q
! K" R, g5 \+ N4 p6 c3 g1 d; MFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了+ ?# z: G- U) Y, Z
# n, q/ F# c6 C$ M: N( h
% D, t. D% M6 z o3 r8 C# b: n Y5 R$ z+ j$ q
//建立与服务器的连接.
3 L! |5 W/ [2 J3 j' d# zvar sv_uri:String = "rtmp:/recordstream";! h: u3 W6 W+ B9 u: H
var my_nc:NetConnection = new NetConnection ();
# v- G" U; w |) e6 v, _: I4 ?my_nc.connect (sv_uri);
: ^. S+ L' a2 L3 j, z, F' N7 ~//新建共享对象;
) k/ f9 x" e/ ^8 h% f* smy_nc.onStatus = function (thisObj:Object){* ^# y4 N4 Q0 ~0 f4 \. n
if (thisObj.code == "NetConnection.Connect.Success"){# S: f' C! k( m; b' Z1 ]; Y
info_txt.text = "连接服务器成功!!";
, y' \$ i1 b( k" u9 v$ s info_txt.textColor = 0x66CC00;
' }+ n6 i2 V' w9 P' { }
! p" `3 t' J5 e8 T% b, W/ f else{1 }( A/ i* Y9 P
info_txt.text = "连接服务器失败!!"+ L& T7 i2 E% j% J3 C- Z
info_txt.textColor = 0xFF0000;
( b: D9 M0 p& J1 Q" n }! S& p! Z' L" H# n7 Z+ j3 a
}0 B/ z( I6 E& j8 \$ F
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);9 g2 z; \- O1 J; B) l
user_rso.connect (my_nc);* b' a" [# f2 T' K' q2 f
//建立摄相头和麦克风对象
% G" |( G6 H3 H$ `this.cam = Camera.get();8 C7 I$ j5 c1 ]
this.mic = Microphone.get();+ |3 q# O, Z6 S7 Y
videobox.attachVideo(this.cam);# X( r8 @/ j/ V
videobox.attachAudio(this.mic);
+ i& h( g' B7 Fsend_ns = new NetStream(my_nc);1 { D8 @5 a$ z ^+ K* c
send_ns.attachVideo(this.cam);
7 C- I% f) T2 u: q- K1 \- q3 Ksend_ns.attachAudio(this.mic);* K& g& P1 b4 J0 ^' E3 G% s
send_ns.publish("humorguy");
0 ~+ M! b2 z" d' D" D; t0 v& zget_ns = new NetStream(my_nc);
: H: I3 h1 a% z5 e* N& h; Kget_ns.play("humorguy");7 f% U2 g! _6 r) k5 b
videobox2.attachVideo(get_ns);
/ j$ ^( Q0 G/ r; ^: p# D% B//更新聊天内容" G* n7 e9 ^! M8 l/ C6 q
user_rso.onSync = function (){' m$ E, x- ?9 R3 \- H+ N! c! z" Y! u
chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;0 _/ Z9 {' Z, o* ]/ H/ Y9 f% }
chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
5 Q' j; P) h f1 ~9 g}7 O3 z& I4 x9 \
//回车键发送聊天内容; {) [# _1 F; N3 x4 u( Q! O1 m( I
function myOnKeyDown() {" [9 _# ?+ U0 u
if (Key.getCode() == 13) {
3 B. q* T9 v! @1 O if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){' E1 B7 \7 r/ H& q. E' C
Selection.setFocus(chatInput_txt);
! H' T( y5 ]+ F; | user_rso.data.chatcontent = chatInput_txt.text;
' t5 {3 R9 C/ a7 t6 C% q0 Y6 O6 u if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){+ L" h! A' ?+ _8 Z) M$ O
user_rso.data.chatname = name_txt.text;; v8 h: e f) ?/ I4 W' W8 L& L
}
3 L. j$ g# C; E! v/ X }
' x; c3 W; H, H2 I0 i0 P }
" O$ _0 _( f+ t- w7 m}7 C, f/ y: ^2 b/ J% D3 P
var myListener:Object = new Object();
1 G0 m9 E2 f# L; K# N5 ~$ lmyListener.onKeyDown = myOnKeyDown;5 a# E8 n4 ?7 q% b) u, H% K) e
Key.addListener(myListener);3 `" R" _$ _1 x; P
//构造检测摄相头和麦克风状态的函数
+ T/ `7 Q0 ^! hfunction checkforCam_Mic() {
% v5 ~- i5 D9 O1 T: K/ {, q camArray = Camera.names;
& `! |4 h8 T2 {9 }% R2 B$ u" Y micArray = Microphone.names;
4 I0 z. C4 x3 R% D& j if (camArray.length>=1) {
6 o6 C9 n: _& N1 L% H. ] temp_cam = Camera.get();+ j5 }% B5 D* i; r
if (temp_cam == -1) {
/ o( e# G) A) |7 e0 R8 \( v# Y camInfo_txt.text = '视频设备正忙!';
6 {' o# [' d) ]! K0 _+ Q camInfo_txt.textColor = 0xFFCC00;. b8 u) F4 W8 X
} else {! r/ n& B# j$ S
camInfo_txt.text = '视频设备可用!';0 N. x% [; X8 d: ]2 v8 [6 D
camInfo_txt.textColor = 0x66CC00;- O: M# k% k6 G6 ^/ f( T
}% d. a9 D# P3 X0 A1 B5 t/ f. C/ b
delete temp_cam;
1 q7 @% b0 T+ _* g% j" u } else if (camArray.length == 0) {$ E- ^. z$ Z o9 J: ^2 m: R* x+ W
camInfo_txt.text = '没有视频设备!';
2 C7 C, ]% `" j& x6 D camInfo_txt.textColor = 0xFF0000;
- A3 _4 C* t9 G' H3 G: f, C }& P4 F2 o; d, @5 M; e& a
//检测麦克风状态 " z8 G' [$ B! @9 E3 ^- g
if (micArray.length>=1) {
5 m Y) n$ o9 y$ p4 X8 I, I7 d temp_mic = Microphone.get();
2 Z( w* [# Q) s6 M if (temp_mic == -1) {6 D9 |: U4 ~1 F0 x( h9 g
camInfo_txt2.text = '麦克风正忙!';
+ ^( `+ d7 N( c5 G camInfo_tx2t.textColor = 0xFFCC00;
/ v5 c0 y' j3 ?1 P } else {
4 `) E. k+ F' J1 {/ o) s9 O camInfo_txt2.text = '麦克风可用!';
: L3 @2 u( L4 S: H" M( {: m8 a camInfo_txt2.textColor = 0x66CC00;
- o3 v$ g- x E- y g T }
; I5 [) j$ T' f- L7 q2 i delete mic_cam;
6 O: r' [0 K2 ?: m9 W J. @ } else if (micArray.length == 0) {4 C! L7 i% L$ W9 [: N7 u- b
camInfo_txt2.text = '没有麦克风!';1 C. y( g* ~% ^& N2 s, P# I
camInfo_txt2.textColor = 0xFF0000;% E* k0 R8 c% Z$ y8 I# \" H; R
}
' d* D/ d% ?" B, Z0 b5 b: r}4 v& I( B" N; |. m! i( X
checkforCam_Mic(); |
|