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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..3 _( T8 N3 U) `. A; v
http://www.iphper.com/copstr
/ r$ Q, U  F* H) x% G% ]% G光是留言板+在线涂鸦就几百行代码(看来效率低了点)+ S6 P. M: X4 [3 k
% f- Z/ `6 a# G3 C' B

. K+ ]" [3 |2 Q5 `5 a8 p; p4 N" UFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了2 u. s( ]: g) n5 m0 f4 z  t9 y
0 q; I/ O& M* L' H: O) D# j
. R0 v: ]" D( e. j3 r

/ `2 Q, `! c! ^) w2 b3 N//建立与服务器的连接.
* a, P! H) u* {# tvar sv_uri:String = "rtmp:/recordstream";+ R1 i9 ]+ N+ e) E# w  H
var my_nc:NetConnection = new NetConnection ();5 ?( @) |; A; y+ k5 p7 o6 F+ [
my_nc.connect (sv_uri);1 i. k+ J* f- F+ V7 [
//新建共享对象;+ D9 ?! R; L6 x- M+ E5 ~5 G( k
my_nc.onStatus = function (thisObj:Object){
# g/ Q' Y. N; I; |: ?- z        if (thisObj.code == "NetConnection.Connect.Success"){
6 }7 ~0 d& w' V; {+ {# y                info_txt.text = "连接服务器成功!!";) {9 g/ p; n0 l! {8 R5 |( v
                info_txt.textColor = 0x66CC00;( }  h6 ?# M" E  g* S" C. x
        }! s' [) D  f: L. Q* I& d
        else{
3 }  A( z+ C: P$ U  U                info_txt.text = "连接服务器失败!!"
( X% o3 P6 S4 e# C. i                info_txt.textColor = 0xFF0000;" K" x7 |0 c1 [" R9 K
        }& @4 F) z8 D& _1 I
}, a7 h3 s( b) U) L$ `( t2 X2 ?& i
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);. i$ i! H, u% W
user_rso.connect (my_nc);
  c" E' \# e5 {: W//建立摄相头和麦克风对象
; ]  a6 i/ T" D/ Y, Hthis.cam = Camera.get();
! x( t6 y8 z! c. Y0 z+ [this.mic = Microphone.get();
" v" Y( l8 L1 _# y7 Zvideobox.attachVideo(this.cam);
7 n$ m+ }8 X+ Y' E3 r5 c$ {9 a% P* qvideobox.attachAudio(this.mic);' ~* ?, c, M  z
send_ns = new NetStream(my_nc);8 I" l" [1 b* X
send_ns.attachVideo(this.cam);
$ b( s+ ^$ `" N7 E3 i9 `) N. V, dsend_ns.attachAudio(this.mic);
7 _  x6 p( J, Y* Q9 `. Usend_ns.publish("humorguy");
- j& x. r7 v) K3 d( b3 z! pget_ns = new NetStream(my_nc);
$ ]' g% @+ J, H4 Nget_ns.play("humorguy");: [2 t/ ~" K& E& M" L1 Z
videobox2.attachVideo(get_ns);; J5 o% Y: b2 S* B. F2 _7 e  M
//更新聊天内容, E2 s: @/ V) q3 b
user_rso.onSync = function (){
/ R+ x7 ~% S/ s/ {: e/ [2 b                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;( }% |8 _1 u" I$ d: o
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里! X, `7 y/ x7 i  l  ^; @
}
6 d0 T5 P6 n$ U* l; a9 [% q5 v//回车键发送聊天内容
$ J& M0 k; T6 E8 efunction myOnKeyDown() {
" @- W. h, ]! c% J2 G6 f3 Y: M! N    if (Key.getCode() == 13) {$ B- r! w# x" I6 Y# b
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){# O: V* Z* P. ~* A
                    Selection.setFocus(chatInput_txt);
4 W1 _; f6 J8 G3 j0 s, B2 g. ~: U                        user_rso.data.chatcontent = chatInput_txt.text;
# j' K+ f6 @. _5 M& `" R                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){7 F: c9 ?+ J# D0 l$ g, d
                                user_rso.data.chatname = name_txt.text;5 N5 w: V  W4 C* R6 L
                                }
# S! r# U; ^/ q                }
3 K4 m4 O! }+ W* c; J- K9 i    }
: X9 {$ y' w- z' w}
: F& f. R0 M: q$ R8 zvar myListener:Object = new Object();# C% j: [2 n/ h
myListener.onKeyDown = myOnKeyDown;  N. j2 j( B3 {' v6 l9 n
Key.addListener(myListener);( K5 M9 V* K6 N2 a2 W. k% @
//构造检测摄相头和麦克风状态的函数9 g5 ^/ D# m7 P# T5 Y# s
function checkforCam_Mic() {9 d2 F4 X& Y8 R0 f" K; F
        camArray = Camera.names;
* r$ I  G& c! p0 B        micArray = Microphone.names;/ s' z# R. o- I; Y. P8 Z+ @+ u
        if (camArray.length>=1) {
  O7 o, t) w8 u0 S7 d( O3 C                temp_cam = Camera.get();
. d; y! |/ C' L! G( f                if (temp_cam == -1) {, Q0 I8 `, {4 [8 a9 L- C
                        camInfo_txt.text = '视频设备正忙!';6 G2 W& n' e& X( w
                        camInfo_txt.textColor = 0xFFCC00;
% {' ~$ D+ X" }% [. B9 p: `  \                } else {% [# X( E$ K" j1 i" q
                        camInfo_txt.text = '视频设备可用!';
  ^9 P* P' P% h# ?! j9 L                        camInfo_txt.textColor = 0x66CC00;
1 N2 y2 B, c" j4 V/ [                }
+ E9 v, H" w6 A; p- Y                delete temp_cam;
1 c) X; k2 c2 o/ e2 T* S$ q( ^        } else if (camArray.length == 0) {, t3 X& e# j$ Z7 J/ H
                camInfo_txt.text = '没有视频设备!';4 v$ W6 Z7 G. G% c
                camInfo_txt.textColor = 0xFF0000;  c4 S$ }% ?, `
        }1 Z7 R2 _7 {1 P
        //检测麦克风状态
4 a* [" |$ j8 F$ ~( Z& F: @        if (micArray.length>=1) {
/ \8 [2 }( {! }, {                temp_mic = Microphone.get();
3 g. K/ P' h; V2 S1 f" A: m                if (temp_mic == -1) {. ~% q$ T. |- X5 |5 v  l" j
                        camInfo_txt2.text = '麦克风正忙!';
1 a% y7 f9 Q: P2 V1 n8 G, P                        camInfo_tx2t.textColor = 0xFFCC00;
- j1 J6 ^3 X, x5 U/ e! f" i                } else {
4 f) h, w' L/ v' J; W                        camInfo_txt2.text = '麦克风可用!';6 f( \0 ?4 c" E! z
                        camInfo_txt2.textColor = 0x66CC00;) r: v# D5 O+ U4 s  @  R
                }' m: a! G: L: d4 Q
                delete mic_cam;
. s1 |. W: U; I  _: `        } else if (micArray.length == 0) {6 X. q0 ^$ i# y" h
                camInfo_txt2.text = '没有麦克风!';
9 q0 q; ~7 {0 Q( Q/ w, {; L                camInfo_txt2.textColor = 0xFF0000;2 Z, R7 `) l$ P
        }
1 u, [% x: ]" t8 Z}( s+ e' A' E6 y, i9 K+ h
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-30 06:30 , Processed in 0.034477 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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