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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
+ @/ r1 _" p- U! yhttp://www.iphper.com/copstr% e+ E& V8 }! t" y
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
0 y, S$ O7 @; Z
8 i9 t2 i8 u  v! \- e8 t: z& e8 Y
: M( J" J2 _! N+ P9 N$ |+ d* g! p7 PFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了1 {7 e" E3 C: }; @2 h! m1 ^# X: T5 O

5 |' m$ n8 n) J9 }! T& }( F) W/ c) N, [$ T$ T; [1 c$ w& }* _1 d* E

3 L7 A0 N: b( p3 v//建立与服务器的连接.
3 u. N# j8 Z  x5 _3 A" Vvar sv_uri:String = "rtmp:/recordstream";  o: ?9 A' h3 X7 y
var my_nc:NetConnection = new NetConnection ();
% S. _; |4 e2 |! ymy_nc.connect (sv_uri);, c: h: w5 r! w( ?. d
//新建共享对象;
2 {' p& ?& K2 q! lmy_nc.onStatus = function (thisObj:Object){& k9 f7 x7 P+ z8 P. Z) o4 j; Q
        if (thisObj.code == "NetConnection.Connect.Success"){' T# B! A  w2 U; C0 P
                info_txt.text = "连接服务器成功!!";: f, D+ y1 ~, P
                info_txt.textColor = 0x66CC00;
7 w6 O+ e/ ^0 Q; |        }8 B: s8 \6 A- @; {1 |# K/ e
        else{
% u. r  ~2 |) z                info_txt.text = "连接服务器失败!!"& G2 G! |7 q$ @& e$ w
                info_txt.textColor = 0xFF0000;
+ s* M: s# Z7 X0 j. {: R- Z        }% [5 F, w6 [! h0 _4 F7 R& x1 i3 T
}. {; f9 A" P8 p
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
% H& L( J/ R7 x4 q5 q+ Cuser_rso.connect (my_nc);
- R- X' f; y/ U+ P9 v//建立摄相头和麦克风对象9 m7 a% }( h  V0 n
this.cam = Camera.get();* F: j6 Z& @% N) A2 |- @6 x% G3 [
this.mic = Microphone.get();4 i) k- S6 N) b$ F$ [# W% U3 _
videobox.attachVideo(this.cam);; H& d/ Q0 T" k* w. s+ l
videobox.attachAudio(this.mic);
  F3 S7 x' v- e: x% y! ~7 T. Ysend_ns = new NetStream(my_nc);
2 w$ P# Q' L5 r/ q3 Ksend_ns.attachVideo(this.cam);9 X4 h, `8 r: k8 [* l/ ?/ I
send_ns.attachAudio(this.mic);: X$ j0 G- E* e# {6 ^
send_ns.publish("humorguy");* K/ y/ Y7 z* M' e- ~# p1 {% F, |
get_ns = new NetStream(my_nc);
; E7 _/ ?+ L5 h# Z+ M1 wget_ns.play("humorguy");
7 w' Y: q6 G8 v' lvideobox2.attachVideo(get_ns);$ w, r! J/ {8 z* }6 f3 S
//更新聊天内容9 C3 G; u! F4 [; U; h) |
user_rso.onSync = function (){
1 e* ?" m5 L' u3 G& Y  D4 \                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;; R% k! M  e, g
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里8 B4 {/ t! s" \* t' ]  n
}
" b  f9 H2 R$ h//回车键发送聊天内容
3 g, A% u; T% Afunction myOnKeyDown() {" v8 T3 X, h2 n
    if (Key.getCode() == 13) {
" n# E! u& ~9 X  m8 f                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){+ v: e& B7 j1 I. Z: y
                    Selection.setFocus(chatInput_txt);& H$ T2 l& s( T5 d# {) A
                        user_rso.data.chatcontent = chatInput_txt.text;
8 \$ @$ O! d0 n" o/ [) s6 B+ l                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){& S. V& V5 O/ b5 K4 ~  @- W. {
                                user_rso.data.chatname = name_txt.text;. a9 }* G+ J' |$ s' m
                                }+ |* R' v. Q7 ]. J, D
                }
1 w/ b3 W7 G" [1 P    }
9 A  }! [& v0 m8 s' W1 A}
  ?" X- z& z& }8 V7 ]4 i0 uvar myListener:Object = new Object();9 o. U* m7 M. h! Z7 d
myListener.onKeyDown = myOnKeyDown;4 B: k; E" p9 W: w4 ~
Key.addListener(myListener);
+ B5 f1 @+ y) ?' v+ ^//构造检测摄相头和麦克风状态的函数
# m5 _# z9 r% |7 W/ Afunction checkforCam_Mic() {. B( W+ c9 ?5 b$ z  H
        camArray = Camera.names;! _% U* ^* Q; g, E- P
        micArray = Microphone.names;
" y  p5 A, `4 T- O- Y5 O: I        if (camArray.length>=1) {
1 v4 ?9 |" ?' }+ {5 Z/ Y6 ?                temp_cam = Camera.get();( o! c1 ?# Y3 n; x
                if (temp_cam == -1) {
$ t# ]3 I( H8 ^4 F/ ~8 T# X. `                        camInfo_txt.text = '视频设备正忙!';
$ ^" j4 Z) z1 |1 ~                        camInfo_txt.textColor = 0xFFCC00;
0 }1 H8 `3 g' Z4 u% ^6 N( U0 h                } else {
! Z  h$ [6 O, z& {8 |) v                        camInfo_txt.text = '视频设备可用!';. k/ m0 n- l1 Y
                        camInfo_txt.textColor = 0x66CC00;/ [" ~# |) m+ L# ~! D
                }7 i$ P: ]  r$ D# F. f+ P$ t$ M) U5 p
                delete temp_cam;
: c* L2 `% s3 c& h- r        } else if (camArray.length == 0) {5 i& g* L+ d9 @% {6 Z2 D9 h
                camInfo_txt.text = '没有视频设备!';$ Q# Q0 \- j2 ~4 n- I4 O" u: Z
                camInfo_txt.textColor = 0xFF0000;. j( j3 _& u& S
        }
7 _) ^8 y9 F/ V        //检测麦克风状态 5 @2 d- F# p, f) x
        if (micArray.length>=1) {
  c8 J  `+ w) L                temp_mic = Microphone.get();
; e; }4 h( u* ~                if (temp_mic == -1) {
6 |$ v+ g; H8 f6 Z: v& q$ ?* ^                        camInfo_txt2.text = '麦克风正忙!';9 D! K8 ^! E- H9 U- S( P1 j: O* O( x
                        camInfo_tx2t.textColor = 0xFFCC00;
( _- Q3 |5 S' P/ U' N  a2 q                } else {
/ e$ r0 Y* A% X7 v1 p! t                        camInfo_txt2.text = '麦克风可用!';
$ u9 H- ^! L, D; G3 P3 p                        camInfo_txt2.textColor = 0x66CC00;9 l, B$ P7 O- h. f2 z4 K
                }
9 q+ u& I) q: u" j4 Y& F                delete mic_cam;& s5 f$ z6 l* l+ o+ j6 L# m
        } else if (micArray.length == 0) {
$ l6 Y" c  t7 b+ c0 M  F7 Z2 }                camInfo_txt2.text = '没有麦克风!';" H3 _# ?! h# i& l8 F, o3 K8 e
                camInfo_txt2.textColor = 0xFF0000;
) f4 T5 U6 N- D; a, l        }
6 O* K+ w- i3 H6 u8 @2 }8 a}
; S" A: R3 S2 @  Y1 R- xcheckforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 08:44 , Processed in 0.017327 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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