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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
8 Q1 f( D/ D: A3 {* Qhttp://www.iphper.com/copstr& Z" N) n# Y* m. I5 X" R# L& \
光是留言板+在线涂鸦就几百行代码(看来效率低了点)1 v3 l2 }3 ?7 X5 y

1 H; T3 s. U$ @, A/ U/ q
2 d7 \2 j  V- S: _' x2 CFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了; f: U1 _1 [6 }4 K2 I0 J3 R
( Z: g- F; |( \5 n& T2 q2 `2 W
+ q0 D! A, y. \" o- ]
) C# Y- k) e$ C1 o* L
//建立与服务器的连接.; X. f" l, k8 I7 V0 g) N+ R5 x
var sv_uri:String = "rtmp:/recordstream";
- f8 ^! q; b7 S' w. m( P) d1 ]var my_nc:NetConnection = new NetConnection ();- u0 ^1 G- u' O4 l: [! W0 w
my_nc.connect (sv_uri);/ ~- a: @- l+ w. t; n, M
//新建共享对象;0 ?' R/ A& t9 I5 H. \1 r
my_nc.onStatus = function (thisObj:Object){9 c% G9 Y7 m/ ]7 v1 W4 N! n
        if (thisObj.code == "NetConnection.Connect.Success"){+ a5 ?. v" y& J% ^1 w+ \2 i0 x  {
                info_txt.text = "连接服务器成功!!";+ D& F" V+ ?9 F: F  z$ Q
                info_txt.textColor = 0x66CC00;
0 ~! {/ z% C2 a7 i+ R        }. I7 ^- ^. W9 K0 O' p) U0 {# ?
        else{4 m5 I: {" ]6 x2 ^# n5 ~4 T1 Z
                info_txt.text = "连接服务器失败!!"
6 x. i  t1 t; Z/ U! S% T! ~( H! N                info_txt.textColor = 0xFF0000;
) M5 K" `  R- D# I& A; {0 W8 J9 Y& G        }
4 i# ?9 p1 r/ n}
. q* z, r3 H7 W8 x  jvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
  Z. l. b" P1 Z+ n9 zuser_rso.connect (my_nc);
# x5 l5 e! P. S' z/ w% l//建立摄相头和麦克风对象
, z% P6 M1 B0 i, {this.cam = Camera.get();; c0 [; a9 _8 Q+ f% N9 w: k& h
this.mic = Microphone.get();
& l! O2 a: k' o3 a1 Q' R1 a  }videobox.attachVideo(this.cam);
# x2 X6 z- P* p2 y4 Pvideobox.attachAudio(this.mic);/ t+ I3 a! S6 z* Z/ R8 h
send_ns = new NetStream(my_nc);% a  W( c! q" B. o- v
send_ns.attachVideo(this.cam);
4 s& b- T8 Z9 q7 b: qsend_ns.attachAudio(this.mic);
# a, W: o9 q$ [5 A, H; ]3 n' Y9 Qsend_ns.publish("humorguy");- e/ B1 q5 z1 t7 t
get_ns = new NetStream(my_nc);
6 k0 ]" d; i& g7 eget_ns.play("humorguy");! O7 [, e# W9 N+ u
videobox2.attachVideo(get_ns);8 ]8 R3 @( V: W' g1 _! k5 o
//更新聊天内容
! Z. ?9 I& N9 k* B. xuser_rso.onSync = function (){3 Z; m8 e0 X9 V* _% S; |
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;" D( M0 D7 a4 ]/ @1 u5 e0 b
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
% F2 K% W4 ]% U. y8 ?/ V}
$ k% n* [: j: E5 P9 k* A# Q//回车键发送聊天内容8 C* v9 R7 N4 D! t2 x
function myOnKeyDown() {& U% ^4 q' A5 o* G
    if (Key.getCode() == 13) {; z* L% @. i* ?4 s9 I6 Z( }* d
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){3 z! U) A: u9 t5 d$ j8 [: P9 g
                    Selection.setFocus(chatInput_txt);$ C# V# J* h0 L; l' F% `
                        user_rso.data.chatcontent = chatInput_txt.text;# A1 h; d4 q# q0 S& [
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
- T9 v5 f8 s& ~4 U1 N6 t7 W                                user_rso.data.chatname = name_txt.text;6 h- B  A3 g5 \* J6 n- `& B( l1 {
                                }
; {/ l# {+ d" X5 S( t                }/ j8 ?' }% t: R( R; T3 X
    }
& d  |# S  P# u' G9 `}, R. c: ]: ^( X- e5 |- l
var myListener:Object = new Object();
$ d  Q4 m3 }2 O" N! FmyListener.onKeyDown = myOnKeyDown;/ ]9 Z9 X- o8 ^; z  W, x
Key.addListener(myListener);
+ D- z) N# R0 \/ A" r# R//构造检测摄相头和麦克风状态的函数- X' B" K* i: F- T# {9 C: U3 Y. U
function checkforCam_Mic() {" i1 ^7 d) X) C2 A! ^9 p
        camArray = Camera.names;
+ N1 S0 \7 g1 ]2 H2 V- ^& A        micArray = Microphone.names;
8 v; ?2 Z! h8 C* Q, P* s, ^7 f        if (camArray.length>=1) {
+ ^  k) |. Y7 a7 `8 M                temp_cam = Camera.get();
& W9 g' ^8 g. C$ o$ I2 C% u                if (temp_cam == -1) {) d/ m' ^7 ?8 {! s: Y
                        camInfo_txt.text = '视频设备正忙!';
2 l  F* p* C6 X1 t                        camInfo_txt.textColor = 0xFFCC00;
+ d( ^* O% c0 F; o" j                } else {. \% U7 s/ f" O0 O9 B; K+ E
                        camInfo_txt.text = '视频设备可用!';' p8 ?5 S! k% l  q+ e0 C
                        camInfo_txt.textColor = 0x66CC00;. |& w6 U* t2 E6 ]; ]* A; v# j
                }
/ A5 Y0 f8 Z* P5 |) n% t                delete temp_cam;" ]; }' H- e) c2 m  R
        } else if (camArray.length == 0) {9 U6 R, K/ N+ `$ v: @7 B* }
                camInfo_txt.text = '没有视频设备!';
! l; t. W$ N9 T& e                camInfo_txt.textColor = 0xFF0000;( g& A( k# T' T$ l
        }
: w+ x! T; X/ d% ~        //检测麦克风状态 ! x- G1 ^# c0 o5 T$ m
        if (micArray.length>=1) {
7 G; ^/ O2 c0 c9 y                temp_mic = Microphone.get();
4 |' E# r1 c- ^8 t                if (temp_mic == -1) {7 [+ F  {1 \) e
                        camInfo_txt2.text = '麦克风正忙!';8 W0 {! ^& b: U  l
                        camInfo_tx2t.textColor = 0xFFCC00;
0 X7 W4 G% M& o+ S1 t                } else {
7 F# T4 }1 r1 G- I9 `& S' k3 h                        camInfo_txt2.text = '麦克风可用!';. X% x8 b+ h/ I2 G# _: h
                        camInfo_txt2.textColor = 0x66CC00;
! K# k) `1 X1 |5 @                }
( G8 r# V( Y, {6 U/ S9 I% c5 x                delete mic_cam;
7 N! `. v5 ^6 \$ `1 _6 A. e        } else if (micArray.length == 0) {
$ n& d0 s/ W! i, x                camInfo_txt2.text = '没有麦克风!';
) U- y& [9 R/ q1 o6 q                camInfo_txt2.textColor = 0xFF0000;
: @0 a$ d* y1 d+ P- Q        }4 t% x5 |: K' B' z' [& p4 V
}3 R- k: T4 v$ b$ N, o* [: q
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 21:47 , Processed in 0.019085 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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