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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
2 _" d  @% G  j) S8 thttp://www.iphper.com/copstr
9 z: o- x$ F% G1 v+ W光是留言板+在线涂鸦就几百行代码(看来效率低了点): D7 J2 h5 X. C4 j
  |  Z# o% X9 g5 Q  D

+ S+ [. o# B2 AFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
* u, T. Y* r# c* f$ d
8 H, y- M4 a0 y
; @/ G* J4 ~# {$ B7 _, m2 J) h
' U, ^) {  J. Y% ^" k+ q" I//建立与服务器的连接.
7 u( o( H4 n0 U  W% qvar sv_uri:String = "rtmp:/recordstream";  ]9 x6 u2 g1 u9 K' @3 r
var my_nc:NetConnection = new NetConnection ();
9 [; ?, E7 u# ~  q3 Zmy_nc.connect (sv_uri);, ~/ p6 k( i, b, L. C( b7 @8 {
//新建共享对象;
) _$ b' o/ ]5 V3 I; J5 \2 x7 fmy_nc.onStatus = function (thisObj:Object){
8 F7 d' H2 A+ L. L        if (thisObj.code == "NetConnection.Connect.Success"){" }; {. M- `. h; D- p
                info_txt.text = "连接服务器成功!!";, j, A* w$ S/ e% b1 ~$ ~& _6 s) q
                info_txt.textColor = 0x66CC00;
( c: Y) R+ ^  H* H  Z* X        }
# ?9 X6 f+ v& f( T9 s! {        else{
: g4 u; A) q- Q! R% u. q+ k$ L2 P                info_txt.text = "连接服务器失败!!"
1 u& o4 j" m; K" T5 \* k: L                info_txt.textColor = 0xFF0000;
- d* e2 q; z! d9 O' b- w        }
1 o5 X$ {& S% k9 y1 z2 D1 B}5 [) @% m7 Z( `
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);" V7 h. T$ z$ ?) }  _4 U
user_rso.connect (my_nc);
8 f4 x7 K3 |$ }) L& K$ E//建立摄相头和麦克风对象3 F3 [' x" |. G8 \& K# B6 A' W8 E
this.cam = Camera.get();
  a9 D; L( W7 mthis.mic = Microphone.get();
5 g- v& X/ R. J" Qvideobox.attachVideo(this.cam);1 E; g1 M* W5 X4 B2 x% C  b
videobox.attachAudio(this.mic);
4 {- o: S9 V% o! F% {# csend_ns = new NetStream(my_nc);+ H3 ^& n2 ~7 m! U" @# @; v
send_ns.attachVideo(this.cam);* E& G) u+ X3 S) y- d; A
send_ns.attachAudio(this.mic);
/ c# [% k4 m; |+ g4 r/ w& Wsend_ns.publish("humorguy");/ d* r* M8 D! p2 z1 ]/ v( e& W' h
get_ns = new NetStream(my_nc);
  i5 c" @! ?2 o" X4 `get_ns.play("humorguy");- `9 K) ]- k% Y- W
videobox2.attachVideo(get_ns);
" k; W4 Q( m+ k" L0 Z2 C" U) F) S//更新聊天内容
& p: ?2 ]+ b6 b/ ^! i6 Cuser_rso.onSync = function (){3 A/ S4 \8 T, h5 N  W& {
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;( V, G+ E; m& q) {) G5 @  R
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
8 |4 I7 F( @8 t6 R$ x$ L}  v/ `  T- s( z+ \" W; E; F
//回车键发送聊天内容" Y, F+ }5 `, ?1 A/ e) ^$ Y
function myOnKeyDown() {; N7 z! W$ r0 C' C1 K7 p% q) }8 S
    if (Key.getCode() == 13) {
( \1 D0 w$ a; \8 _, N                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){) o% L) h* i4 }( I
                    Selection.setFocus(chatInput_txt);: U1 S4 `1 d+ z, u0 Y8 o# }& M) n
                        user_rso.data.chatcontent = chatInput_txt.text;8 U- M$ `: x: H9 U" z9 }" K0 q9 m
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
2 |' P5 ^5 v2 p5 A5 D7 U5 y                                user_rso.data.chatname = name_txt.text;" d% H+ `& x8 q# P+ f+ ^
                                }
6 c; K; J2 l) u, t  u                }
+ j: b+ |# \0 ~5 U    }
( E% r/ Z/ K, s% g$ K4 w, ]$ q}
2 `3 v) C' v4 Z" I2 mvar myListener:Object = new Object();5 O5 i7 S4 O+ ?6 e! b; |
myListener.onKeyDown = myOnKeyDown;
) R) u0 I0 G4 K+ o* j6 S* z- uKey.addListener(myListener);9 H: A6 |3 [# F3 i0 G
//构造检测摄相头和麦克风状态的函数
  P: z! t4 B) v; v* Yfunction checkforCam_Mic() {+ ]. E8 a5 |# `7 ]% P# R
        camArray = Camera.names;; M' v3 G- @. q/ c, |. o. F
        micArray = Microphone.names;, m1 w% N4 @1 e8 U2 \' z
        if (camArray.length>=1) {" K. Y5 P0 `$ _7 j6 w) g
                temp_cam = Camera.get();
0 z3 Q; B2 V, s1 C: e" O                if (temp_cam == -1) {" L# H. q$ B  [6 e! l8 r2 g8 S
                        camInfo_txt.text = '视频设备正忙!';
( `: b# w3 m3 }2 T5 Q& T                        camInfo_txt.textColor = 0xFFCC00;; s& ^6 r/ a) x% j' v- _3 H5 H3 \1 F
                } else {
1 x. i; V7 l- W6 g, n* ~* E  _                        camInfo_txt.text = '视频设备可用!';/ v) f! l4 ~9 A+ m
                        camInfo_txt.textColor = 0x66CC00;
5 w; m& \' n5 q2 A" w0 j                }
/ \. {/ a$ c, E                delete temp_cam;
" F) A( J4 {& b' {. U        } else if (camArray.length == 0) {) {# j5 S' k9 ^2 Z% W, N2 g
                camInfo_txt.text = '没有视频设备!';
7 I) f- C2 v3 D, s; B' \                camInfo_txt.textColor = 0xFF0000;
! D. x' u7 j1 Y        }
& z+ `3 t% b! }6 _9 x* G5 x, }        //检测麦克风状态
& W( X7 T. a8 q( e        if (micArray.length>=1) {
6 F% U2 x  [0 h1 y( R  A                temp_mic = Microphone.get();
: Y# K' [3 H, d1 ?                if (temp_mic == -1) {3 f9 [5 j% \+ e# I4 w8 g
                        camInfo_txt2.text = '麦克风正忙!';
* ?$ c9 S0 f* B: G                        camInfo_tx2t.textColor = 0xFFCC00;( Q/ C) d5 b: d2 y5 b& E
                } else {# E6 m' o9 q1 \9 ?, W5 k
                        camInfo_txt2.text = '麦克风可用!';
1 s; a/ @5 d: K3 R" R! y* L                        camInfo_txt2.textColor = 0x66CC00;  u0 s$ i$ Y5 g3 C( p& E( Z
                }' v2 h: c' e3 U. p7 v
                delete mic_cam;( u$ y2 I+ {: [# U5 M9 Q) s2 C
        } else if (micArray.length == 0) {
  a9 C2 V4 _: N6 N6 U' B: \) X. w                camInfo_txt2.text = '没有麦克风!';( E* u0 d  g. r6 r
                camInfo_txt2.textColor = 0xFF0000;# Q1 o1 `. z8 E6 u
        }
; ~9 X+ m7 s' _1 V$ u7 T}
5 o% N7 o& O9 g( _+ F, echeckforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 22:33 , Processed in 0.017096 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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