|
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
3 T) n* Z3 H4 t3 p1 N( Qhttp://www.iphper.com/copstr
( X$ J$ \: z) C7 ?' M0 V光是留言板+在线涂鸦就几百行代码(看来效率低了点)9 H# ?8 v4 ?/ }( B2 U) q. W$ k
+ U5 D2 ~" ]% c3 Z* N. f$ E$ I
/ }$ V( l' _& H) j6 BFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了+ B! q8 G3 A/ _$ b. b7 [
% Z+ R/ a$ m5 \+ ?% A
) g5 V& w: K" f0 u% Z4 {7 E$ w" j' c7 S4 H. `! u) v$ c0 l
//建立与服务器的连接.
$ O% ?0 J+ |; e( Jvar sv_uri:String = "rtmp:/recordstream";
6 S# ^9 D- e" b9 C! }var my_nc:NetConnection = new NetConnection ();
; |5 b7 a% [1 Q1 ?! B# [my_nc.connect (sv_uri); t6 W7 @8 }, a4 T/ w
//新建共享对象;
4 J* J J0 A6 U" c# M7 ^my_nc.onStatus = function (thisObj:Object){% P! N/ K; }6 Y. {
if (thisObj.code == "NetConnection.Connect.Success"){- m _: w! Y9 T' b3 d
info_txt.text = "连接服务器成功!!";! d$ b2 ?! u; q0 R3 r g1 \, a$ E- L+ Q
info_txt.textColor = 0x66CC00;
; g/ @' g& d! v6 J$ Y }
. y Z- A( D/ h' i5 w. Q else{, x1 p# `0 B, e' w
info_txt.text = "连接服务器失败!!". H6 I4 F- ~& V
info_txt.textColor = 0xFF0000;
6 i: a/ x. g9 E1 A }' i1 T' W( e+ M+ M
}6 N4 V. U' N' Q$ t0 o8 I0 D. V
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
8 B9 G/ F! u5 N( A% N! zuser_rso.connect (my_nc);' o* v4 m/ N: E
//建立摄相头和麦克风对象/ o9 y5 |% A& r( b- ?( m q
this.cam = Camera.get();6 O9 X0 [( W6 S; Q
this.mic = Microphone.get();/ a. _( M% ?" L5 x6 `
videobox.attachVideo(this.cam);- ?3 k$ d0 I. t, y
videobox.attachAudio(this.mic);/ W; }9 s5 D# y) u J; E. f+ n: e
send_ns = new NetStream(my_nc);- G. Q' ?- ]( d: y% l' k
send_ns.attachVideo(this.cam);" _7 o( y2 L1 B& M0 L
send_ns.attachAudio(this.mic);
+ t( {) B2 M) m" Osend_ns.publish("humorguy");4 q# v% f; V" _( b4 f4 p" s
get_ns = new NetStream(my_nc);5 F5 d# t% L2 z" \) D1 M- `: j
get_ns.play("humorguy");
% t% l/ q/ T C3 mvideobox2.attachVideo(get_ns);3 h% i$ q; `+ g# z
//更新聊天内容8 `0 F/ K) T, O1 V
user_rso.onSync = function (){. `+ q9 B: j8 U4 d4 B% l
chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
0 E4 ]7 }! W8 I. P5 U chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里( \: ]0 z6 B" }7 a# I V+ @
}; x T5 p4 i) L3 ^+ Y
//回车键发送聊天内容8 m! _$ \6 L- n G2 b
function myOnKeyDown() {
$ ]1 n% {3 V+ [8 C+ K0 g if (Key.getCode() == 13) {
/ {6 @! p$ k$ S$ C if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
- Y' D$ E8 J7 z Selection.setFocus(chatInput_txt);- g9 A9 x6 b" a3 k( b: [
user_rso.data.chatcontent = chatInput_txt.text;2 [& x. f: O6 r2 R
if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){* d3 r8 i8 ^4 J* J- d0 q
user_rso.data.chatname = name_txt.text;
9 \' T4 ?, K7 N; U }+ B+ H @$ b! r, w X
}
( N% J d' z1 u7 B. W6 { }0 l/ }& U5 q3 k: f; s/ A, ^, W
}; ]* q/ J4 Z5 ?5 J/ O" |
var myListener:Object = new Object();
6 T: X) b; l% {4 P/ Q" amyListener.onKeyDown = myOnKeyDown;
! w" j3 Q1 G6 V; z9 J0 mKey.addListener(myListener);' f/ _) E- X) r9 B( C
//构造检测摄相头和麦克风状态的函数
) O. G+ y) f# i% P" j& r& P ]function checkforCam_Mic() {
6 n7 y# I& t! h& s2 t" I8 v9 { camArray = Camera.names;( h/ H$ d3 c) @
micArray = Microphone.names;
. a* C L1 f9 l, J5 b if (camArray.length>=1) {/ G1 l. }4 u( ?
temp_cam = Camera.get();
( F' M6 {( y" B9 @, o- E+ L if (temp_cam == -1) {. N: s) {3 k& ~& a5 ~! ?. @% F
camInfo_txt.text = '视频设备正忙!';
5 e1 b2 j( @3 B/ }- t camInfo_txt.textColor = 0xFFCC00;
! R# w+ }; E/ G5 n! C3 d } else {: O8 a# {6 F# @- i: X
camInfo_txt.text = '视频设备可用!';
O2 @# K) J7 C( ] camInfo_txt.textColor = 0x66CC00;
4 W/ \1 i8 `& S N }
/ G" s7 V# v7 ] v+ E; J, O- v' h delete temp_cam;
- s2 |* b4 N# L( e% p2 t& s } else if (camArray.length == 0) {
/ v5 X2 D6 o* b0 W: Z camInfo_txt.text = '没有视频设备!';1 U/ Z( n+ t2 U$ s: v
camInfo_txt.textColor = 0xFF0000;
7 D, ~$ g/ _* o8 u1 q, g" u }
1 k" l9 K' ~: L9 u% t) n //检测麦克风状态 8 A }% k: m; r5 S! l X3 P+ {. J
if (micArray.length>=1) {, \" S, J' S/ i) ?7 O8 h
temp_mic = Microphone.get();% }: z/ d, S: U+ |
if (temp_mic == -1) {; Q: T; p W6 G8 @
camInfo_txt2.text = '麦克风正忙!';" c/ F! b+ X6 o8 A
camInfo_tx2t.textColor = 0xFFCC00;* x& W) w8 f3 |$ U' k2 v# n3 T
} else {% j/ k9 q/ {, P& w+ l
camInfo_txt2.text = '麦克风可用!';
4 H' T5 n* h' A$ m camInfo_txt2.textColor = 0x66CC00;
6 `- Y- t; e' w& ~$ H0 n }
4 c7 w& [# a2 h0 v- C |+ Q+ c, L& p1 K delete mic_cam;
7 m6 Z, z) c2 M+ T } else if (micArray.length == 0) {/ V0 p. p4 a) b
camInfo_txt2.text = '没有麦克风!';
# k# t5 Z0 k$ L+ T3 r: B camInfo_txt2.textColor = 0xFF0000;
! B9 s' w! p$ e }. V2 W/ a1 e2 j( Z$ h
}* l% g. q5 p4 d2 Z
checkforCam_Mic(); |
|