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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
+ G: Z4 d7 U' ohttp://www.iphper.com/copstr
( Q' c5 b: Y2 {* C光是留言板+在线涂鸦就几百行代码(看来效率低了点)2 L. Z! ^; H! U  y- |2 R
" v. h9 m0 _. |

: O9 x- S+ M* Y, ]! r; MFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了, _# S! m/ k6 w* s4 A0 V
2 I7 O2 E( `1 w

# r1 o/ T+ r* l% O% k  B0 t" o5 L. h6 f5 N* Y1 b5 _( }7 \
//建立与服务器的连接.  u% h6 O% g( d4 Y1 U6 M% x
var sv_uri:String = "rtmp:/recordstream";
" C5 @2 r6 Q/ D7 [5 @6 Nvar my_nc:NetConnection = new NetConnection ();
$ S: T# J4 n& O- h( }my_nc.connect (sv_uri);
' V  M0 _/ N  P) O; @//新建共享对象;! D# ^1 }  d7 P
my_nc.onStatus = function (thisObj:Object){
1 m8 x) w6 S# g7 k4 \        if (thisObj.code == "NetConnection.Connect.Success"){
3 p7 z. Y5 W( x                info_txt.text = "连接服务器成功!!";
( l$ K5 J. w" a. A4 T                info_txt.textColor = 0x66CC00;
3 T, O7 X1 i/ t6 U: P        }0 l/ U6 r4 q0 E" w$ ~; ?
        else{
  Z, M0 V! T- t' R* ^# ^( A; k' t$ a                info_txt.text = "连接服务器失败!!") \, Y$ n/ l  r1 h  `6 V& h
                info_txt.textColor = 0xFF0000;
7 Q* r9 @3 s6 b  b- ?        }
/ H3 w  s* @4 ?$ j8 L+ X}% ^$ v7 U( B4 f! t0 H
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);7 a0 Y0 r, c. X# ]. R; I
user_rso.connect (my_nc);+ o5 Y! T- S; o; Z/ E3 h. v' T
//建立摄相头和麦克风对象
" D7 ~0 H7 M5 M% Xthis.cam = Camera.get();
1 P, ?0 c& F# R8 i! V( wthis.mic = Microphone.get();8 Y7 q/ n: f3 w$ @' k: H- g
videobox.attachVideo(this.cam);+ [/ ?) @$ A+ ^9 X6 F3 T0 a
videobox.attachAudio(this.mic);# g: L0 B6 O( ]0 u# t5 |7 G
send_ns = new NetStream(my_nc);
- W- F2 d0 G% y/ ?7 h8 b. }send_ns.attachVideo(this.cam);: s0 q( R1 ]- t- ~/ B/ P/ M, _5 E
send_ns.attachAudio(this.mic);1 {' A; c& Q2 t* z; A7 B
send_ns.publish("humorguy");
' L+ d6 Y: N* v9 R2 @" tget_ns = new NetStream(my_nc);; L8 Y) a& V6 z7 K; R! H9 ?
get_ns.play("humorguy");; D9 i/ |. Q( r7 t) p' r1 P5 L) X" b
videobox2.attachVideo(get_ns);/ b) I9 ?4 K. A# i+ S4 b# ?$ R) G9 Q
//更新聊天内容
8 ?5 F* }, f1 Z: @# u% I- |user_rso.onSync = function (){# Y$ C+ Z; C4 g" v
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
* r% d2 C( X/ R6 T, v6 W% e                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
; u; w& ^! k" @7 f}9 `- H6 C6 e" @  G: T
//回车键发送聊天内容
! P! F7 _. \: H( x- d, n) B& k& ^: Nfunction myOnKeyDown() {
2 k  O+ B8 v( @/ N+ l3 D    if (Key.getCode() == 13) {
9 Y) V$ d& [- u& f( O7 J+ N' p. E                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){3 `- n) t* G+ ^' ~
                    Selection.setFocus(chatInput_txt);
# d2 D& D" e. u1 s& H                        user_rso.data.chatcontent = chatInput_txt.text;/ Z' x1 n, a$ t5 S1 ?
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){6 @; R; u  [! ]+ W/ f! G
                                user_rso.data.chatname = name_txt.text;" C$ A* P1 x6 F8 p) {' o1 l2 ^
                                }
; z  n% ]+ k# m# s1 S                }
  e/ Z1 r' W3 t    }
. I9 a4 H% u6 ^0 H: r2 K}
3 K% U* f+ z: E9 B3 Xvar myListener:Object = new Object();
! i3 d" E9 j1 D1 h0 D( GmyListener.onKeyDown = myOnKeyDown;
2 H+ ?) t' z3 P. M+ |; `- T# TKey.addListener(myListener);; K& t& [( Q% m; l% F5 B
//构造检测摄相头和麦克风状态的函数
. ]6 Z4 _) T4 ^9 F/ j! g8 Afunction checkforCam_Mic() {
* J- {, ^9 Y- Q8 \2 t* ]1 E        camArray = Camera.names;
7 u9 B% N! j+ ]( ]; _4 X- {        micArray = Microphone.names;
3 B! I4 V  s5 ?3 Y9 \% E        if (camArray.length>=1) {
" w- E9 }, M0 N9 f# g# l- V1 D                temp_cam = Camera.get();! X, }5 r$ p6 X! M; R$ s# W
                if (temp_cam == -1) {9 N7 _# y+ Y! Y" N0 a% B3 u
                        camInfo_txt.text = '视频设备正忙!';
0 y" C5 e, G8 b2 g( z; b/ g. J                        camInfo_txt.textColor = 0xFFCC00;+ h- X# m5 @5 ]. o5 g+ K! y
                } else {
* r; @% j2 [( b& t: W                        camInfo_txt.text = '视频设备可用!';
& ~! |2 e6 p$ r, [% z3 p                        camInfo_txt.textColor = 0x66CC00;7 A5 m4 Q1 ^( Q+ u( W
                }
3 q2 B2 |$ `/ L5 h4 A# z6 r2 K                delete temp_cam;; |; l! Q) g" x$ F* L" n
        } else if (camArray.length == 0) {
/ y- @8 _4 K, w4 n4 \$ e                camInfo_txt.text = '没有视频设备!';2 {- P/ f0 {6 [
                camInfo_txt.textColor = 0xFF0000;
2 R. A" X3 E" t6 @) X        }
( a. q: R# K4 N+ n% v9 s0 k5 ~7 k        //检测麦克风状态
- P- ]9 H' Y* x- B& ?, @( v" Z        if (micArray.length>=1) {1 U  M) P  d5 Z& c( N
                temp_mic = Microphone.get();
  D( m; m% Y  G* g" U# h. Y( a0 t                if (temp_mic == -1) {
# U  P4 @* G9 S% k+ {4 m                        camInfo_txt2.text = '麦克风正忙!';3 I9 X4 {5 n. l3 i
                        camInfo_tx2t.textColor = 0xFFCC00;
) M/ X( F! c: N3 F) V$ t: C" v2 X# }& `+ \                } else {# j4 Z+ a" J$ d! w9 r. l
                        camInfo_txt2.text = '麦克风可用!';
. R: |) @. B* w/ _                        camInfo_txt2.textColor = 0x66CC00;, `5 m3 I1 i; @$ `  w
                }" Q" @) M; ~: E" M5 b
                delete mic_cam;) K: g0 @4 n( `  c
        } else if (micArray.length == 0) {( c7 i% \8 e( o1 f5 ~# p$ m
                camInfo_txt2.text = '没有麦克风!';
) z/ D: A9 }# d                camInfo_txt2.textColor = 0xFF0000;( u9 K  h' A$ o" e9 C$ ?
        }: Z6 m- h9 s5 v0 k6 E" }! V- N
}
5 d% F- d& K$ |. B  P6 vcheckforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 03:47 , Processed in 0.017616 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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