找回密码
 注册
查看: 4652|回复: 0

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..7 T. o, ?6 A" O, r- y  B
http://www.iphper.com/copstr  c+ F, i) x6 y% i& o/ o3 H' Y2 `
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
/ z! r  x% [% s! Z
' [  ^5 g1 E# J1 O* R( }/ b
$ Q9 O6 M( o- mFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了9 f$ x' c, U9 x, _1 x5 M

" e" @3 B" E' J3 X( V) `* ?, w. a4 Q/ Y: z  k

/ A% ^& x" {' U2 D//建立与服务器的连接.
3 a4 w9 ^- Q: nvar sv_uri:String = "rtmp:/recordstream";
  ~  j0 e6 P/ H6 N& U! Ovar my_nc:NetConnection = new NetConnection ();
  A. x4 K) E+ h5 Ymy_nc.connect (sv_uri);7 D% R8 W2 }% c3 R6 b$ w$ R
//新建共享对象;0 r% S9 q; S' x4 o' A8 w
my_nc.onStatus = function (thisObj:Object){
, n8 Q. s8 T0 z  z9 y- `6 S7 o        if (thisObj.code == "NetConnection.Connect.Success"){! ~- \" p5 Y! ^. r5 }
                info_txt.text = "连接服务器成功!!";( ~# J; j" h% T" |
                info_txt.textColor = 0x66CC00;
+ ^9 a( P5 G4 W7 E5 k3 @! x* G        }
1 u1 X! v) ~, f+ k        else{- f0 Y+ E0 ~! \' ^# L. M2 J7 E  H
                info_txt.text = "连接服务器失败!!"
; Y) G& E4 n5 l5 s                info_txt.textColor = 0xFF0000;1 ~& r( L3 b: n2 Y1 y* X, w9 x7 P
        }
" I: m3 c' h- E  e9 {+ w}
( O! s1 s, Y6 q* xvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
! r# {, I8 S- R7 [5 D5 L5 `+ Duser_rso.connect (my_nc);* C" b; G" x$ _3 I( x) V
//建立摄相头和麦克风对象
! a! u4 y3 s  I" N) w$ fthis.cam = Camera.get();. K" N* M( o% M& T! D2 A" [' B
this.mic = Microphone.get();3 m6 y( l! R; b
videobox.attachVideo(this.cam);% ^* e+ a7 I+ i+ S, ^4 N
videobox.attachAudio(this.mic);) j) O, k) A& n6 Y7 s7 R( m4 h. K/ A
send_ns = new NetStream(my_nc);
0 S" h% F, A' @send_ns.attachVideo(this.cam);6 P  ~! m% B% ~. _8 v' h8 K; Z- M) I
send_ns.attachAudio(this.mic);
+ K" j9 y3 E3 R* N) C% tsend_ns.publish("humorguy");
' e; h( x% Z) @6 v6 D, I, K& Pget_ns = new NetStream(my_nc);1 ^: }+ B- P! c1 z: o6 V
get_ns.play("humorguy");
, h8 F3 b2 r( r7 w0 h2 |videobox2.attachVideo(get_ns);7 [& R2 O9 v0 p1 ?) X
//更新聊天内容
  ^# N4 Z$ G% f3 Y7 b) a  iuser_rso.onSync = function (){$ }. f3 w. Q* ^& d/ O
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;$ z6 R; T+ J: R6 e0 z
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里+ x4 y& I. q  B+ }, w
}
2 B# \  Z7 L5 H3 ]5 A; Q+ G//回车键发送聊天内容
- G) \4 C7 I. q4 B9 R! X4 afunction myOnKeyDown() {
& l4 O6 Q2 G+ q    if (Key.getCode() == 13) {( ]; \  I  S1 b+ J% p; j$ c5 z& W9 a
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
+ ]3 {& b5 z: g8 _, K                    Selection.setFocus(chatInput_txt);* P$ ]4 O$ g6 }" |" ]0 k* N
                        user_rso.data.chatcontent = chatInput_txt.text;
" g9 T1 }" ]+ ~                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
1 R" w% @0 r' `3 i% X4 L' _                                user_rso.data.chatname = name_txt.text;
# n8 Z% T8 ^) y                                }8 P& T7 G0 t7 s) Q1 Q+ s
                }
4 Q2 f$ a; o  k$ S2 I9 u    }
, N7 l3 r( Y3 `: ~3 d}
1 i+ }* m5 a4 j" Rvar myListener:Object = new Object();
, ]; K' U9 A0 v( U5 amyListener.onKeyDown = myOnKeyDown;
! Y- ^# u: y' AKey.addListener(myListener);& R) I  E  \# @( i' ]' l
//构造检测摄相头和麦克风状态的函数
, K. @0 v! N* A% ^/ v; Nfunction checkforCam_Mic() {9 a6 H! t& X. k/ S
        camArray = Camera.names;. V8 E8 P- S- N- _
        micArray = Microphone.names;6 Y' c2 r. V, ^6 m; p' W- ^6 x/ `* Y3 _
        if (camArray.length>=1) {* ^- {* S7 s1 ^+ d: x
                temp_cam = Camera.get();
) C9 u: R' Z2 B                if (temp_cam == -1) {3 c) u. S! F, w+ w- @! C
                        camInfo_txt.text = '视频设备正忙!';: U$ T$ u2 ]8 t' y: k9 M
                        camInfo_txt.textColor = 0xFFCC00;; n. }; Z/ N8 y/ p5 J
                } else {
3 E7 W% v! K+ {9 h8 o  {- P                        camInfo_txt.text = '视频设备可用!';
7 o; y9 N0 t1 i                        camInfo_txt.textColor = 0x66CC00;
+ L9 G9 D* N8 M4 I* z8 S                }
% M+ k  v; o1 v. m8 Y3 V! x                delete temp_cam;, g+ F4 e0 h' v; _; X9 H4 ?
        } else if (camArray.length == 0) {& y- ]  ~8 @: Z8 Z5 ^4 i
                camInfo_txt.text = '没有视频设备!';
) N7 v% ]  t0 a2 @& L' T                camInfo_txt.textColor = 0xFF0000;- P' B- K3 S) A% O5 }, |
        }' r. z" [6 o3 h5 k
        //检测麦克风状态 " S6 w) x$ m; o" ]4 ]1 v
        if (micArray.length>=1) {: P# R9 F" _9 W
                temp_mic = Microphone.get();
6 @) X' H" Q  R2 {, f$ ]                if (temp_mic == -1) {
3 E# B: P) n/ E- S- G  {% _                        camInfo_txt2.text = '麦克风正忙!';
& D) a" f! ^  C& ?                        camInfo_tx2t.textColor = 0xFFCC00;
0 C% Q; D  |6 E; a' o                } else {1 w( a) S1 }) |% G% ?+ D
                        camInfo_txt2.text = '麦克风可用!';
  C, |0 ]0 _9 q  \5 {1 M1 D- @                        camInfo_txt2.textColor = 0x66CC00;0 m3 G' @" O& f. w) E" u: I6 n
                }
  r7 Q: {+ k* V2 e1 K                delete mic_cam;
2 |8 ^' Y! E8 \' E- p4 y' N        } else if (micArray.length == 0) {
2 E! L, Z+ |/ b+ v3 T2 x2 \                camInfo_txt2.text = '没有麦克风!';8 _+ I9 s( u# m) T
                camInfo_txt2.textColor = 0xFF0000;& D/ T- T0 A) e1 U
        }) W- b( W4 Y) E" y* u$ u: J
}$ X3 G: x6 s7 |  G) L
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-1 21:56 , Processed in 0.015134 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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