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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..! x  b' |/ J* M0 Y& D
http://www.iphper.com/copstr0 u. `" U. m1 W7 B3 H, S( h
光是留言板+在线涂鸦就几百行代码(看来效率低了点)( h$ ^: r/ o3 E/ b, E
+ G3 {. [6 l' k
6 X9 C# x$ f) j/ y: Y. w
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
  B7 x$ m& c% ~& f8 X* t- C0 I+ o+ t6 R+ S

/ ]" c) `8 \- H% C/ {9 ~. Q/ x6 A9 R
5 k$ U4 W6 j% |  b% C% b9 G$ ]: W0 g6 h//建立与服务器的连接.. J  N% s" Y1 u2 W' p
var sv_uri:String = "rtmp:/recordstream";( Z7 K8 s+ K" {) F1 m
var my_nc:NetConnection = new NetConnection ();! ~* x3 l! G; i5 B, r
my_nc.connect (sv_uri);
+ h' G1 n, `% q; _; h' S' x//新建共享对象;
2 g0 i& _, I3 s6 gmy_nc.onStatus = function (thisObj:Object){3 x% s  W8 i* F" n
        if (thisObj.code == "NetConnection.Connect.Success"){
* }1 ?. Y' o) D                info_txt.text = "连接服务器成功!!";0 _& Z# o6 I' |$ N
                info_txt.textColor = 0x66CC00;9 O9 v+ G/ Q* j& }4 y3 Z
        }9 a0 \% Y" Q  e2 q2 p
        else{  k8 R* U9 s* V9 o: i# _8 o. R6 z
                info_txt.text = "连接服务器失败!!"  s, @" ~4 M; B0 v
                info_txt.textColor = 0xFF0000;
; B; l' M& P2 B  x, N! B        }
; S6 Q( c! N6 f( R}
, e3 [: v2 m) I. yvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);9 d& V! _) L' K3 j- ?) |' ~
user_rso.connect (my_nc);5 C* A: s7 a, A7 K$ l
//建立摄相头和麦克风对象* h5 P, P: |6 I: q/ s
this.cam = Camera.get();8 Y2 E* {& ?. d% \: Z- c
this.mic = Microphone.get();
8 L; k) T, d6 g! Kvideobox.attachVideo(this.cam);. I. ?4 v0 c1 G' `- \# ~6 Q* C+ y
videobox.attachAudio(this.mic);9 n7 T  M- R' j* g9 ?) u9 _
send_ns = new NetStream(my_nc);! S3 ]5 m: u4 j, X: T, O; L
send_ns.attachVideo(this.cam);
) \/ k. Q5 a8 g4 p* esend_ns.attachAudio(this.mic);
# Y" Z7 ?% N- `6 T$ v5 lsend_ns.publish("humorguy");
, h. |: d. b" U! K; E2 u% |% oget_ns = new NetStream(my_nc);
" f( G" M3 y  G# Bget_ns.play("humorguy");& I- }6 z4 a: I
videobox2.attachVideo(get_ns);
5 W& |2 Z( R2 T  u8 b//更新聊天内容" @0 f& T' `( t; K1 }/ m1 l! G8 p) E4 P
user_rso.onSync = function (){
. o+ r& y/ w7 y, R2 w4 u: X                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;. `3 G4 ]& U; n- A1 m
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里$ B# F' J0 w: w: }/ e- j& Q9 \, J
}
$ k- [1 Y5 ~% r/ r5 @5 w. }! P//回车键发送聊天内容
) ]" r8 x# p2 }" U) E7 T+ V) Wfunction myOnKeyDown() {: \) M- ^2 z' ~! W* B1 U
    if (Key.getCode() == 13) {* i' L7 j- l) P& m" H
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
* ~8 y0 G" Q9 Y% s" p. S( s0 f                    Selection.setFocus(chatInput_txt);1 k. w# }% E! v" @: {( G' s6 M
                        user_rso.data.chatcontent = chatInput_txt.text;
4 E/ I2 G, Z- f9 m/ l2 i/ f" O9 c6 X                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
2 a/ ]8 }5 B) W, Q3 H& K                                user_rso.data.chatname = name_txt.text;0 c/ m' v2 ]7 E6 a4 ]
                                }
+ Y0 d. N9 P3 M! N                }
! b$ f7 B7 E2 A    }
$ k  _" u( H9 T- M, t6 f* ]}
7 ], E2 S) V9 ^9 Ivar myListener:Object = new Object();6 h7 s/ v* t3 B; t/ {
myListener.onKeyDown = myOnKeyDown;
: W9 l5 B/ j% J& ~Key.addListener(myListener);
. g+ w$ X; `+ e1 B' C; a, y4 I% h//构造检测摄相头和麦克风状态的函数
. U* C6 X' j  Z0 Z- ?; Ufunction checkforCam_Mic() {5 |' {2 C& ^5 c; V) g
        camArray = Camera.names;0 l& ?  J  ?$ h. a7 k* _. V) l
        micArray = Microphone.names;! @- T' b: _% ^5 ?0 J& {
        if (camArray.length>=1) {6 B+ W5 V( F% [- s/ R: D: R
                temp_cam = Camera.get();
' ]4 X  i  I0 R/ |                if (temp_cam == -1) {; M, G. v6 x% R, e1 k- J
                        camInfo_txt.text = '视频设备正忙!';
) @) P4 ~: t* X7 d                        camInfo_txt.textColor = 0xFFCC00;
; {! R  A+ e3 {1 N7 |+ S                } else {7 g  e% P; V: X. U) M- J' k
                        camInfo_txt.text = '视频设备可用!';0 u/ y* f; p$ \' L& i
                        camInfo_txt.textColor = 0x66CC00;
% k( g% F9 V8 X! ^1 `                }" \( u5 S( R' W% L
                delete temp_cam;- [6 f3 w, ?$ u2 S1 X
        } else if (camArray.length == 0) {. F  o0 O. b# [# h& P+ K
                camInfo_txt.text = '没有视频设备!';, U+ n2 N0 ?$ @- t! y  x
                camInfo_txt.textColor = 0xFF0000;
' R9 F$ F! _, u2 H/ n5 M. n        }
; `) F: l/ e4 U6 U& C: r9 ~6 C( j        //检测麦克风状态 - `& v$ ]# I* T. D+ b
        if (micArray.length>=1) {
4 d' F* U5 P" u                temp_mic = Microphone.get();
  q* n$ _4 G1 }4 N                if (temp_mic == -1) {
. |( g5 |9 X% @2 I                        camInfo_txt2.text = '麦克风正忙!';* s" z/ u6 L9 O! d; }$ B1 n1 n
                        camInfo_tx2t.textColor = 0xFFCC00;+ V4 h- w$ m" n. x8 i
                } else {
2 ^- h, V" J+ W5 u' h+ K                        camInfo_txt2.text = '麦克风可用!';/ J% |/ b& A2 u
                        camInfo_txt2.textColor = 0x66CC00;1 C6 |5 s, Q3 U# z1 h. _3 U
                }3 h* Z2 }. x5 {3 A' A$ z
                delete mic_cam;) h- B3 Q8 o. X: A
        } else if (micArray.length == 0) {7 u8 n# h  h; C2 n
                camInfo_txt2.text = '没有麦克风!';8 Q! Z" p* a6 w& A  `/ q2 C6 ^
                camInfo_txt2.textColor = 0xFF0000;, t3 N  M- \2 f6 @+ a& w
        }" K6 }- X( B% n5 Q7 }& z3 q
}
! f% c9 d8 o3 q0 q& e( tcheckforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-8 20:20 , Processed in 0.034097 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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