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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法.." f$ X- i$ q! |( w
http://www.iphper.com/copstr
; T; O* ~7 p1 O7 n光是留言板+在线涂鸦就几百行代码(看来效率低了点)
$ T  A0 A& j8 U0 b  T, _! j8 r5 c8 u2 V( Z+ a
8 s' H5 w0 S% U' A  g' x
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了+ x1 G* t; y* L- U

+ v7 {5 E- |: {2 q5 C% K" O$ H5 m7 s

0 C$ H9 }" k& y3 H- \//建立与服务器的连接.
+ X2 M! m) @! I2 S/ |0 g7 Xvar sv_uri:String = "rtmp:/recordstream";. R1 H- l! X- \1 G
var my_nc:NetConnection = new NetConnection ();" t% ^0 a+ \8 D
my_nc.connect (sv_uri);
& v3 z9 Y' j8 p* ?//新建共享对象;" N  ^. L& z- e! T, T  n
my_nc.onStatus = function (thisObj:Object){9 }& s; L- a4 U
        if (thisObj.code == "NetConnection.Connect.Success"){
2 B* }2 b/ x- y                info_txt.text = "连接服务器成功!!";
* e5 \9 P/ _/ {% s: I                info_txt.textColor = 0x66CC00;
( Q+ k& u& J9 t5 n( l3 ^        }2 y& ?/ g+ e+ L5 H
        else{3 W' p$ ~- R- F: F0 u- b
                info_txt.text = "连接服务器失败!!"; w+ ]# j! x. N4 j7 s7 q
                info_txt.textColor = 0xFF0000;3 t$ @! L. Z! @! e3 \! U8 Z+ @0 D
        }
. \1 v8 _' ?8 T, J; v}
/ M) `3 U- j0 J  e( D" W) o1 ]; bvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);7 R/ w6 {" Z8 q4 ?# Q
user_rso.connect (my_nc);# ^% b0 M* |+ ~8 p
//建立摄相头和麦克风对象
# U- F. T  Y) xthis.cam = Camera.get();
. z# C9 E. a- d$ Z2 `this.mic = Microphone.get();% o$ A# }* W' c$ ]
videobox.attachVideo(this.cam);' @" w% S# t0 ?+ N% i  G1 {
videobox.attachAudio(this.mic);. B( }7 q9 p7 r  l/ M
send_ns = new NetStream(my_nc);
2 Q( Q+ A: v9 qsend_ns.attachVideo(this.cam);
- Z  Z  ?8 x+ p9 nsend_ns.attachAudio(this.mic);  V: ^- h9 I% i
send_ns.publish("humorguy");
3 A) W$ R. S  n1 s. v& Cget_ns = new NetStream(my_nc);$ t5 Y( d, }4 h9 q1 C
get_ns.play("humorguy");" P, D1 v: f  ~( w
videobox2.attachVideo(get_ns);( Z( e0 j' @7 w' n' [4 D' ~, X- h
//更新聊天内容' d, U! i* ^' ^
user_rso.onSync = function (){2 M# p* Y5 P2 b4 d
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
0 n* L0 u  y- e  M8 m                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里6 ^* f9 ^# f4 K. J- H
}% W2 I3 J5 L; A8 \# M/ N, t  N# Z& Z
//回车键发送聊天内容
! x/ N% V# t4 `; Vfunction myOnKeyDown() {
6 v$ @7 \( c7 ]+ i* }    if (Key.getCode() == 13) {2 s5 q! V4 Y6 C  V! @; v
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
0 Q: M/ h0 V0 P' t/ `5 E7 Z/ v                    Selection.setFocus(chatInput_txt);
4 C9 D' B% d6 I( l2 k                        user_rso.data.chatcontent = chatInput_txt.text;/ D2 A; T  Q5 E; s% T
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){' s' c3 x; c2 J3 I" x, f0 m
                                user_rso.data.chatname = name_txt.text;5 A/ h4 l+ [: q+ b% u! N
                                }
$ D2 _2 s* U3 c( Y) K0 V2 i                }
0 T& @" H9 M: Y2 E& n% X" z    }
8 B2 `: {$ p, N# J# z8 v6 T7 F. S}
. U8 ^7 V( r- |) Evar myListener:Object = new Object();
9 r# a# @* y0 L% lmyListener.onKeyDown = myOnKeyDown;
9 I, Q' i; z4 N( pKey.addListener(myListener);
5 P2 H" o9 L) B//构造检测摄相头和麦克风状态的函数
; d2 k- d4 o/ V% r9 wfunction checkforCam_Mic() {
! k. f1 F" ?, G  f, c2 N        camArray = Camera.names;$ E* C" x. f! C3 v+ I7 \. A7 ]
        micArray = Microphone.names;
" \  A7 C: G, O+ a' ]# M, d        if (camArray.length>=1) {& I- O6 {; }! ^1 b
                temp_cam = Camera.get();) W, Q  X- Y3 T' A! B
                if (temp_cam == -1) {
! Y  M- _4 G$ T/ X2 u                        camInfo_txt.text = '视频设备正忙!';  e5 |; t$ _5 Y9 B' Y& a* Y( x. B( u
                        camInfo_txt.textColor = 0xFFCC00;
6 z+ ~" J/ f; `/ c" M; Y                } else {
" R+ c8 y& J( M                        camInfo_txt.text = '视频设备可用!';
# y0 ^3 z# I4 a3 Q2 p                        camInfo_txt.textColor = 0x66CC00;/ T/ o3 r  [7 F! o% Q" u0 M+ T
                }  S+ T( b5 A7 G  |
                delete temp_cam;( O# ~$ W! L4 @: w: `
        } else if (camArray.length == 0) {5 i  G/ V, d; m: D. @5 R9 V
                camInfo_txt.text = '没有视频设备!';
: V5 ]  G5 X" b7 O6 Z( X/ Y/ y5 T                camInfo_txt.textColor = 0xFF0000;
* Y3 _; o+ m( a2 \        }) g. Q, J' |/ I4 h( J8 ?
        //检测麦克风状态   E4 g7 \/ E" ]0 O2 N! h( k
        if (micArray.length>=1) {- f  P0 j- ~9 a4 R- O2 m
                temp_mic = Microphone.get();
2 ^# z7 C9 A2 V& r' {* z                if (temp_mic == -1) {, @: x0 Z! c( V3 r: F7 Y6 O
                        camInfo_txt2.text = '麦克风正忙!';9 A7 S$ S2 T' E4 p6 t& o
                        camInfo_tx2t.textColor = 0xFFCC00;8 E% l' o; |. |) c1 E
                } else {
. Q2 [* s/ e6 I                        camInfo_txt2.text = '麦克风可用!';
; {$ F+ w1 |0 ^2 p0 y# U) \; N3 v                        camInfo_txt2.textColor = 0x66CC00;7 e8 N3 G% U; i% n
                }& k# J4 w$ R, S0 ]9 `2 {: D
                delete mic_cam;' L4 J, t6 r. T3 k
        } else if (micArray.length == 0) {! S4 s8 q0 F- t3 l0 x0 B3 A, g; k# C* O
                camInfo_txt2.text = '没有麦克风!';$ D! J) y6 q* k5 p8 \+ p
                camInfo_txt2.textColor = 0xFF0000;0 |7 {) T; h6 x9 F: o
        }# I/ g) N4 g3 b& f. z* q0 j
}
. b$ m& K8 V5 C. d0 OcheckforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-15 03:13 , Processed in 0.015783 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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