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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
3 c; m! N6 i( T0 W3 nhttp://www.iphper.com/copstr
% l7 K3 Q8 K& P. H1 p7 X/ N光是留言板+在线涂鸦就几百行代码(看来效率低了点)  g# z. q: t2 C5 Q

8 G, W2 F; P' D6 z2 k. Q9 K6 D0 W6 O  x6 n
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了2 r/ \) a: d& S

7 e2 V( U! h2 i
1 ?' k5 H( t% K9 w2 B* z: r
' v+ Y: k2 u  }& g. `//建立与服务器的连接.
& `& q& c7 q  y, Jvar sv_uri:String = "rtmp:/recordstream";
# n( S) y; J5 G' a2 dvar my_nc:NetConnection = new NetConnection ();
5 J$ k4 u) m9 I4 u% r: _4 Omy_nc.connect (sv_uri);
: m: U; l! E2 F//新建共享对象;/ ~0 B, ~1 O  y1 ~: l
my_nc.onStatus = function (thisObj:Object){
* ^; k8 H; x* N3 Y( _9 A        if (thisObj.code == "NetConnection.Connect.Success"){
! X. m, H- ?$ \( S                info_txt.text = "连接服务器成功!!";/ x% E! ^, D- u: D) s: n, P
                info_txt.textColor = 0x66CC00;
. n6 e! Z& z6 ^$ Q# ~6 o5 \        }$ V- g* i! ~, [
        else{
- S7 s  f. I4 I% o                info_txt.text = "连接服务器失败!!"0 ^& I. `* T/ T/ z. {' y9 t6 C8 O4 c
                info_txt.textColor = 0xFF0000;  P; p) c# B* @, ?6 z
        }3 z# @  K8 i  W- W
}
* u6 \8 a4 `7 U/ Y" u/ P% N6 _var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);$ D( }+ k& i5 [0 R& {; t
user_rso.connect (my_nc);
1 m1 R  ~, X7 S7 N; T//建立摄相头和麦克风对象
3 C+ ?* z, L& r* R% `" F3 ~this.cam = Camera.get();
/ c/ D4 f, V# ?2 Z" L  Pthis.mic = Microphone.get();" O* v9 ]( _# L; E1 c1 a$ l
videobox.attachVideo(this.cam);3 E" ?/ I( F- k, n6 F0 J7 l
videobox.attachAudio(this.mic);2 X4 H% ^6 G" X2 e5 s
send_ns = new NetStream(my_nc);+ Q2 D! o3 b6 o* ?. N6 J, l6 v
send_ns.attachVideo(this.cam);$ b1 Q! ?' K7 b( t* x8 ]
send_ns.attachAudio(this.mic);
0 Z; l  U) h! a8 i6 hsend_ns.publish("humorguy");( a2 v9 n6 H: N2 B5 u
get_ns = new NetStream(my_nc);
) K3 d/ Q, \3 E/ l) f; \/ u# Kget_ns.play("humorguy");/ K9 k9 ?! K. D8 |& w$ c
videobox2.attachVideo(get_ns);, f3 Q5 ~% Y3 P, d( Y3 k
//更新聊天内容* ?) z0 \+ B2 M( l3 p* N1 a
user_rso.onSync = function (){
8 D/ W4 m; ~8 O, _                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
+ }' a- u8 j# o2 m8 ?1 i- q                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里. X6 x: n  \+ R+ A: {
}) x' M3 i% l5 F; _
//回车键发送聊天内容
  Y) {/ m+ M" F; H" L( B- nfunction myOnKeyDown() {; h  z* X7 ?3 z, u3 l; }' i
    if (Key.getCode() == 13) {
- i5 L: u  X3 `8 X7 u" `: j+ I, w( @                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
2 y1 _% e; |. i; |6 J0 W                    Selection.setFocus(chatInput_txt);; X% f2 t* v2 Q4 ?
                        user_rso.data.chatcontent = chatInput_txt.text;- S- G0 p9 S) ^8 r: g
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
5 {& B7 e7 {! W5 b                                user_rso.data.chatname = name_txt.text;0 J8 m8 N* i* g" l
                                }
( |. W5 z* F4 X1 `" s1 [( x                }
. g- T) ^* K* X! w0 d3 ]    }
; \  I. [6 d4 m; Y7 Y2 ?" j}/ S) N" k. d* X% f4 M* |
var myListener:Object = new Object();! c8 f) w4 d$ k4 h$ b* k! o$ E
myListener.onKeyDown = myOnKeyDown;
$ b: M- A7 K. cKey.addListener(myListener);5 [& d+ N* e% L1 R! j7 i- R6 X
//构造检测摄相头和麦克风状态的函数+ S. p9 j' Y- }1 Q$ D( ]
function checkforCam_Mic() {
1 D' }; q' Z2 T& B7 Y        camArray = Camera.names;
+ h2 N4 M7 T2 A9 K! j/ D$ f  o        micArray = Microphone.names;
3 t- m$ |0 L% ~! ^0 d4 z        if (camArray.length>=1) {' P' g" ]5 f* L% a
                temp_cam = Camera.get();
! @9 d3 Y- H  c7 m6 Q6 P; i, H                if (temp_cam == -1) {( t/ c$ ?# ?: z5 _. I$ o
                        camInfo_txt.text = '视频设备正忙!';- G8 B  I$ [9 }- b5 q$ b# U! L
                        camInfo_txt.textColor = 0xFFCC00;
, h6 i5 M  q+ u4 Z% B9 t                } else {/ ]4 Y& }4 f7 x; M
                        camInfo_txt.text = '视频设备可用!';" C3 ?  ?. Y* \7 G. f
                        camInfo_txt.textColor = 0x66CC00;
9 h  ^* e8 [; ^. X( b                }
; O5 V# p$ s" |$ @/ d; m/ e                delete temp_cam;, X. c7 P$ G4 c  I- i8 a4 W* s% ]
        } else if (camArray.length == 0) {
: j( R  d0 H- P0 ]) w                camInfo_txt.text = '没有视频设备!';/ O# N2 ?+ h% |; |4 F9 S
                camInfo_txt.textColor = 0xFF0000;: O/ ]$ }; q7 V* p$ X3 m
        }; }2 s+ a, y" y" g
        //检测麦克风状态
' m1 o& D4 i' h9 C+ q1 G" l        if (micArray.length>=1) {5 t1 |" V: O9 C+ |& P( A! P
                temp_mic = Microphone.get();& l5 T' X6 D/ B
                if (temp_mic == -1) {5 V. v1 F1 D8 b& ~0 c: [
                        camInfo_txt2.text = '麦克风正忙!';' j8 l0 H& t7 h3 ~2 k
                        camInfo_tx2t.textColor = 0xFFCC00;
& G8 g5 z7 \+ `                } else {
/ _4 ~+ a# z- _& _) c                        camInfo_txt2.text = '麦克风可用!';# u: U- e/ T: f. ]# W& |/ ?
                        camInfo_txt2.textColor = 0x66CC00;8 V1 V# ]: \4 A" C: B  a& B
                }$ E5 `* u: Y4 X" P" B
                delete mic_cam;
7 b/ |6 e' M( i2 k* |        } else if (micArray.length == 0) {  }$ _; u$ O" H7 W: H
                camInfo_txt2.text = '没有麦克风!';
- ^- @" y5 n7 h3 C0 _7 }, n0 t                camInfo_txt2.textColor = 0xFF0000;$ L0 [" q/ R  ^+ V3 Z1 U
        }2 \  f) R$ a: g( h% Y* `
}- g+ Q( u+ d. \
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-30 12:34 , Processed in 0.036154 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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