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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
* L( ]& Z' ^5 j* f) g) khttp://www.iphper.com/copstr1 {; ~6 U  h" B* k
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
) ], B2 M; F) K" j2 w; K8 e( ^& O
& f$ O- h# ]& J* K( o) _: V$ }
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
* i; w/ X$ z2 [  z. p
+ a1 M0 @3 s8 r: m' J) M4 u6 @4 a0 ~( i
6 D* C& O4 ^7 s! I4 D9 x2 C# b
//建立与服务器的连接.
4 b; L* d: U: m+ _5 x/ jvar sv_uri:String = "rtmp:/recordstream";
" H: I/ r5 z# A; D/ }2 _9 cvar my_nc:NetConnection = new NetConnection ();
6 E* F: q/ h& O1 {, B5 W4 o/ fmy_nc.connect (sv_uri);& R8 C4 X; J& ?
//新建共享对象;( N2 [7 N( y/ K# ^3 T; V4 d
my_nc.onStatus = function (thisObj:Object){6 f: V1 J9 ~2 S. o
        if (thisObj.code == "NetConnection.Connect.Success"){$ ?7 i% @6 ^) V/ h9 o, G
                info_txt.text = "连接服务器成功!!";
; l* e$ t* F( _& l( B! m                info_txt.textColor = 0x66CC00;
) Z; ~: O% E4 F6 T        }! T  t, h. ~, B2 S7 g% w
        else{+ N# j/ K8 @4 V, S. S
                info_txt.text = "连接服务器失败!!"0 |5 O, w: a; I; m" p
                info_txt.textColor = 0xFF0000;
; |# A6 j) C# r6 r        }( R8 y0 X; l2 {4 r& d: m
}8 q3 R6 p) L6 s2 y' C  |' b
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
  b: A  e- o% Nuser_rso.connect (my_nc);
6 Y/ L( |9 A4 [: H3 @& q& ^. Y//建立摄相头和麦克风对象- X- u& A  [! p
this.cam = Camera.get();
' ]- q) a4 p+ J" j  a. h0 e' uthis.mic = Microphone.get();7 n1 [$ I5 l9 p* A0 F$ r6 @& a
videobox.attachVideo(this.cam);  n6 A1 n8 u$ j
videobox.attachAudio(this.mic);
- v/ m# m7 f* z& n9 s# @- I  Csend_ns = new NetStream(my_nc);3 |2 p$ H: o* l6 x' O9 D3 R4 I
send_ns.attachVideo(this.cam);
: ^$ z# a5 }2 [6 esend_ns.attachAudio(this.mic);. d- M* o+ i3 j6 b* {3 \! _
send_ns.publish("humorguy");1 P9 o# O2 u* U: w
get_ns = new NetStream(my_nc);3 V6 s- r& Z5 H7 K5 T
get_ns.play("humorguy");
' ~7 Z7 G( U$ i5 avideobox2.attachVideo(get_ns);. G+ h( R/ O6 f2 r4 i! b4 h) [
//更新聊天内容0 t% G7 {+ V, L5 |% ?3 {
user_rso.onSync = function (){
6 ?5 z/ A# F  G8 q. @                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
8 w  |$ g' v. ~( ]: p" S& \/ z                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
+ }8 b( P" _4 f6 e+ z}
: t$ P" Y* O1 G0 [//回车键发送聊天内容
5 D" N7 J9 E' o2 |function myOnKeyDown() {
3 G% C2 T7 r0 h    if (Key.getCode() == 13) {0 `" t8 F( ?, M8 B( Q7 h- g
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){5 a! y6 p. ?5 x. S) H5 Y
                    Selection.setFocus(chatInput_txt);* Y& z/ r' O" j3 L: w
                        user_rso.data.chatcontent = chatInput_txt.text;
/ c& I7 U, G: ^: m; q4 {                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){$ F% c, z4 X8 {1 e% r0 P( z  Q+ V
                                user_rso.data.chatname = name_txt.text;
1 ^, A, O7 E6 s! _; m6 C                                }
" Y$ C9 g  V5 }( {3 x                }' m3 ^  o) k7 f' b1 H
    }
3 H: q. i5 H: s7 x3 ]4 n0 q& v( V}# N) _  |! k/ L' V+ S- n& g* c9 T
var myListener:Object = new Object();) Z- x# D8 R/ }7 t' I
myListener.onKeyDown = myOnKeyDown;! |9 }+ g4 s9 O" p
Key.addListener(myListener);
4 J- g" z- T2 K3 }0 g0 \: q//构造检测摄相头和麦克风状态的函数6 G. ?- M6 M, C* j6 J
function checkforCam_Mic() {
" H4 E# Y: n9 j: ]/ b4 ?6 C        camArray = Camera.names;1 I3 G# I  y- Z% c
        micArray = Microphone.names;9 T+ C& Z$ z, k0 f6 z. ]
        if (camArray.length>=1) {' E- G9 m' g* t! M; C; w8 M
                temp_cam = Camera.get();1 p* h, r" I" J0 t" Q4 Y) G
                if (temp_cam == -1) {' q! B- T" b( Z4 E$ X# o) ~( p' R
                        camInfo_txt.text = '视频设备正忙!';
7 z( j" A: Z8 t5 y5 ~0 b  c4 @                        camInfo_txt.textColor = 0xFFCC00;
0 i7 e& ]) {6 B3 R$ D" Z$ A                } else {5 [' i7 Y2 K5 R; U
                        camInfo_txt.text = '视频设备可用!';9 a: R7 r5 V( @8 J9 I5 e; Y
                        camInfo_txt.textColor = 0x66CC00;3 y( U! z3 w2 D& p7 C
                }
' J- Z: l) [: k( X$ S& k& T1 [                delete temp_cam;
3 [" K! ]  J3 y& e0 _. G        } else if (camArray.length == 0) {
9 k5 W' a, s4 h                camInfo_txt.text = '没有视频设备!';
1 Z8 D4 q7 r5 A! I0 o; M- \3 F5 ~. E2 G/ G                camInfo_txt.textColor = 0xFF0000;
1 g7 e7 o' X  t2 {; j        }
- ?, m) r: k6 W% e2 l* Z- Z        //检测麦克风状态 5 C" x0 f$ N0 t- o; ~& W0 G: G
        if (micArray.length>=1) {
. l  M$ j2 H0 \; N                temp_mic = Microphone.get();5 j; S. c+ I7 P
                if (temp_mic == -1) {+ X, L* [. H4 @; N4 M
                        camInfo_txt2.text = '麦克风正忙!';$ J, y& a& ~2 e7 U% r: R. y- j8 ]4 U
                        camInfo_tx2t.textColor = 0xFFCC00;& u5 o. U7 b1 _2 t. A) ~# X: a1 `
                } else {, {. R  p  p- K' J: Q: X( n! R
                        camInfo_txt2.text = '麦克风可用!';
" ?! W) G' \; y2 I8 P                        camInfo_txt2.textColor = 0x66CC00;
, J- m" k( j* f# Q6 Z                }
+ U" y4 Q" D& @2 K                delete mic_cam;4 j$ @" [) N( {8 O. q2 \2 S4 |
        } else if (micArray.length == 0) {
5 F/ n+ k: c: V  ?                camInfo_txt2.text = '没有麦克风!';
4 F$ r' ]! l. A' S/ a9 F                camInfo_txt2.textColor = 0xFF0000;
  j5 w+ a# q- n9 V: r        }
& f- ]" W8 B  t" r/ ~9 W& L3 G! S}0 D( B. q5 J/ t5 F* z% H' w- K
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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