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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..6 |. j2 S5 p4 j7 w9 l" F9 `7 u
http://www.iphper.com/copstr3 y3 }  K: K" K- `. [- t
光是留言板+在线涂鸦就几百行代码(看来效率低了点); t6 D: q' x' v/ W+ H0 O6 ^2 _4 r/ K8 [
: x; k  P* B8 H

; e; r' K" Z$ g, {FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
$ G' a6 H3 U& R; n
8 v+ y! V+ s4 l0 w( a6 p
& c7 `4 J9 R- d: H3 N: Y7 F/ ]
! z+ c4 L: Z& k* v//建立与服务器的连接.
: S! n' G' q3 b0 a9 pvar sv_uri:String = "rtmp:/recordstream";
2 X8 f% a: Z6 a% T- {) ^var my_nc:NetConnection = new NetConnection ();
7 f% l* k  J: U! p( V8 Z* xmy_nc.connect (sv_uri);( f' Y3 B( U; Z2 n# S
//新建共享对象;9 Q7 w1 e7 P1 E. }
my_nc.onStatus = function (thisObj:Object){
" i% k2 d% F% B3 z* {        if (thisObj.code == "NetConnection.Connect.Success"){
& U0 \- j3 K, v& T                info_txt.text = "连接服务器成功!!";
1 K+ S( t/ a2 h$ L% Z6 f* e                info_txt.textColor = 0x66CC00;
& H; x% I8 g9 a4 ]# B2 i4 m9 F7 R        }2 t8 c- Q, `) g( z
        else{
. S+ G% F% L" x6 G                info_txt.text = "连接服务器失败!!"5 E* W+ X. {! b# f3 [& _8 b
                info_txt.textColor = 0xFF0000;' b& J- C. N! B% o3 S$ u* B
        }  r5 h* Y/ u. Q
}
5 V$ R, E* u. g+ Y+ g5 Q. p/ n% vvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
; E5 K  J9 }, R& zuser_rso.connect (my_nc);
+ }) {. ~8 b1 x9 K% |/ n//建立摄相头和麦克风对象
' U( L' e1 h0 u: b7 n6 Rthis.cam = Camera.get();3 w8 ~4 w4 ^# [5 g( p" |' Q' R4 }
this.mic = Microphone.get();
; c% M" {6 U- q. u9 Dvideobox.attachVideo(this.cam);
+ q2 q1 r" i. Y7 h; ?7 N1 Bvideobox.attachAudio(this.mic);4 r1 u: o2 Y6 I' w" K/ j! s' a
send_ns = new NetStream(my_nc);' M! f! [* d4 G. i
send_ns.attachVideo(this.cam);
2 V- d3 P+ u" ~3 Gsend_ns.attachAudio(this.mic);
2 s0 I+ z7 M5 B% H8 H9 qsend_ns.publish("humorguy");% r' U4 T2 ]5 i7 ~5 d& I3 S5 E
get_ns = new NetStream(my_nc);! O* j$ J5 [  v; w" l3 r) w; |5 E
get_ns.play("humorguy");( M) p: Y/ }: t) E
videobox2.attachVideo(get_ns);
7 ]* b, i) ]# x: N% b3 d//更新聊天内容4 v! Y3 u( c% H4 E! x, O' q" J2 Z, H
user_rso.onSync = function (){+ s% t3 z+ I' r+ _! ]! }) g2 V
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
& u' z( V* {1 S% }! q. p0 U                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
& P, e0 V; |9 q# d, `+ c& [}
$ |5 s4 m$ E) e//回车键发送聊天内容
, s- n  w/ O9 m. x# @' q: Sfunction myOnKeyDown() {5 Q1 @9 M! ^1 ]5 L3 D5 A. E
    if (Key.getCode() == 13) {
8 i5 w; \! `. [6 \                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){/ O/ k: w' j8 m, K8 S! M5 D% ]
                    Selection.setFocus(chatInput_txt);+ N5 l5 K# w+ z9 O$ F
                        user_rso.data.chatcontent = chatInput_txt.text;
- R/ b1 \% n% F6 W/ ?) W                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
. U- y4 [$ p; ]2 S) k. z: a# [7 Y& W                                user_rso.data.chatname = name_txt.text;
% t' A0 G& S2 q) x! }/ F( s3 h                                }
6 F  u) O' s3 _/ c1 e% Z9 T                }6 g8 Q/ y# w7 G9 S+ P  ^
    }
$ q% y3 `( B( B4 H4 d}3 b% y2 v+ X4 l0 ~
var myListener:Object = new Object();$ ]& ^9 P9 u% [$ q0 F: A' @1 C
myListener.onKeyDown = myOnKeyDown;$ _1 M/ |. i6 a* {8 K) a
Key.addListener(myListener);
! R  W# }4 m- M9 O2 P: {& Q! A//构造检测摄相头和麦克风状态的函数
  {" T% R3 f  X7 F% Rfunction checkforCam_Mic() {
8 m$ w; ]. w  y2 \0 ~+ `/ D. q        camArray = Camera.names;
; ?7 n4 n! ?- K  T        micArray = Microphone.names;2 }7 }: H9 ]6 I& f. z; R
        if (camArray.length>=1) {! C+ v! ~" v. L$ Y
                temp_cam = Camera.get();! e! F8 m0 d: v1 F0 ^* z
                if (temp_cam == -1) {
, `/ O3 Z. _5 F+ h. I" v0 n                        camInfo_txt.text = '视频设备正忙!';
9 r0 G3 H6 o/ J1 l: g0 V. F9 o" g                        camInfo_txt.textColor = 0xFFCC00;
) V7 t+ H. [  n2 m: ^/ b                } else {/ D( P" m0 t3 ~9 A
                        camInfo_txt.text = '视频设备可用!';
7 C1 O5 c3 j! m. k                        camInfo_txt.textColor = 0x66CC00;
3 |/ L! D  T" c                }5 {% m4 p( _' N/ \
                delete temp_cam;% ~& I$ x5 i- n& r
        } else if (camArray.length == 0) {9 z3 f* X3 \# b( U- h- x
                camInfo_txt.text = '没有视频设备!';8 y& `) J6 Z. Q, Y2 m, d
                camInfo_txt.textColor = 0xFF0000;
/ b8 H7 I5 P( c3 m. c        }+ S7 Y4 e6 A, }) F
        //检测麦克风状态
' F0 B7 \1 g  O        if (micArray.length>=1) {
2 p- ~8 o( l# e4 N+ }, a; R                temp_mic = Microphone.get();2 Q! Q$ u$ o4 N6 v# s  m. j! @
                if (temp_mic == -1) {
# C: P9 `4 b2 O  ?& @  d                        camInfo_txt2.text = '麦克风正忙!';6 k4 O' H0 g' H; ~: p: e
                        camInfo_tx2t.textColor = 0xFFCC00;
) Z& t- ~3 H  Y, r' j                } else {
* \: v. }" d2 X- i3 b4 ^                        camInfo_txt2.text = '麦克风可用!';
  Q. n/ y; C9 P4 f& e- y1 z0 J                        camInfo_txt2.textColor = 0x66CC00;4 x' \& ]) ?& k7 ]  V2 g- p
                }
# m" t$ V. }, i3 [  _                delete mic_cam;8 j7 y) |5 M8 D6 M' `2 R7 s
        } else if (micArray.length == 0) {
0 h  X3 Z. q: t* x9 o& v- ^+ Z                camInfo_txt2.text = '没有麦克风!';
3 _# J1 d9 J% y                camInfo_txt2.textColor = 0xFF0000;
* S1 q8 B& l2 {1 M, r        }$ z: w' M8 L/ M3 X
}$ A  U& g- _9 S9 H) q8 J2 R1 ?, J1 \
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 07:37 , Processed in 0.016671 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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