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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
* g9 K5 Q' |8 B1 n/ G3 {http://www.iphper.com/copstr
8 g1 D$ q+ ~% C% I. v" e9 }光是留言板+在线涂鸦就几百行代码(看来效率低了点)" H2 L3 K  F6 s8 ]6 Y% o
9 D: h+ U( V) v0 L8 r2 M

" N6 @6 Y2 Q, g% L+ a' zFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
6 m* B% J& u# Z& |+ d, L3 s' z7 T1 F, e% O+ T' s& L# N/ E
- ^2 j- M+ k6 H1 E' r7 m, l

: Y1 ^3 E& }2 m//建立与服务器的连接.
9 `0 E# X6 b  s  {( J: fvar sv_uri:String = "rtmp:/recordstream";( P- W% v2 e' r2 [
var my_nc:NetConnection = new NetConnection ();
; R  b) W0 W5 o; e. f1 ]; z: Nmy_nc.connect (sv_uri);
! M% u4 M* M+ I0 F//新建共享对象;
$ Y" e7 \7 a% k! Y& R: ~/ r/ qmy_nc.onStatus = function (thisObj:Object){
) k+ f1 N! D2 [        if (thisObj.code == "NetConnection.Connect.Success"){
0 T: i  q) A. v' R1 Y( ~  j                info_txt.text = "连接服务器成功!!";+ Z7 J* J& |5 }. _6 t2 K2 m
                info_txt.textColor = 0x66CC00;7 w( {* c2 @$ `. E
        }& V: G& a9 ^5 k
        else{
5 J7 I0 Y/ ?: n9 a: D                info_txt.text = "连接服务器失败!!"
6 }$ V( ~1 t9 a! K/ W; ?                info_txt.textColor = 0xFF0000;# ~7 `  c! x& H: S8 x
        }" x. E$ x+ m' B( x3 V' A; w' ?, j
}
+ }. _1 z: k3 x/ N3 _var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
+ P/ E& h0 T2 X: T- Luser_rso.connect (my_nc);
1 v9 n  P7 ]/ q) |//建立摄相头和麦克风对象% m% K+ x; m( g9 M, F% M) p; W) ^
this.cam = Camera.get();
/ V3 b2 U' y! N9 K+ K/ u" ^/ F' Uthis.mic = Microphone.get();, q4 S, K$ Q+ f* v% c, [
videobox.attachVideo(this.cam);
$ U$ C0 W: f- ~& P# v" C- }, \. `videobox.attachAudio(this.mic);
& h6 {! L& n0 lsend_ns = new NetStream(my_nc);9 w! D$ @- F) M9 G- b
send_ns.attachVideo(this.cam);
9 }6 J& z; j" h+ j" |  C0 wsend_ns.attachAudio(this.mic);
# d3 w0 a; _4 v5 @1 xsend_ns.publish("humorguy");  g* C" u' I& r% T/ `& p5 ?
get_ns = new NetStream(my_nc);3 }. N, X- e1 n5 S$ O1 \1 I
get_ns.play("humorguy");
  Z. s/ x0 m' ^# [) t5 Wvideobox2.attachVideo(get_ns);, B# v8 V8 r( K  w
//更新聊天内容
# T) \# k+ C9 a7 q6 G; y/ cuser_rso.onSync = function (){" P9 K$ j5 e" P2 v, n$ |
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
( w! z* Q& S9 ?, z0 f% g                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里3 o& U  f3 ?0 N. t) P
}
3 N  x1 B9 u7 ^//回车键发送聊天内容; s2 e9 |% s6 y0 C5 C
function myOnKeyDown() {$ |! n2 m! ]5 T2 y
    if (Key.getCode() == 13) {4 l0 u% I! q" B% E
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){' {: a( N4 @" \1 G' _5 o- u' G: m, }
                    Selection.setFocus(chatInput_txt);! |9 S2 ?, @' i: o/ A
                        user_rso.data.chatcontent = chatInput_txt.text;  ]5 P9 [% E" z8 ?2 f
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
+ F7 W" S4 ~1 Y# [+ S1 _, i0 H                                user_rso.data.chatname = name_txt.text;
" R; ?' b1 g0 }: K; c. C- R                                }* K6 o- F$ o, t, ~2 S1 E* H
                }
2 n) ?) F9 o, C. I& ~; L6 t% H! t    }
. m9 q6 c3 |4 `3 @}
# F2 O1 I" |, ^% |( S' r0 Ivar myListener:Object = new Object();
7 b4 X) D. U  i5 k7 ?% h6 a0 NmyListener.onKeyDown = myOnKeyDown;6 g6 I" F4 Q- {; [
Key.addListener(myListener);) l" s5 [  X7 T0 {; C- ~% C) X
//构造检测摄相头和麦克风状态的函数- _9 [% }3 Z1 G: f7 r  r3 J
function checkforCam_Mic() {
4 K+ w- h1 m( H4 I4 M        camArray = Camera.names;0 ~5 s2 _! m" B
        micArray = Microphone.names;
) O$ o6 Z) d/ y        if (camArray.length>=1) {( z9 K$ C7 Z* E
                temp_cam = Camera.get();) ?7 L+ v. q3 Z5 t5 q  e
                if (temp_cam == -1) {
$ \; m0 y6 S5 o7 b, k                        camInfo_txt.text = '视频设备正忙!';
8 z8 K+ w8 h) `# F5 d8 t& m( X                        camInfo_txt.textColor = 0xFFCC00;
, w5 W/ K; b8 k, w7 [                } else {# U1 e6 Q2 i* @! Y2 a! M0 b
                        camInfo_txt.text = '视频设备可用!';/ S1 I6 B& B5 R# h5 B
                        camInfo_txt.textColor = 0x66CC00;( J2 ]6 X1 Q/ F) M& d( j
                }2 L3 V& d) P4 l% B- }# b
                delete temp_cam;5 o7 p% _: T0 w! @
        } else if (camArray.length == 0) {. _4 p& b& q6 _2 R7 Z; w
                camInfo_txt.text = '没有视频设备!';" F/ n( R. W# w9 `
                camInfo_txt.textColor = 0xFF0000;
' V# P, }2 V8 j3 \4 W        }7 Q6 o( f7 E# R4 j  R
        //检测麦克风状态
3 f0 X  H, z" ^+ R* C$ P        if (micArray.length>=1) {6 M4 g! k* b1 r( K0 x% @$ N
                temp_mic = Microphone.get();1 U3 y8 r7 M( m% ^6 P2 R, ?& g% m
                if (temp_mic == -1) {
+ F" D% a9 L1 x( F2 f& L5 J2 \                        camInfo_txt2.text = '麦克风正忙!';
8 P* H! d/ D, E- U- B                        camInfo_tx2t.textColor = 0xFFCC00;
' Z. R) g) Q; j8 L0 T" M% I# ~2 }                } else {( [6 `5 \% {3 O8 `
                        camInfo_txt2.text = '麦克风可用!';
$ q! ?7 h* i7 ?- f- P; l+ F7 |                        camInfo_txt2.textColor = 0x66CC00;, P5 D$ `# A, w
                }! W% E/ B: X9 O! W
                delete mic_cam;
' s' V4 F2 @( a% `; w        } else if (micArray.length == 0) {
; W1 r0 r  R& X3 [                camInfo_txt2.text = '没有麦克风!';2 V* K" ]1 F5 _
                camInfo_txt2.textColor = 0xFF0000;5 |( I% F4 Y, `6 F; ?3 E% g
        }
5 r4 {  G7 P- H# [# c9 u5 S" d}0 _5 q) E/ \1 k) U5 a
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 23:52 , Processed in 0.016853 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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