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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..: x5 f- {2 O; ^$ u& C
http://www.iphper.com/copstr
3 `9 j  q, r  T0 L; ~光是留言板+在线涂鸦就几百行代码(看来效率低了点)$ p. h% v" j) D6 p# L' {1 U! c

) M2 r7 V8 `) _( H; J$ {# E( ]4 k3 l2 u  `9 T* b0 w) Y5 T" l3 Z. O
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了5 ]) m% Z; J7 D- ~( |" a
# G/ M' z) ~# t# y" }: S7 d6 U& S$ l% T

$ E' P& }  B5 D4 f# Q0 h
5 q' r: k7 L. h//建立与服务器的连接.
  b9 T; `# x0 V4 v, z& H. b' Z7 fvar sv_uri:String = "rtmp:/recordstream";
. ^$ M- @/ s( B: vvar my_nc:NetConnection = new NetConnection ();
% p" D/ n5 q$ U# Z# e6 \my_nc.connect (sv_uri);, l9 C' S  a( u# [$ c; }
//新建共享对象;
% ~! v7 _* ^. D* ]/ j. q2 u% a6 tmy_nc.onStatus = function (thisObj:Object){% Y3 j: M1 r* a, M- \/ S$ j
        if (thisObj.code == "NetConnection.Connect.Success"){% m; z7 e& G# U0 [9 A2 T7 J
                info_txt.text = "连接服务器成功!!";
' ^  m$ N. s3 `; T, [* I                info_txt.textColor = 0x66CC00;. R* f) n/ L7 U4 M+ r6 Q9 P
        }
. n( P+ o1 P, r0 x7 y/ m+ _8 Q0 x        else{" r+ z1 E" `0 o& q
                info_txt.text = "连接服务器失败!!"+ \* u7 {1 h$ }% G4 O
                info_txt.textColor = 0xFF0000;
- ?9 z2 ?! b' R2 R3 q' C! T        }
3 i& H  s7 t5 I/ i& c}
  a  p7 K, f; Q$ f1 vvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);" w- H( |% W6 ]. J
user_rso.connect (my_nc);& i* S: j5 y1 ?7 s3 e. g% c1 K
//建立摄相头和麦克风对象! O0 G$ d$ Z* p, J( C: A$ v
this.cam = Camera.get();* Y& [9 t4 A. C- ?: X* j: m
this.mic = Microphone.get();6 A( R2 r: ^' T7 r) k3 L
videobox.attachVideo(this.cam);
  H. W, l  ^9 a  Zvideobox.attachAudio(this.mic);
* R2 a+ Z. E0 A8 u: d# |send_ns = new NetStream(my_nc);" W3 T/ {7 c8 F6 J& m2 @) b
send_ns.attachVideo(this.cam);- p' t  C* P: S! @
send_ns.attachAudio(this.mic);
4 s) f2 V& t- }; K% V& X9 ^  H# O& zsend_ns.publish("humorguy");
2 u5 \0 N; C4 y/ ^get_ns = new NetStream(my_nc);, X2 K, V5 h1 X5 R% j1 _
get_ns.play("humorguy");: _. I% u. g! z& P2 y
videobox2.attachVideo(get_ns);
9 v4 p8 E0 o1 f1 ~) g//更新聊天内容: E8 ~6 F/ ?4 ^" z" }
user_rso.onSync = function (){
: f' y! \# Q% F9 |8 A% n1 _6 Q, I                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;; }5 x5 V. r4 ?& @/ R  V+ A
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里' G- R# w4 M6 A+ v1 C
}0 u# e$ z9 O; Q9 B0 [- L8 {
//回车键发送聊天内容9 ~: g$ s% y5 I
function myOnKeyDown() {
' T/ ~5 A0 Z' Z& s3 G+ L% `" G    if (Key.getCode() == 13) {7 A* p& v4 X) c
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){( k7 F6 L% L- k8 X4 X
                    Selection.setFocus(chatInput_txt);5 ^3 o- j# b' V) p( ]) H
                        user_rso.data.chatcontent = chatInput_txt.text;( Q: o; x2 P, j8 H5 A! Q
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
3 g5 P% X& d) y" k( C                                user_rso.data.chatname = name_txt.text;. K5 D' b7 Q3 d4 n) U
                                }
! o  l3 Y! r) g* O5 P) w                }! G0 p. ?, `0 g
    }
) z5 I+ T; r$ a  k, \, u' G! s}
7 Q- l9 h3 V& J8 F  n0 X- g8 E: Lvar myListener:Object = new Object();$ ?6 J. V5 k. M7 q  B
myListener.onKeyDown = myOnKeyDown;
" p( S0 {$ W. G  q& q  U' R8 ZKey.addListener(myListener);- e' ]5 M, F9 J+ f
//构造检测摄相头和麦克风状态的函数; P0 K6 B" c* |; d1 o$ G
function checkforCam_Mic() {  V* q& `' |+ k+ f
        camArray = Camera.names;
: Q! x* g/ z1 z) Q& H        micArray = Microphone.names;
" ^: N! ~4 ~& S% K! P& ?        if (camArray.length>=1) {9 V/ K) H" J5 w
                temp_cam = Camera.get();
  b5 v& u4 Z  ]" u: i7 j  z                if (temp_cam == -1) {
3 \+ @3 r0 f/ e5 m; H: w                        camInfo_txt.text = '视频设备正忙!';/ N: o* K' y3 d) T6 a: k
                        camInfo_txt.textColor = 0xFFCC00;
% ]8 Z/ N# q- I/ D  {" e                } else {
: ?4 B6 O& \4 ^' r# N# Q) T; a                        camInfo_txt.text = '视频设备可用!';; P2 R' c" S2 m
                        camInfo_txt.textColor = 0x66CC00;
, ]3 h# Z9 A' |' O- n+ W                }4 G7 d$ r3 a/ ^  a* m! Q6 `
                delete temp_cam;. w7 o8 n4 a6 C* R/ Q
        } else if (camArray.length == 0) {
8 Z7 x! D+ X, G  N* A0 J5 B                camInfo_txt.text = '没有视频设备!';
1 E0 J" P7 z" s' A% P! p! l                camInfo_txt.textColor = 0xFF0000;4 H3 R9 m5 U) G" U, y
        }8 @* r( O6 J7 }8 R' Z$ k
        //检测麦克风状态 ' ^' ^2 K; s; t
        if (micArray.length>=1) {
3 {2 o9 B' c& r  H0 b/ X. ^                temp_mic = Microphone.get();" D" u6 o, s, g4 e6 ~. Y, h
                if (temp_mic == -1) {
3 W) W2 P/ K3 @4 ~4 @) Y' e                        camInfo_txt2.text = '麦克风正忙!';
2 C& _/ G* D5 F# j4 ^( a                        camInfo_tx2t.textColor = 0xFFCC00;
* U* a3 p, @/ r                } else {9 d5 y9 J+ t: C$ D0 b
                        camInfo_txt2.text = '麦克风可用!';, @) k3 g* v$ |( ?* Q' Y
                        camInfo_txt2.textColor = 0x66CC00;
# W) U9 f- C1 ^" t$ U, M9 r4 x                }4 |: F" h. i& J1 c0 k
                delete mic_cam;
& k7 h2 u  b# Z: m' i, \        } else if (micArray.length == 0) {6 n. w& m; O  n: F3 P4 `+ u7 K
                camInfo_txt2.text = '没有麦克风!';
7 T' B6 O, z% a; g                camInfo_txt2.textColor = 0xFF0000;
/ B! X. f7 I  `3 z" k2 Z0 L        }) X5 }' G- K5 l) ]3 u; y
}$ E% g: J9 \7 h0 B; ?# u- G* Y
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 10:18 , Processed in 0.019798 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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