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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..1 A: y  M) t1 J  g. |
http://www.iphper.com/copstr5 B: N$ A/ f9 D# D. e
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
) Z6 \+ g% {% B+ u( X! [5 }# m# B9 n9 g8 A- S/ T
, L" q- w! ^' T- r0 U+ Z' V
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了) Q2 Z1 @9 j5 N. Q& c
# K# o8 u# y4 ^# @" L

0 C- X6 P+ D7 C, Q' U0 p3 s$ [2 ]' z9 ]8 D  o4 q  J7 C2 G0 H, I
//建立与服务器的连接.  k  ]; X  F; O/ Q. ?2 m! C+ B
var sv_uri:String = "rtmp:/recordstream";
( p! s6 G/ \0 A3 q6 E+ g' @' Evar my_nc:NetConnection = new NetConnection ();* d1 _5 o' ]! U+ d$ J8 Z6 ^: C
my_nc.connect (sv_uri);
, \! W8 U3 p7 {* V! z//新建共享对象;
; [; y! ~8 ]9 K0 S! [& m: pmy_nc.onStatus = function (thisObj:Object){
0 U, [# v7 x* E        if (thisObj.code == "NetConnection.Connect.Success"){0 Q5 w) |  E  i" Y/ M/ n8 w. ^4 p
                info_txt.text = "连接服务器成功!!";
! C. F& I" ~2 s  ~! U                info_txt.textColor = 0x66CC00;
( v% Z- B; \2 l1 Z9 k$ m; {        }
5 I2 i8 g0 }) |* }        else{6 B* F4 B; z6 ^3 @) n4 L0 {
                info_txt.text = "连接服务器失败!!"
& D! H- N# G7 ^/ V4 O                info_txt.textColor = 0xFF0000;6 R& @! @+ W: [% e  `, [/ R
        }  O* x6 f0 ^9 ^  D: z8 A- ]
}
6 \. @& x( x5 _2 N2 `; m9 fvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
2 Q- ^4 e" |! ^) p2 Z$ {user_rso.connect (my_nc);9 i  U! ]% W5 u; s& y- [: d& I7 g
//建立摄相头和麦克风对象
' Q, [/ \+ A$ _/ u: vthis.cam = Camera.get();2 b5 Z) S1 K: X' O* q
this.mic = Microphone.get();5 n9 ^( M8 A% q  X8 Y. W* F
videobox.attachVideo(this.cam);
: o$ a7 V; a6 [+ J; |: rvideobox.attachAudio(this.mic);
! k6 H1 J0 e3 d% vsend_ns = new NetStream(my_nc);
2 v+ M, ]+ W0 s7 P# }/ t: S/ k2 Psend_ns.attachVideo(this.cam);6 k* v; d5 d" [+ J8 z
send_ns.attachAudio(this.mic);$ ~6 l& K& r, t+ c3 c  X/ A
send_ns.publish("humorguy");
2 a4 [7 [4 L- y  f1 z/ w; Iget_ns = new NetStream(my_nc);
4 m. M+ J7 d) pget_ns.play("humorguy");
$ s2 M6 L5 i5 kvideobox2.attachVideo(get_ns);$ _! c. `7 @; W; i4 n/ R
//更新聊天内容
  V1 {8 j! X6 x  H8 c: r" P4 {+ ?2 Muser_rso.onSync = function (){7 G8 ]& v' U, k  R; b
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;: i/ n) A5 b  x: [( Q5 E( a
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里, W  N3 X( |2 Q
}
1 l' D' D% f6 q, Q//回车键发送聊天内容% V5 f7 ?, ^4 g7 M% L4 X: f7 G9 Q; n
function myOnKeyDown() {4 R+ E) @% s! q) B" V7 v+ D
    if (Key.getCode() == 13) {
, `; s3 F9 f9 }/ E                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
3 ]: o8 D( @. R" G( I8 d3 f                    Selection.setFocus(chatInput_txt);: \3 v( V0 \, D4 K5 }
                        user_rso.data.chatcontent = chatInput_txt.text;
. ]" U' V8 F2 s0 ?- y                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){" E2 S" v' y" c& Z: S+ ^
                                user_rso.data.chatname = name_txt.text;9 O* C. b- l+ K4 Z
                                }
' |5 n/ X& h+ V$ D% T& w# H7 ]                }7 R( a) X2 H7 \" a7 D# w
    }% ~9 M3 b( c# A8 a, v( V
}
7 ~( w9 ]& b% _# nvar myListener:Object = new Object();% i# `- R" |5 l
myListener.onKeyDown = myOnKeyDown;
8 N' Z. @" l/ iKey.addListener(myListener);1 U) t# `% Q7 q/ R# i
//构造检测摄相头和麦克风状态的函数
5 y* B. D5 o2 V( H: P- k3 Sfunction checkforCam_Mic() {
' y/ S# G+ E- N        camArray = Camera.names;( m3 a1 b# W) {
        micArray = Microphone.names;
2 |; j1 Y, V( ~        if (camArray.length>=1) {
9 O" n7 a& K5 K) `: V6 B$ M5 t                temp_cam = Camera.get();- E0 R" p7 f$ t# B3 c
                if (temp_cam == -1) {
& n# D8 c7 E( a                        camInfo_txt.text = '视频设备正忙!';
+ j  U; a! m% K$ q1 I( K6 h                        camInfo_txt.textColor = 0xFFCC00;
( H+ V6 J4 C6 i1 x/ a                } else {; C' C+ f; d& c2 W
                        camInfo_txt.text = '视频设备可用!';) c# q& r1 ^' o7 F7 u/ E
                        camInfo_txt.textColor = 0x66CC00;
$ w# ?  b  S, R; }# D! L                }
; K, e9 k5 E* q+ A% k                delete temp_cam;. V0 G+ }+ l! |. _* S/ t8 Q
        } else if (camArray.length == 0) {
6 d; s2 n( I% z# i                camInfo_txt.text = '没有视频设备!';
( C* }) ]* U7 Y5 r                camInfo_txt.textColor = 0xFF0000;
# w$ G, `# b6 s7 ~) @        }% J7 d6 K" W5 ^+ |' A/ T
        //检测麦克风状态
' z2 z) `1 A6 H; }6 G        if (micArray.length>=1) {* j: N7 w0 V+ h7 o
                temp_mic = Microphone.get();
' U, t& G# C% g8 ~                if (temp_mic == -1) {' T9 K- E6 _" Z  R
                        camInfo_txt2.text = '麦克风正忙!';
  b$ Q$ G* X8 n! q# n- S( V) P+ W                        camInfo_tx2t.textColor = 0xFFCC00;
, s$ o  g9 z. i# [                } else {
/ j" Z; M, ?! p3 h8 d                        camInfo_txt2.text = '麦克风可用!';
3 b  A7 r5 ?8 W: I/ h5 F                        camInfo_txt2.textColor = 0x66CC00;/ n$ P8 ~) J0 Q1 T/ ]8 N
                }7 ]  Y% [. O8 s9 k8 \
                delete mic_cam;
/ G7 U' @. F2 c# r  [: @        } else if (micArray.length == 0) {7 Y4 D- R5 X4 _" w9 G
                camInfo_txt2.text = '没有麦克风!';
7 t" ?2 l5 e& J- U5 v! a                camInfo_txt2.textColor = 0xFF0000;. V# V+ B0 o: G+ L3 K( d& A
        }
9 [# A, p$ Q4 d1 c}* v" h- [+ F; ^5 x& ?# ~
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 04:16 , Processed in 0.035931 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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