|
|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..: x5 f- {2 O; ^$ u& C
http://www.iphper.com/copstr
3 `9 j q, r T0 L; ~光是留言板+在线涂鸦就几百行代码(看来效率低了点)$ p. h% v" j) D6 p# L' {1 U! c
) M2 r7 V8 `) _( H; J$ {# E( ]4 k3 l2 u `9 T* b0 w) Y5 T" l3 Z. O
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了5 ]) m% Z; J7 D- ~( |" a
# G/ M' z) ~# t# y" }: S7 d6 U& S$ l% T
$ E' P& } B5 D4 f# Q0 h
5 q' r: k7 L. h//建立与服务器的连接.
b9 T; `# x0 V4 v, z& H. b' Z7 fvar sv_uri:String = "rtmp:/recordstream";
. ^$ M- @/ s( B: vvar my_nc:NetConnection = new NetConnection ();
% p" D/ n5 q$ U# Z# e6 \my_nc.connect (sv_uri);, l9 C' S a( u# [$ c; }
//新建共享对象;
% ~! v7 _* ^. D* ]/ j. q2 u% a6 tmy_nc.onStatus = function (thisObj:Object){% Y3 j: M1 r* a, M- \/ S$ j
if (thisObj.code == "NetConnection.Connect.Success"){% m; z7 e& G# U0 [9 A2 T7 J
info_txt.text = "连接服务器成功!!";
' ^ m$ N. s3 `; T, [* I info_txt.textColor = 0x66CC00;. R* f) n/ L7 U4 M+ r6 Q9 P
}
. n( P+ o1 P, r0 x7 y/ m+ _8 Q0 x else{" r+ z1 E" `0 o& q
info_txt.text = "连接服务器失败!!"+ \* u7 {1 h$ }% G4 O
info_txt.textColor = 0xFF0000;
- ?9 z2 ?! b' R2 R3 q' C! T }
3 i& H s7 t5 I/ i& c}
a p7 K, f; Q$ f1 vvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);" w- H( |% W6 ]. J
user_rso.connect (my_nc);& i* S: j5 y1 ?7 s3 e. g% c1 K
//建立摄相头和麦克风对象! O0 G$ d$ Z* p, J( C: A$ v
this.cam = Camera.get();* Y& [9 t4 A. C- ?: X* j: m
this.mic = Microphone.get();6 A( R2 r: ^' T7 r) k3 L
videobox.attachVideo(this.cam);
H. W, l ^9 a Zvideobox.attachAudio(this.mic);
* R2 a+ Z. E0 A8 u: d# |send_ns = new NetStream(my_nc);" W3 T/ {7 c8 F6 J& m2 @) b
send_ns.attachVideo(this.cam);- p' t C* P: S! @
send_ns.attachAudio(this.mic);
4 s) f2 V& t- }; K% V& X9 ^ H# O& zsend_ns.publish("humorguy");
2 u5 \0 N; C4 y/ ^get_ns = new NetStream(my_nc);, X2 K, V5 h1 X5 R% j1 _
get_ns.play("humorguy");: _. I% u. g! z& P2 y
videobox2.attachVideo(get_ns);
9 v4 p8 E0 o1 f1 ~) g//更新聊天内容: E8 ~6 F/ ?4 ^" z" }
user_rso.onSync = function (){
: f' y! \# Q% F9 |8 A% n1 _6 Q, I chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;; }5 x5 V. r4 ?& @/ R V+ A
chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里' G- R# w4 M6 A+ v1 C
}0 u# e$ z9 O; Q9 B0 [- L8 {
//回车键发送聊天内容9 ~: g$ s% y5 I
function myOnKeyDown() {
' T/ ~5 A0 Z' Z& s3 G+ L% `" G if (Key.getCode() == 13) {7 A* p& v4 X) c
if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){( k7 F6 L% L- k8 X4 X
Selection.setFocus(chatInput_txt);5 ^3 o- j# b' V) p( ]) H
user_rso.data.chatcontent = chatInput_txt.text;( Q: o; x2 P, j8 H5 A! Q
if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
3 g5 P% X& d) y" k( C user_rso.data.chatname = name_txt.text;. K5 D' b7 Q3 d4 n) U
}
! o l3 Y! r) g* O5 P) w }! G0 p. ?, `0 g
}
) z5 I+ T; r$ a k, \, u' G! s}
7 Q- l9 h3 V& J8 F n0 X- g8 E: Lvar myListener:Object = new Object();$ ?6 J. V5 k. M7 q B
myListener.onKeyDown = myOnKeyDown;
" p( S0 {$ W. G q& q U' R8 ZKey.addListener(myListener);- e' ]5 M, F9 J+ f
//构造检测摄相头和麦克风状态的函数; P0 K6 B" c* |; d1 o$ G
function checkforCam_Mic() { V* q& `' |+ k+ f
camArray = Camera.names;
: Q! x* g/ z1 z) Q& H micArray = Microphone.names;
" ^: N! ~4 ~& S% K! P& ? if (camArray.length>=1) {9 V/ K) H" J5 w
temp_cam = Camera.get();
b5 v& u4 Z ]" u: i7 j z if (temp_cam == -1) {
3 \+ @3 r0 f/ e5 m; H: w camInfo_txt.text = '视频设备正忙!';/ N: o* K' y3 d) T6 a: k
camInfo_txt.textColor = 0xFFCC00;
% ]8 Z/ N# q- I/ D {" e } else {
: ?4 B6 O& \4 ^' r# N# Q) T; a camInfo_txt.text = '视频设备可用!';; P2 R' c" S2 m
camInfo_txt.textColor = 0x66CC00;
, ]3 h# Z9 A' |' O- n+ W }4 G7 d$ r3 a/ ^ a* m! Q6 `
delete temp_cam;. w7 o8 n4 a6 C* R/ Q
} else if (camArray.length == 0) {
8 Z7 x! D+ X, G N* A0 J5 B camInfo_txt.text = '没有视频设备!';
1 E0 J" P7 z" s' A% P! p! l camInfo_txt.textColor = 0xFF0000;4 H3 R9 m5 U) G" U, y
}8 @* r( O6 J7 }8 R' Z$ k
//检测麦克风状态 ' ^' ^2 K; s; t
if (micArray.length>=1) {
3 {2 o9 B' c& r H0 b/ X. ^ temp_mic = Microphone.get();" D" u6 o, s, g4 e6 ~. Y, h
if (temp_mic == -1) {
3 W) W2 P/ K3 @4 ~4 @) Y' e camInfo_txt2.text = '麦克风正忙!';
2 C& _/ G* D5 F# j4 ^( a camInfo_tx2t.textColor = 0xFFCC00;
* U* a3 p, @/ r } else {9 d5 y9 J+ t: C$ D0 b
camInfo_txt2.text = '麦克风可用!';, @) k3 g* v$ |( ?* Q' Y
camInfo_txt2.textColor = 0x66CC00;
# W) U9 f- C1 ^" t$ U, M9 r4 x }4 |: F" h. i& J1 c0 k
delete mic_cam;
& k7 h2 u b# Z: m' i, \ } else if (micArray.length == 0) {6 n. w& m; O n: F3 P4 `+ u7 K
camInfo_txt2.text = '没有麦克风!';
7 T' B6 O, z% a; g camInfo_txt2.textColor = 0xFF0000;
/ B! X. f7 I `3 z" k2 Z0 L }) X5 }' G- K5 l) ]3 u; y
}$ E% g: J9 \7 h0 B; ?# u- G* Y
checkforCam_Mic(); |
|