|
|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
' n1 S% W' }" C8 O$ Q- t% whttp://www.iphper.com/copstr5 w/ {. U6 T3 ~# \/ \1 `" C2 r9 b
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
7 Q/ o/ C% J2 v3 J1 s/ k2 d, m+ E% e- d
3 k( f# \2 U3 U
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了) u- N4 |% E l! e, m4 k: s
* @- S& j# z9 m2 O& U1 i
. _. W+ B$ K8 a, p9 Z/ ]: X: o
" j8 Z4 A8 d4 B* M8 F+ N$ Z//建立与服务器的连接.- s2 F4 a8 D- |5 H& }1 v: E
var sv_uri:String = "rtmp:/recordstream";8 y: I( o; u' ~/ H& u5 l3 b: }
var my_nc:NetConnection = new NetConnection ();
$ \+ e+ Q" v" Jmy_nc.connect (sv_uri);
2 R1 h" y4 h9 J9 o# e, b# H% w e//新建共享对象;
8 v+ Q+ q3 W, t/ S2 fmy_nc.onStatus = function (thisObj:Object){1 l, o; ?5 T3 ?$ l2 H* x4 ]
if (thisObj.code == "NetConnection.Connect.Success"){% B+ t9 g+ |& u0 @
info_txt.text = "连接服务器成功!!";
: {$ b& {4 \) I2 r# m8 K6 M1 _ info_txt.textColor = 0x66CC00;$ N. K% d- S4 P; S# W3 l
}
, K# L: I* `4 p5 Z else{* i( c4 `& T4 B+ W
info_txt.text = "连接服务器失败!!"
# V( k# a4 S, g7 Q S5 A info_txt.textColor = 0xFF0000;2 H6 H t6 U5 r. S2 }$ ^
}, P$ w, ^- F) ]5 e' L* j
}
( h" M; O- J) `3 j2 t" s+ w+ ]var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);; _$ u# s6 M; t9 a% P9 X! F, T
user_rso.connect (my_nc);
" M/ x) Y0 b( K( Z/ Q//建立摄相头和麦克风对象
1 N- o* ? O5 W( F9 F, dthis.cam = Camera.get();) q! N6 W) z( }: Y
this.mic = Microphone.get();
* [+ t1 J2 ?, H# Y/ Gvideobox.attachVideo(this.cam);% c7 C6 S& N) Y0 \1 |" }
videobox.attachAudio(this.mic);, {$ y9 n* L9 l$ J/ t1 o
send_ns = new NetStream(my_nc);
]9 M5 c1 X2 `: R# ]8 Z/ jsend_ns.attachVideo(this.cam);- m( i4 V- D, l* p' b
send_ns.attachAudio(this.mic);
2 v7 Y. c S3 osend_ns.publish("humorguy");+ ]0 \1 W/ y; L5 Q1 u% D, ?( b
get_ns = new NetStream(my_nc);
8 P$ q, M0 n. V! nget_ns.play("humorguy");
$ a+ Z( v* X* j, C9 Evideobox2.attachVideo(get_ns);
. A& V A7 x1 k- D//更新聊天内容
: @& y( e- x. r! l9 O8 R" c+ a0 G8 ^: ~user_rso.onSync = function (){
3 e) I+ ?* ^7 r: Q- m chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;. b# v" _8 u6 ^& A: ~4 |7 B
chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
0 `# d: X: l9 n1 y/ ^; c0 @}: o/ d% _# P; a
//回车键发送聊天内容 a2 `: {' d. w
function myOnKeyDown() {
- l* F+ x" e/ e- j8 R5 p if (Key.getCode() == 13) {
" R7 c- Z* F! G% t& v if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){4 }, z# Y9 l/ Z
Selection.setFocus(chatInput_txt);/ n3 R8 ]0 W; a Q, c: V
user_rso.data.chatcontent = chatInput_txt.text;9 H7 e& }2 D; b# ]- h( V
if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
% b( }& g6 c. \1 l user_rso.data.chatname = name_txt.text;
- W$ w) e4 G: p- V8 f3 @* B }' E, N: @. R( b) d
}
, J8 o8 }# U7 S% t }
; d# k( t& S8 D}3 S% X# e$ \8 r6 K* l, M9 t
var myListener:Object = new Object();
8 W* ~7 x% i0 a& T& }myListener.onKeyDown = myOnKeyDown;$ X- L. A! _# X1 o
Key.addListener(myListener);
* j+ L7 I' V9 m3 d+ t//构造检测摄相头和麦克风状态的函数
; L, V* L7 l* E3 I( Dfunction checkforCam_Mic() {) E1 q! R# V# g8 E) ^
camArray = Camera.names;* I Z" B/ Y+ l- D) [" u7 g
micArray = Microphone.names;
7 _7 l$ [2 K4 z7 y: b if (camArray.length>=1) {
2 L' H9 v- s$ D+ S8 {3 K temp_cam = Camera.get();
3 M/ p' a( f" ~; o if (temp_cam == -1) {
( R, V1 o3 N$ E# X0 j; j camInfo_txt.text = '视频设备正忙!';
5 d+ l) D$ h+ C s8 y camInfo_txt.textColor = 0xFFCC00;
0 o% x! G2 n5 o } else {
7 h' O( j9 ^' w& Z! I. c camInfo_txt.text = '视频设备可用!';
( D: r0 ^. R8 p% H/ u! V+ b7 x5 L. U camInfo_txt.textColor = 0x66CC00;" M+ w; r) |5 O3 R$ g+ c
}
% P) T4 H$ ?8 ]6 ^' v delete temp_cam;
$ o w! [% q3 B, E* y- T } else if (camArray.length == 0) {0 f2 b6 Z3 {, o% B5 u" I" N8 F
camInfo_txt.text = '没有视频设备!'; w- ?: L) j- ~2 c7 O
camInfo_txt.textColor = 0xFF0000;
1 d$ v$ N2 _* e; p }
7 q6 J& \+ D! g+ C( \ //检测麦克风状态
. A$ c' O2 J7 ]" U* Z# m if (micArray.length>=1) {
?3 @/ t2 ?' r# B4 D4 I temp_mic = Microphone.get();& z# E8 f4 {) O$ J
if (temp_mic == -1) {
[! l, p9 z1 r" |/ t g3 x camInfo_txt2.text = '麦克风正忙!';
7 ~/ @# A/ k! a$ A; B4 Y2 s; d& L camInfo_tx2t.textColor = 0xFFCC00;
- d6 ~ ^! Z) _" V: Y } else {( r0 {+ C, n) ^8 |+ i+ ~% \
camInfo_txt2.text = '麦克风可用!';/ K) |! x1 a3 F+ P+ F
camInfo_txt2.textColor = 0x66CC00;
' }% B2 E2 t9 i" {& J }
/ a, _5 h3 G, k1 e$ g% j0 t delete mic_cam;2 f* b( b! f% K$ c0 u3 n2 B+ A
} else if (micArray.length == 0) {/ b! ^" L3 ~7 X* b4 q. T5 Q
camInfo_txt2.text = '没有麦克风!';" {0 E5 \* ~2 K; a
camInfo_txt2.textColor = 0xFF0000;
0 _! j3 w; v5 h: O, P3 r1 p }
5 @5 @7 X9 @: L/ g3 {0 G}
( p& ^' ^4 e3 p r+ V' k. L/ i/ w3 GcheckforCam_Mic(); |
|