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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..* @1 I6 o9 @; @5 h
http://www.iphper.com/copstr- Z" \3 S. `0 j$ G( N
光是留言板+在线涂鸦就几百行代码(看来效率低了点)3 H* C# n8 s6 C$ f( E/ d
! s/ b0 K% ]# x! b1 @& P

) W! P+ l2 w" y  m# q. LFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了% u# q7 s9 V2 `) X

0 K3 \; U+ Q: p* R" V& ^$ [8 h8 x( T" z; V" _' A

. `. U& O& V2 E7 H. n3 M//建立与服务器的连接.
) v5 P6 J& I$ X! }/ E# k4 Zvar sv_uri:String = "rtmp:/recordstream";
0 f5 K' Z; `* K2 Q5 Z. Yvar my_nc:NetConnection = new NetConnection ();
8 Y# s( T4 J5 X$ K* l% Zmy_nc.connect (sv_uri);
, ~( ^& e! R  }* h! ~% s//新建共享对象;
$ G' W, e$ u; }) k5 Q; Kmy_nc.onStatus = function (thisObj:Object){
* x+ ?, Y2 B: ?) u  e        if (thisObj.code == "NetConnection.Connect.Success"){6 e$ X7 W- R, |6 ?6 v# z* n
                info_txt.text = "连接服务器成功!!";
" ^" X, X* m$ e! Y/ V* N) f                info_txt.textColor = 0x66CC00;; `: t# a5 X* H- S0 m: K. L9 w* G
        }
9 a( `! _* ~9 q! n( ~0 h8 T( m        else{
5 S0 @5 |9 |- s: S0 N                info_txt.text = "连接服务器失败!!"
/ \1 @1 W/ C8 p' u# h                info_txt.textColor = 0xFF0000;
  k0 K( `3 ^2 W0 R- b, y        }
9 K: H/ J, |! b. R}
8 \" H/ m8 T  r# Kvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);) p( Q$ N0 A. O
user_rso.connect (my_nc);
7 o6 P$ b7 Z( e) b* B1 ]//建立摄相头和麦克风对象
& u  Z# p4 f" u0 {# Y1 m8 W3 N. ^4 Cthis.cam = Camera.get();6 ]+ u! U: |) S' J3 Q
this.mic = Microphone.get();% Y* @$ g* v# C( p
videobox.attachVideo(this.cam);- w( H9 v  q, \& D2 N* c  m
videobox.attachAudio(this.mic);  B" w' K0 _3 b& p4 D. N7 r% g  [. O
send_ns = new NetStream(my_nc);: ?4 h" ?# C4 w9 F2 T
send_ns.attachVideo(this.cam);! S9 H: z, S5 n% g1 X0 o6 v
send_ns.attachAudio(this.mic);6 O2 t& U( G5 c4 V0 Z$ V
send_ns.publish("humorguy");
. j+ r3 |! N; K" b% z# }" Bget_ns = new NetStream(my_nc);; K9 n" S* v  T/ k1 \+ E" B
get_ns.play("humorguy");4 T* E; y+ U1 t; S
videobox2.attachVideo(get_ns);) F1 g" h' x7 ]- D" F
//更新聊天内容
- n1 r1 H6 x# s1 y( Juser_rso.onSync = function (){
! n% w! v* z* h8 F. t                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;7 K9 P* ^9 Q* K6 Y9 N
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里: M7 o1 G- F$ g) ~5 P$ C- R" n( c
}0 C' `  v6 f( f2 q- Q% {
//回车键发送聊天内容
$ T, c% I6 k" N/ X- U+ ^function myOnKeyDown() {
' F/ ]  W' {  Y* L  ~+ |+ L1 C    if (Key.getCode() == 13) {: t5 S5 v7 ^/ z, g$ ]
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){7 N/ G/ v7 G7 M% B/ ?$ T
                    Selection.setFocus(chatInput_txt);
$ O: _7 j2 g/ |7 ~4 B                        user_rso.data.chatcontent = chatInput_txt.text;
( }7 |1 ?! X9 e9 P+ P7 |' S                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
- k8 M. w1 S, b% p/ h' H                                user_rso.data.chatname = name_txt.text;0 A8 o/ H9 f0 A' K( ~
                                }
1 t7 B8 L  r* @6 C' I% t0 Y                }
+ _4 [+ A- Q0 i4 J    }9 |: r. y$ B( J: s
}
" N, K: G, k: ]% [" e. h9 dvar myListener:Object = new Object();
6 M3 R  g( Y) {+ {; X  kmyListener.onKeyDown = myOnKeyDown;
6 D* m4 q0 [6 g( r6 y+ pKey.addListener(myListener);
  c5 a! v' J7 ^) h, `//构造检测摄相头和麦克风状态的函数( @2 w& h! J' I; u4 h
function checkforCam_Mic() {
# F' W: P( X4 A$ `1 B; }        camArray = Camera.names;
, r, \. A* N) W7 C* x        micArray = Microphone.names;: R" g% I; f; g7 u3 p) L1 y
        if (camArray.length>=1) {
! v* d& C* b8 z) i8 G3 l                temp_cam = Camera.get();
( @+ f. n/ L; I6 L8 e) Z" ?7 r( A                if (temp_cam == -1) {
" i) P0 V; i7 ^                        camInfo_txt.text = '视频设备正忙!';
' n* T4 h. L5 x                        camInfo_txt.textColor = 0xFFCC00;7 Q" h9 S& y" Y5 F6 u7 S; n! N
                } else {
: I& Y6 i$ o2 f) i7 Z0 h1 N                        camInfo_txt.text = '视频设备可用!';6 y% G2 j2 }! U. f# @% b: ^, Q
                        camInfo_txt.textColor = 0x66CC00;; p3 k+ n* G$ `  u) f: [
                }
; B9 I0 A1 z# e" C* N; C1 @1 m' T- a                delete temp_cam;1 q! d# W5 w+ H) e
        } else if (camArray.length == 0) {
$ T: Q' ~8 D* g; p2 ^$ o! p                camInfo_txt.text = '没有视频设备!';
9 l  [0 B' ~6 V                camInfo_txt.textColor = 0xFF0000;
) `! M) `2 M' B$ ]        }; L$ q- }5 l/ t
        //检测麦克风状态 7 i' e+ J- _* o' }
        if (micArray.length>=1) {
( Q$ M! W- R. f! U' L                temp_mic = Microphone.get();9 ?8 X" J& R$ ^: c
                if (temp_mic == -1) {5 y) a, O7 U- z! U, I
                        camInfo_txt2.text = '麦克风正忙!';7 Y* w* G% k* {. K
                        camInfo_tx2t.textColor = 0xFFCC00;& @" |2 E$ Q6 M' W3 j5 f4 q1 a- [
                } else {
. `" l5 W' @5 o                        camInfo_txt2.text = '麦克风可用!';
' J1 Q  d5 @$ C9 ~6 I                        camInfo_txt2.textColor = 0x66CC00;/ ~  b8 l$ [% H6 @- ]: Z2 x6 |8 P
                }  H' T- K' C6 L6 N% U
                delete mic_cam;
1 }) E! d% L8 x6 z        } else if (micArray.length == 0) {
% B3 ]( n' E+ \+ I                camInfo_txt2.text = '没有麦克风!';
& V% @: S) U- K3 T                camInfo_txt2.textColor = 0xFF0000;* P2 \! b$ X% `6 m& o5 j
        }+ a& }& I& U' Y1 o
}
8 i! R0 d! e; J& N* A0 O6 xcheckforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-1-27 17:44 , Processed in 0.017519 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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