找回密码
 注册
查看: 4650|回复: 0

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..* R! p2 f: }3 u" M' E( v
http://www.iphper.com/copstr
, f0 ?# m2 a% a2 Y: Q- Z% c7 c光是留言板+在线涂鸦就几百行代码(看来效率低了点)
* ^% U* A: r0 f! F
: T- o7 T& \" f  \: Q6 Z# l& @8 J! @8 O7 P$ n
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了, _6 u  X( v9 _7 m
- {3 a( [1 S" X
+ f0 x. F* [2 A! X* r
& K6 o1 ]) a0 [& Y  O
//建立与服务器的连接.
8 T8 w& t2 h0 F! P& Fvar sv_uri:String = "rtmp:/recordstream";
" s) C2 _6 S5 dvar my_nc:NetConnection = new NetConnection ();
- n+ [4 \2 X: \# d' L% j0 B1 ~my_nc.connect (sv_uri);% n. b1 E- _" l- @; [5 V$ p
//新建共享对象;: N/ u9 P1 e- j2 ~* B; O
my_nc.onStatus = function (thisObj:Object){9 Y4 }* s8 C8 C
        if (thisObj.code == "NetConnection.Connect.Success"){7 u$ j. l0 h- d7 e: l" T, o
                info_txt.text = "连接服务器成功!!";, w/ L# P+ ?  M$ ^: M# A
                info_txt.textColor = 0x66CC00;& g) T1 l9 g% u9 ?0 Q6 u. e1 k
        }, e$ D( d% N5 E4 l0 O3 I, a9 ]
        else{
. q+ O0 _) E/ p% Q0 n& w                info_txt.text = "连接服务器失败!!"
, A6 e( R/ A0 \5 @4 M                info_txt.textColor = 0xFF0000;
- L5 f% f8 o1 Z0 o        }  y* `9 G( n' G6 d0 Z
}
6 [1 @% c% z) K8 l& avar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
; @! Y$ E- R& Q& d+ ~1 Ouser_rso.connect (my_nc);: t% u1 S) {, B5 o- I/ R! c' e
//建立摄相头和麦克风对象. K4 j& {8 H8 U1 p, V$ N
this.cam = Camera.get();
9 m8 g& K# U9 Ithis.mic = Microphone.get();
3 C! Z, h/ r1 j  kvideobox.attachVideo(this.cam);
9 p/ g( h  H; O, W$ K5 @videobox.attachAudio(this.mic);, L: e2 U% a' T* d& E$ g
send_ns = new NetStream(my_nc);# Y8 v0 g; C. ]  `
send_ns.attachVideo(this.cam);
2 N' v6 v% W/ t. B$ Q! x0 ]send_ns.attachAudio(this.mic);
" c# {8 k! P' P) D3 A9 Asend_ns.publish("humorguy");* \5 c2 z. K8 h' l* k
get_ns = new NetStream(my_nc);+ A: O0 j4 H& `0 v$ e% x% x
get_ns.play("humorguy");
7 t0 |3 G" U7 R7 G' bvideobox2.attachVideo(get_ns);( C( x+ x# b" R5 E0 s
//更新聊天内容
+ n, s1 f$ m6 N6 F* G. M+ Ruser_rso.onSync = function (){# w' W. y6 f/ J  {
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;2 m" w2 ~1 Q0 r/ ^; ?* i/ ?
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
) a8 v1 a4 E6 K# G}, o( o' L, d( x; B* ~" j
//回车键发送聊天内容& T' L1 ]: x8 E: L8 I9 H: E0 t' f
function myOnKeyDown() {0 _) I* u" g; Y( G( `5 G" n, W4 i
    if (Key.getCode() == 13) {+ j# [" @' \: h7 ?1 B) H3 N
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){# ^& S$ J" P; }( [7 Z% a3 S  w
                    Selection.setFocus(chatInput_txt);
8 C6 {1 l3 Z  w! S5 J2 K% x! a" f% f                        user_rso.data.chatcontent = chatInput_txt.text;
( f$ X8 M4 n; h* m                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){" i0 s1 o) Q. e- t
                                user_rso.data.chatname = name_txt.text;
) I/ ]5 P6 ?2 I: C/ ]                                }
8 T5 L5 t% ?  P7 d! I                }" e! e# e( L4 N* @
    }- R" e( R5 n% e. d, f. A
}* a4 e7 C. N- u/ f  n5 f
var myListener:Object = new Object();7 j1 @3 {) K& _6 Z! ~# J. e# m: F
myListener.onKeyDown = myOnKeyDown;7 \6 U% n# j: w. w6 q6 c
Key.addListener(myListener);
8 {3 P* {3 A  |  K# u% i! ?2 P//构造检测摄相头和麦克风状态的函数
1 p) Z9 R7 z. |( {; @$ q# ~function checkforCam_Mic() {
. y- I: z8 R& c& G* w4 n# }/ h        camArray = Camera.names;
, A3 b5 c9 w. z3 x0 f7 {* T, {        micArray = Microphone.names;% P& t% E; B6 |6 u
        if (camArray.length>=1) {
9 j! K7 V9 B, H' B3 V  n% M! p) G                temp_cam = Camera.get();, `* C' [  p. X* m* _* g+ E
                if (temp_cam == -1) {
- L$ ^8 @$ z, Z( ?                        camInfo_txt.text = '视频设备正忙!';& ?& }. D1 S! Z8 H+ P; |% q
                        camInfo_txt.textColor = 0xFFCC00;
3 e3 }1 N! d4 a+ @5 L                } else {4 s1 Z. i( o4 p1 ?0 H8 K
                        camInfo_txt.text = '视频设备可用!';
% u: c, a! y' p" ]  Y. e3 A, q4 Y                        camInfo_txt.textColor = 0x66CC00;
1 s$ m5 N+ j" E+ T* X2 b. _* l                }
6 n7 h* `9 N  y$ S9 u* p; o                delete temp_cam;5 {8 N" \, ~# S+ y# D
        } else if (camArray.length == 0) {
4 m" M/ ?, V& g7 J6 Y# ~. W0 \                camInfo_txt.text = '没有视频设备!';0 n+ s8 U1 F1 H: u/ i- ]
                camInfo_txt.textColor = 0xFF0000;9 U3 R; s& t, G2 h" E  {, n
        }
7 r! E* [+ A% v% y3 P        //检测麦克风状态
7 q0 F" M! C: u( q0 M; w        if (micArray.length>=1) {, ?# v/ I2 F, b* R
                temp_mic = Microphone.get();6 l- v4 l+ b# D, G
                if (temp_mic == -1) {
/ C% V& Y7 D" {6 I* G6 S; N                        camInfo_txt2.text = '麦克风正忙!';
* D2 E7 p$ v! x! a# \( V$ f                        camInfo_tx2t.textColor = 0xFFCC00;8 w1 L- D+ a/ N6 q2 g  j' C
                } else {
' P, [1 m1 K1 a                        camInfo_txt2.text = '麦克风可用!';
# Y7 ^$ q- i( f" i                        camInfo_txt2.textColor = 0x66CC00;) S7 Q' S6 {1 k$ g4 q  D
                }
# S/ f* k& R( V3 o7 P( g                delete mic_cam;
0 k: o. j' q) f- D' d. i( f3 |$ }        } else if (micArray.length == 0) {' K9 ]# j; Q+ j, Q+ R1 ?2 o
                camInfo_txt2.text = '没有麦克风!';: t; T! n( M- u+ r0 P
                camInfo_txt2.textColor = 0xFF0000;; B  ], s) N8 s
        }7 L% c5 W5 g& B1 r, Y$ o
}% w) n) `& T' ]" Z: d7 f
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-1 20:37 , Processed in 0.016647 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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