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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..7 }  I5 \  t7 E- ^5 B- w
http://www.iphper.com/copstr
+ O0 ^* x; s. p: }光是留言板+在线涂鸦就几百行代码(看来效率低了点)
" P1 Z' [! h! P5 M! C. ?& x$ s+ ~- Q
% v7 E' g6 I. Q! \) V  w
, D2 F* f& i* C5 \FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了9 R  g; a; _0 E

  |3 R; R' n3 M+ ^# B! W) g1 J6 `6 K
4 H9 z  Y) Z* u% c8 g( v
//建立与服务器的连接.
6 t4 D  y  T- B6 G5 Bvar sv_uri:String = "rtmp:/recordstream";
, J( r6 v( T% evar my_nc:NetConnection = new NetConnection ();$ |' t4 j( z; ?* g! U; o+ a+ |7 r' S
my_nc.connect (sv_uri);
: K! R! e6 Y  e. a$ u/ Q//新建共享对象;
- E6 @; P, v' v) m/ e& W2 w$ }my_nc.onStatus = function (thisObj:Object){5 O: e2 N% `1 p
        if (thisObj.code == "NetConnection.Connect.Success"){, _9 @4 s6 `3 v( i
                info_txt.text = "连接服务器成功!!";  ?4 O2 E) e; p$ ?5 n
                info_txt.textColor = 0x66CC00;5 D, T( n6 f& E5 |" P$ ^
        }
4 d! m' f( B+ c! [        else{
% P1 N* T' `7 n( f) R' F                info_txt.text = "连接服务器失败!!"
) F! U4 U! I: \% Z8 }/ @# n% R                info_txt.textColor = 0xFF0000;
/ ]4 V( J4 E5 Y9 n5 y9 S7 m% K1 q        }
, ^; I2 M4 I" i/ i8 l}. ^, \9 c5 Y  }9 E+ Q6 J. Z7 D
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);3 _2 G. M& g1 t
user_rso.connect (my_nc);
' ~( n; @7 G5 ?  e//建立摄相头和麦克风对象
5 S1 U0 P+ `& ]" Mthis.cam = Camera.get();
& n% P9 R* |: g% [9 q* k/ Lthis.mic = Microphone.get();2 |* L& p  }4 }) G
videobox.attachVideo(this.cam);6 @9 o* I0 P- t0 J( h3 b; h
videobox.attachAudio(this.mic);
7 e$ \: G6 f8 m3 Dsend_ns = new NetStream(my_nc);
; b7 g, t0 t+ s$ Z, }: @: S& Usend_ns.attachVideo(this.cam);
) i! [6 @7 ~# O. T5 Ssend_ns.attachAudio(this.mic);5 O$ N2 ?' U% B2 n# J. }
send_ns.publish("humorguy");
8 K  ^; S- r. O2 L2 ^get_ns = new NetStream(my_nc);
6 _8 X; Q8 ?$ ?! rget_ns.play("humorguy");
( q; Q6 s( ?+ B& C8 `% _# B$ v# x# uvideobox2.attachVideo(get_ns);  y0 w0 m+ j$ y8 E5 r  g0 m( R) l
//更新聊天内容
- D2 O9 i3 m1 Kuser_rso.onSync = function (){, G$ c* x4 _, _$ c1 J! E# `/ [, u
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
( b$ Q5 [4 z4 k! ^  c5 j+ x: l& Z                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
) U: j3 S2 h% o1 h% A  c, [/ {}$ ~/ E, B; _, x* a, [0 h% Q
//回车键发送聊天内容
4 Q5 t% d- a2 f* ^& W. c( Tfunction myOnKeyDown() {
3 ?6 y3 h1 p7 ^( \5 O    if (Key.getCode() == 13) {# I4 Q' V5 o% p
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){2 L: Y* \( W; f; W6 F% \# X( k  s) w
                    Selection.setFocus(chatInput_txt);) h6 v9 [! z) g# u) p0 l: |
                        user_rso.data.chatcontent = chatInput_txt.text;3 G1 d" _* q/ f, G  i8 y2 X
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
) M7 g; c; g1 E. u6 D( T$ O% k( ^- [7 W                                user_rso.data.chatname = name_txt.text;! t4 ]- M8 e2 {! B" P
                                }
) T9 L4 H; ], g& x                }# o  s5 I: }1 X8 }
    }
; L% d! p* A+ j! H' x0 m}- o5 j1 i6 ]; s( B( [; H/ f2 D
var myListener:Object = new Object();
1 o$ h% L& C  j* p: QmyListener.onKeyDown = myOnKeyDown;, R$ l/ m0 Q# V) A& J
Key.addListener(myListener);
7 Q/ i' Q: E/ P% X& O$ M. N% D4 L//构造检测摄相头和麦克风状态的函数
/ _  `- C) L) x+ k& dfunction checkforCam_Mic() {0 u2 Z7 J( E9 s9 H' p# M% W
        camArray = Camera.names;2 b& {* v! g# z/ ~* f5 o: d
        micArray = Microphone.names;
. R7 G& J  Q* T) p0 ~        if (camArray.length>=1) {
: v$ C$ n0 k  w2 b1 V6 q0 ~+ d/ i  |                temp_cam = Camera.get();
% ], r2 K+ l- K                if (temp_cam == -1) {
" u5 {  z8 o) I                        camInfo_txt.text = '视频设备正忙!';
6 n  b1 v+ d  }5 ^" w. p                        camInfo_txt.textColor = 0xFFCC00;
! d% W) K# P0 R                } else {
: [" ]0 o# w! n' h8 U2 [  e6 g) Z                        camInfo_txt.text = '视频设备可用!';2 |( N( }/ Z+ A3 n1 q
                        camInfo_txt.textColor = 0x66CC00;
% c) x0 v* \, ]  r. P1 W                }; W% L5 X4 K2 M% \
                delete temp_cam;
9 B, I3 S' l9 n        } else if (camArray.length == 0) {
2 |$ U0 D. o1 z# ]4 d                camInfo_txt.text = '没有视频设备!';) ?7 l6 [4 A& l2 w% Z: G  H
                camInfo_txt.textColor = 0xFF0000;
* y( ?, n" o: w# `9 ^        }
8 N( i0 @; x5 }! j) v5 }        //检测麦克风状态
# X: \2 |; t4 G; B. c/ S$ X        if (micArray.length>=1) {/ ?1 j1 E( ~3 E* O3 N9 ?% l
                temp_mic = Microphone.get();
5 }, C4 g* w6 E                if (temp_mic == -1) {" e* s1 k" A3 n. j
                        camInfo_txt2.text = '麦克风正忙!';& w* T1 q! t" w) w
                        camInfo_tx2t.textColor = 0xFFCC00;
! s6 M# j( d% v0 o  j* R8 ~5 a                } else {
& S% Y" Q. w+ N" s+ T) J1 d                        camInfo_txt2.text = '麦克风可用!';
  C9 g' w/ y9 n                        camInfo_txt2.textColor = 0x66CC00;7 @. X) o: S3 t7 H# T7 m
                }& a% O; X8 |7 e" O
                delete mic_cam;
# z4 P5 Y" N3 \; o! e- Q        } else if (micArray.length == 0) {
7 t; B- M' c6 j0 e/ ^) K                camInfo_txt2.text = '没有麦克风!';$ Z! t) g3 C+ [  D
                camInfo_txt2.textColor = 0xFF0000;
7 L/ q( s6 t, s  [- B) m" O        }
/ U* @/ k3 H) G5 q}3 S4 k  r+ a0 n8 r! m6 q
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 20:03 , Processed in 0.017397 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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