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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
, K+ u& ?* t4 ]% ahttp://www.iphper.com/copstr# e6 Q0 d2 z/ J9 ?- R* h8 S
光是留言板+在线涂鸦就几百行代码(看来效率低了点)/ B( e8 d, \$ x# {& F

1 u, X( Y8 t0 s8 u/ [
. Z" |1 z# u3 @) q) K' NFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
, K9 n1 A- K: a2 c. `' W& Z0 s; t. h3 x, B% }# l4 U8 f: a% n) T' m

; _; b6 [3 |* z+ D2 z9 F  n, }5 l( d8 ]+ G$ J( |, q
//建立与服务器的连接.
7 C6 n: p' n; u2 ^- bvar sv_uri:String = "rtmp:/recordstream";0 b' E) R0 ?4 ]. K$ l0 D" X. {* Y
var my_nc:NetConnection = new NetConnection ();6 t! m/ t. F/ q6 o. C) h
my_nc.connect (sv_uri);
; K0 J/ y' S+ }8 G//新建共享对象;
/ j; W% S$ Q" T, I2 h9 B3 kmy_nc.onStatus = function (thisObj:Object){
, @: k0 ~! O1 b, O        if (thisObj.code == "NetConnection.Connect.Success"){; M5 J: r0 O" u# M& g! u9 I3 `
                info_txt.text = "连接服务器成功!!";
6 E1 p8 r& d- O                info_txt.textColor = 0x66CC00;; w3 d, h9 I) ~2 F) |8 T& h
        }
% r2 \" n: t# N% |# N        else{
3 f, }) `$ [, P3 Q; f; P                info_txt.text = "连接服务器失败!!"5 O7 s1 Q' `( w1 v9 s+ d- N9 P
                info_txt.textColor = 0xFF0000;, r  \; }" S% Z2 \% G0 U# t
        }
, ~7 q+ W- \' r* J# j5 A5 w}
- h8 O* J- N3 k8 }" V6 @3 dvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
) ?; w* ~) i) H9 i1 `user_rso.connect (my_nc);
2 V% K7 x6 p  X& h//建立摄相头和麦克风对象& t- o* `( j8 z6 m  k
this.cam = Camera.get();
$ l6 B7 C! F3 r: C1 K$ w: xthis.mic = Microphone.get();
' _+ X! }. L* c% s2 T* ]  O& \videobox.attachVideo(this.cam);
  v" P: N. t+ o0 @7 G- Avideobox.attachAudio(this.mic);
3 y9 R" Z) t7 g* ~send_ns = new NetStream(my_nc);
5 d9 @( G% Y1 B; ^# R# Wsend_ns.attachVideo(this.cam);
* z7 B7 t  H; o. v5 Isend_ns.attachAudio(this.mic);
5 P, B  J1 G% ?. c4 h2 @$ asend_ns.publish("humorguy");
; M- D9 @9 Q: p5 t2 J3 ^get_ns = new NetStream(my_nc);& U! v  Z# g5 _% O0 P$ a1 }% L7 v
get_ns.play("humorguy");
2 b3 R+ A: \* dvideobox2.attachVideo(get_ns);
/ O0 g' u+ t, G; Z6 ?//更新聊天内容( R9 n' {" ?/ M, |! m/ `
user_rso.onSync = function (){1 K8 b* ^/ s( G* d
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;4 d0 p* k6 S8 k  P& z
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里. p( ^( z$ U% X6 e0 }. G! W
}
( q1 n* R& _* i* N, Y7 ?% q- ?//回车键发送聊天内容) W& d0 Z& G8 |! ]/ a
function myOnKeyDown() {
; u7 ^. ]8 m; G& G$ v    if (Key.getCode() == 13) {! j! A) m, q/ C+ ], X
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){7 U5 h% V/ ]  b' V* ?# G
                    Selection.setFocus(chatInput_txt);
7 l$ f5 L* f  e1 a2 h6 p. }                        user_rso.data.chatcontent = chatInput_txt.text;+ ?! z! g& Q! i: s$ j
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
& Z- R' J: M) o                                user_rso.data.chatname = name_txt.text;# o" P( z8 W0 N9 A
                                }
6 o, @/ U- u5 S: d; d2 ^                }
% z0 E7 h) ?' l    }
2 D# Z1 x8 X" G  K' ?; \}. G# d9 O+ g$ }. A- I
var myListener:Object = new Object();% `; R# r2 `8 j! I( `- M
myListener.onKeyDown = myOnKeyDown;# c3 k9 d7 g9 a1 G: L
Key.addListener(myListener);
' y( n$ ^% L* y3 n: s+ K//构造检测摄相头和麦克风状态的函数
, A7 D& W6 l- _, |# k1 I' b$ zfunction checkforCam_Mic() {
( Z* ]1 I7 V/ |$ b6 U        camArray = Camera.names;2 h" {) S- b: Z7 S: [
        micArray = Microphone.names;5 \5 ~% Y, D( }9 r( w1 T
        if (camArray.length>=1) {
, ~3 ]1 w4 r' m& h( Q7 ^1 P                temp_cam = Camera.get();# c8 T  @, W: }" C
                if (temp_cam == -1) {6 y# r# O1 J: X( L% x; [
                        camInfo_txt.text = '视频设备正忙!';' Q5 Y. c5 @/ D& S
                        camInfo_txt.textColor = 0xFFCC00;* J5 S; x5 B7 `
                } else {  L0 H/ \8 g+ W! O& V, n% Q
                        camInfo_txt.text = '视频设备可用!';
3 x/ y$ M) E! i9 E; m                        camInfo_txt.textColor = 0x66CC00;
, \5 M+ Q8 T; T' y; h                }" J# X- W8 Y: {% y8 N$ t: y
                delete temp_cam;
1 W+ V5 X" z5 j' c7 d! o  }        } else if (camArray.length == 0) {
- Y# g; z! ~) a                camInfo_txt.text = '没有视频设备!';& q" ~! M2 i$ R; e" A) V
                camInfo_txt.textColor = 0xFF0000;# b' G5 I1 I6 j
        }
, i. F; n3 z/ r4 o        //检测麦克风状态
" |. ~. v" Q. e$ x& \% d1 w. Q        if (micArray.length>=1) {
* ~7 [5 i) ^- O+ K' D* r                temp_mic = Microphone.get();# S8 E9 o5 B' o" S& {8 Q
                if (temp_mic == -1) {: r" w( [2 x! t) Y8 X; e, k$ h/ Q8 E
                        camInfo_txt2.text = '麦克风正忙!';' S9 l- ^: \6 i
                        camInfo_tx2t.textColor = 0xFFCC00;
- g5 w- R& p: z" J4 n                } else {
8 w* S# a0 `1 }                        camInfo_txt2.text = '麦克风可用!';
+ i1 P; _' e3 @, E5 e                        camInfo_txt2.textColor = 0x66CC00;1 ^* F# H% J) n+ f! R% I
                }
* z5 f5 _0 G& C! `5 ~3 V( E                delete mic_cam;; Z: G6 P/ T# f4 `! r, w# d0 q1 K
        } else if (micArray.length == 0) {
0 a( n, J: _, p" p/ J2 p/ s5 F. H                camInfo_txt2.text = '没有麦克风!';% s3 B! p$ e1 k: q
                camInfo_txt2.textColor = 0xFF0000;
  |) r  Q+ y8 r( H        }; `+ L" _) e- f0 b
}
; t; J! W- o; E" J- s& T: t1 `checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 06:46 , Processed in 0.017807 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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