找回密码
 注册
搜索
查看: 4146|回复: 0

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..- t* B2 @0 J; K- V
http://www.iphper.com/copstr4 e4 m4 T& C) ]4 P
光是留言板+在线涂鸦就几百行代码(看来效率低了点)+ i1 Y$ D2 E( P. [2 l

8 o& l2 Y( W+ S2 e0 o6 {7 M; p, z
2 Y  u6 R* Y4 u& @FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
: V: Y, C# }, P0 `3 {) i" k0 `2 k9 w9 N

" N) P; X/ \3 R8 @) z! k" a: r6 Q, O, D6 @- ~% _* V/ r
//建立与服务器的连接.$ L% m" I, E& B& U2 C
var sv_uri:String = "rtmp:/recordstream";; n( s$ }! x- W5 u- v1 `
var my_nc:NetConnection = new NetConnection ();
2 p9 g0 Z8 O% i- j; rmy_nc.connect (sv_uri);& _' w) T8 L2 P- R! [; ~8 x
//新建共享对象;
; h+ D+ F" B0 U/ ^' kmy_nc.onStatus = function (thisObj:Object){
1 Q( k8 @* ^9 d0 ?6 o        if (thisObj.code == "NetConnection.Connect.Success"){" r/ v. c3 I, C8 X7 ]
                info_txt.text = "连接服务器成功!!";- I2 i* W. x: P% h5 e& z. Y
                info_txt.textColor = 0x66CC00;
( l) y1 m! B4 H! q5 e" a3 d5 I        }
5 Z* E" W2 e$ a' A        else{
1 Y7 `. }; [+ S8 H% I; f6 i                info_txt.text = "连接服务器失败!!"
: ]4 s9 d2 E, m1 s! M                info_txt.textColor = 0xFF0000;
. P- U4 m% Z. ]5 U. I4 ^9 T; h        }+ A4 f$ W" k* f% s5 G% R6 ?/ r# W' g
}
8 H0 x* z* G, ?5 _var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
: i4 H" E: i4 V4 M" cuser_rso.connect (my_nc);2 W; u% o: Q) r" Q& Z; N
//建立摄相头和麦克风对象8 z0 ~* B; b, Y+ j. f* ^* x) J
this.cam = Camera.get();, M5 R" V+ c1 P2 \
this.mic = Microphone.get();
2 f4 J9 s1 c. M- Nvideobox.attachVideo(this.cam);. G: J/ z2 Q" [# b4 a* J) {* b) q
videobox.attachAudio(this.mic);2 t& @1 i* j( w' F- J1 ]
send_ns = new NetStream(my_nc);% `: {+ n% A9 B( c% ~3 I4 K
send_ns.attachVideo(this.cam);
1 o. Z" m+ o7 Y( v0 D' psend_ns.attachAudio(this.mic);' B2 U+ _7 j8 z7 A- F. |
send_ns.publish("humorguy");6 `) b& i  O9 w
get_ns = new NetStream(my_nc);9 P8 P' @& y+ Q: q" d' i
get_ns.play("humorguy");+ Y) y  [1 B! Q1 O7 G
videobox2.attachVideo(get_ns);- D& O6 |' {# _9 i. T8 |
//更新聊天内容
8 x3 t; W2 O$ {( Kuser_rso.onSync = function (){1 X  g4 N9 B* [! S& }% h
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;" M- J& |/ y+ f. w2 l1 G: I. M- O
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里' F. O2 K, ~" e  z. g- w
}) o; g, e) d: p. N  U
//回车键发送聊天内容% Q1 i# \% q+ X
function myOnKeyDown() {% q" Y8 F. e, }3 }
    if (Key.getCode() == 13) {/ U& n- Y8 Y3 q
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){% \. H  L; L& t5 g
                    Selection.setFocus(chatInput_txt);' o% `6 L1 M% ^# u
                        user_rso.data.chatcontent = chatInput_txt.text;. \1 r9 _+ q" H. z
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
# M. u1 i" C& a  A$ f7 @. c- W                                user_rso.data.chatname = name_txt.text;
5 B2 ~( d6 O9 ^3 y6 Q+ H) _                                }
( n$ d. j9 c) l                }% M. @+ _! c+ |; \
    }
5 ]$ O( W  a8 t$ C: [0 F* B}
0 P* h* n$ l" `9 O3 s- ovar myListener:Object = new Object();
3 e' D( t. i' A& @! NmyListener.onKeyDown = myOnKeyDown;
+ K" x* @3 S: kKey.addListener(myListener);
0 o2 S: Q+ _# w4 @' Q//构造检测摄相头和麦克风状态的函数! I! \. n: t9 [( v: C7 v
function checkforCam_Mic() {2 ?  R6 \* V0 ^$ V2 |# R1 V0 n% s
        camArray = Camera.names;
2 a% X# @  L) m) [$ Y& E4 a2 R$ T        micArray = Microphone.names;
0 O% b' e& L( y6 e! ~0 R" W        if (camArray.length>=1) {
: ~2 I: U- u/ D4 o' S7 ?7 x                temp_cam = Camera.get();
7 k. k5 [; O- G, P' g                if (temp_cam == -1) {
9 V. z7 ^1 M$ @' _' Z                        camInfo_txt.text = '视频设备正忙!';$ t1 A+ X2 t' }4 M$ G0 Z
                        camInfo_txt.textColor = 0xFFCC00;
/ t) T: `' k& S7 G; R# t                } else {
4 U! T! ]9 G) ?4 k, G4 _+ N7 M( g                        camInfo_txt.text = '视频设备可用!';  c# g" b/ L. s+ u% g& _/ P
                        camInfo_txt.textColor = 0x66CC00;6 t" m5 m0 Y( i5 D+ r
                }
3 ^4 z) k; ]+ H4 e5 \                delete temp_cam;  Q8 \7 b  a7 B9 I
        } else if (camArray.length == 0) {
: S# Y2 p- _# Y, Q5 i1 G' A: s                camInfo_txt.text = '没有视频设备!';
& M6 }2 T, T& E' E. U3 x6 z& d# q3 v                camInfo_txt.textColor = 0xFF0000;
% t: X4 |# x- D9 C( B' k        }+ a) @! M# A' w/ t
        //检测麦克风状态 ! p4 c7 _: N- T6 y& B$ p
        if (micArray.length>=1) {/ |3 i! O9 v4 u9 N; F$ Y
                temp_mic = Microphone.get();
! S0 J: Y* B2 u! |7 a, t% D9 n  |                if (temp_mic == -1) {
/ |3 V6 [; ^4 |( P( c                        camInfo_txt2.text = '麦克风正忙!';
* i  L1 Y/ R* {5 L% y+ Z* u; c                        camInfo_tx2t.textColor = 0xFFCC00;) f9 e7 H  C. j5 q+ d$ q5 v& ~: T4 f
                } else {  F! J0 D- z7 a  y
                        camInfo_txt2.text = '麦克风可用!';
' S, y+ H  {( d4 T" u7 }                        camInfo_txt2.textColor = 0x66CC00;
3 f# R; X$ m' Z$ u# w! a! ?/ I                }$ w" ]# q& c! j( z. q  `. x
                delete mic_cam;0 R$ X! k# r9 ?. Z' D
        } else if (micArray.length == 0) {
: ^! G. h! R) I                camInfo_txt2.text = '没有麦克风!';
% m- n, r$ \3 I) O. N# O4 q                camInfo_txt2.textColor = 0xFF0000;
' r6 s! [: x3 ~9 q        }# n- j% v4 k1 v& ?& M
}3 Z6 z, n0 d; {: Y- H* H% |
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2025-9-30 08:58 , Processed in 0.035383 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表