找回密码
 注册
查看: 4651|回复: 0

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
- J: K  J2 O5 d- P# _http://www.iphper.com/copstr3 \/ Q' T6 u: \% V2 c
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
4 u3 \6 J2 o+ T9 V
/ ], |$ M2 G2 E; o9 }
% r4 r" ~3 ]* f0 E2 p: }/ [FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了7 F: F- M& i9 i! R0 c# B
  \; Z5 h; [" V
/ Z) {$ Q2 x, W( |/ B$ i5 b* \

9 |' x: @' f5 ^) _//建立与服务器的连接.4 ]1 e& A6 t* S4 V/ L
var sv_uri:String = "rtmp:/recordstream";
/ v" }: T" S" y/ {var my_nc:NetConnection = new NetConnection ();
% A+ \: [/ {/ Y: f% ^my_nc.connect (sv_uri);
1 H' B* O8 Z/ \//新建共享对象;
0 S# z& }9 T+ X2 H. `, t8 f2 pmy_nc.onStatus = function (thisObj:Object){
4 i  K. I: H: B" C. j/ x1 n! u- S        if (thisObj.code == "NetConnection.Connect.Success"){
+ r8 g- l* b- I7 X( p+ H3 I! c                info_txt.text = "连接服务器成功!!";
' L+ `2 c& e5 t9 |3 T                info_txt.textColor = 0x66CC00;
* d" R' e2 E) G; v        }0 x4 Z) _9 L6 I; L0 r- }" o- P
        else{4 f& l1 d1 L  d; n$ j
                info_txt.text = "连接服务器失败!!"
7 C( v; E7 F9 e" k6 P                info_txt.textColor = 0xFF0000;
% ]1 ~% r4 v7 y& n. }        }
2 O0 W3 t7 m! |}
: U5 x& x  B5 B' S- l" {var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);2 ^9 N6 F8 h- s& F2 z2 @
user_rso.connect (my_nc);2 O# Q% y* S, X* u5 t+ y$ W5 R
//建立摄相头和麦克风对象, [$ y( |9 j; ~# z
this.cam = Camera.get();
1 H, a; J" i/ v1 C6 g1 Vthis.mic = Microphone.get();
$ l8 X( ]- `" B- }videobox.attachVideo(this.cam);
- |' E9 Y# m; X7 G3 nvideobox.attachAudio(this.mic);
9 u4 H$ M8 {5 q/ `send_ns = new NetStream(my_nc);1 F% a- w: b. ?+ R* U) Y5 i
send_ns.attachVideo(this.cam);
9 N+ ^6 x5 B, }$ U& lsend_ns.attachAudio(this.mic);$ P- i' v7 T5 u, W; x
send_ns.publish("humorguy");
- \/ R7 `6 Y4 i/ s7 m, L. qget_ns = new NetStream(my_nc);
+ c, h" c1 }' d2 Y8 vget_ns.play("humorguy");# f# n; I$ e) `! l9 _
videobox2.attachVideo(get_ns);
, c8 E5 U' |: I9 I5 W//更新聊天内容
7 M8 M. j# Q# ?; }% W: K+ y+ Q, Kuser_rso.onSync = function (){
4 e/ N2 {6 j( H9 u# j& d                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;/ w; T% F- X) Z2 r% Q# |; D% i
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
  g' F) C- D5 ]+ P5 R}
( @, _" |4 i0 C& P/ P1 F//回车键发送聊天内容/ c3 K5 ~- L$ R# ?! f) a/ ]
function myOnKeyDown() {
7 `4 F, j  U% S+ D% _. w9 G/ `1 X    if (Key.getCode() == 13) {
  W( p6 d7 m/ r( q                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){$ ]; O; e9 u( b- j- q! E7 p* A
                    Selection.setFocus(chatInput_txt);2 K1 l; }: Y# r, w9 L# C
                        user_rso.data.chatcontent = chatInput_txt.text;
& ^' q: [6 Y6 x0 L5 P3 x                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){- J. Q9 T% R- M0 z6 b5 t3 e
                                user_rso.data.chatname = name_txt.text;: i$ O4 \9 J6 p4 d1 |9 N' v5 b( k0 l
                                }
. z* z+ f- k8 u3 N* d( O9 @& S! ]                }
: p' ]$ e( [/ S0 i, O& e/ `! U6 N    }# A* t1 a( p" k: p  U
}7 Z0 z0 C: e$ p+ g4 H7 @5 N$ n
var myListener:Object = new Object();
5 [5 v+ c6 h5 N3 ZmyListener.onKeyDown = myOnKeyDown;
) b& h+ W8 t: ]) x& D& z& NKey.addListener(myListener);
) A: C4 q$ V  R# V- l- ^' r8 ]//构造检测摄相头和麦克风状态的函数
( R1 q9 ]8 H, n. z$ Efunction checkforCam_Mic() {
1 F3 g6 n3 @8 I        camArray = Camera.names;% E8 r% e* T+ r1 q* V4 i: a4 M
        micArray = Microphone.names;
  r, `# |+ r) _3 M        if (camArray.length>=1) {
& W5 _$ {$ l# _' w' B/ H                temp_cam = Camera.get();
/ B( q* F, O3 h                if (temp_cam == -1) {7 }4 d; q- p# ^; I9 \* h/ \% K) z
                        camInfo_txt.text = '视频设备正忙!';1 ?  Z' F' r8 Y/ F
                        camInfo_txt.textColor = 0xFFCC00;( x4 Z, J9 M2 t3 |6 [9 I' h
                } else {$ P3 I5 B) T8 {6 ^5 b
                        camInfo_txt.text = '视频设备可用!';. r0 o3 M* N6 G
                        camInfo_txt.textColor = 0x66CC00;  ]+ u, W+ t, S& c% w* p! g) k
                }7 F& q4 q' r8 H# k$ q* |
                delete temp_cam;+ `' _+ k( _7 g9 q7 d3 [1 g3 ^
        } else if (camArray.length == 0) {
5 k. [2 u# c4 ~5 @- C                camInfo_txt.text = '没有视频设备!';" g( [8 n& O9 N) b
                camInfo_txt.textColor = 0xFF0000;
. L' B6 k9 n9 F0 Y9 h7 o        }5 _+ J" b6 ?7 U$ c7 E( n" B
        //检测麦克风状态
7 c! d/ e( M/ N6 p4 y- e! A9 @        if (micArray.length>=1) {
2 n4 z* T: m$ }) n                temp_mic = Microphone.get();
4 {1 A. ~" B: q. Z4 F; V; u+ Q                if (temp_mic == -1) {
% r9 ?+ G' T/ E* k; @                        camInfo_txt2.text = '麦克风正忙!';9 v9 r, b) i: @" q5 e4 E7 |
                        camInfo_tx2t.textColor = 0xFFCC00;5 N( z$ j: k$ n: J
                } else {
% ?% a. y! V7 V' `                        camInfo_txt2.text = '麦克风可用!';
$ P( V6 Q! y+ a+ W) [# |/ P) K                        camInfo_txt2.textColor = 0x66CC00;5 ^4 L: t: r# U' N0 o$ p
                }
4 `7 e% ]# c( {8 _! B8 }4 X                delete mic_cam;
2 {; f" ^! J8 o% X% u7 i# I        } else if (micArray.length == 0) {
! \# w9 X" W" ?! Z! z" A                camInfo_txt2.text = '没有麦克风!';$ c: f+ S" c" q1 i4 f# E
                camInfo_txt2.textColor = 0xFF0000;3 P( g3 k) S3 C/ t6 K
        }, S: H; U8 W+ c# G  S. @
}
/ o' l: J; D3 m  g% tcheckforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-1 20:49 , Processed in 0.019145 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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