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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
- G- L( H" Z+ P+ p" V' c( y7 \http://www.iphper.com/copstr1 c7 e' j! c5 v
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
1 e. P# Q! W# y6 X  D7 ?/ ~; |# ^7 o/ {3 z
! X$ G' s( r$ `# d4 e9 j" }" u! F
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了; u) k) z# b; f3 B
/ q+ a" \3 h' q9 j5 r$ G
8 y4 S% g4 Y$ T7 Z" A5 Q

. Y. A) u4 \7 H3 [8 N$ O* u# I//建立与服务器的连接.
; W9 C( u' ^8 l: T/ `var sv_uri:String = "rtmp:/recordstream";+ ?1 ], C5 E- ?! V: T
var my_nc:NetConnection = new NetConnection ();
4 [" x  I3 q) C% gmy_nc.connect (sv_uri);* O: O6 u* T* I  b$ [! Y
//新建共享对象;
# n8 A( A; K( s* p1 lmy_nc.onStatus = function (thisObj:Object){
: J9 M, P- K, A# |. A/ {        if (thisObj.code == "NetConnection.Connect.Success"){, P* D6 f* s) q! t5 \1 {
                info_txt.text = "连接服务器成功!!";* l  i4 f- t+ x9 y, o9 {
                info_txt.textColor = 0x66CC00;3 N4 n4 H- u6 O* f8 i
        }
8 e3 _  Y3 {0 ]# m1 f8 `: ]        else{
+ A) T3 a1 K! b5 C                info_txt.text = "连接服务器失败!!"
' H" f$ P$ S: w. V                info_txt.textColor = 0xFF0000;  i' X' C! R% Z# R3 e( V  d
        }! D: @- g8 q7 B; B7 G9 y/ v2 W
}  K1 r# o# N! r; P# ?
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);2 F) D# v, o4 O, G( D$ I& c
user_rso.connect (my_nc);0 @  k5 n* o0 V& V* E
//建立摄相头和麦克风对象" `) ]2 Q' Z. S) v4 U
this.cam = Camera.get();
; J# x5 Y$ G7 w* c  Hthis.mic = Microphone.get();9 r0 E. v( }6 U, O- i' c( b% w
videobox.attachVideo(this.cam);9 O& z9 Q" X) p" P3 F
videobox.attachAudio(this.mic);" _. d) k* S: o) `# Y, j' m  n
send_ns = new NetStream(my_nc);
7 P- }0 \5 x8 c9 [& [send_ns.attachVideo(this.cam);7 d2 ?7 p3 A. j. K" {# ~/ {- u
send_ns.attachAudio(this.mic);3 V. b5 h; \! A# X% t4 }
send_ns.publish("humorguy");
5 r9 t6 C- d( d1 W6 j/ }1 y( @4 lget_ns = new NetStream(my_nc);" b6 j# F* d2 [. k
get_ns.play("humorguy");- q3 Y; y8 v" o4 T+ V
videobox2.attachVideo(get_ns);
1 |: U5 w8 y# d  B9 {2 j  S% R//更新聊天内容
$ N0 s4 T' X( auser_rso.onSync = function (){
4 O7 G0 ^8 }, ]                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;, j* r6 a0 J' r6 K. G- X! p0 _: w% e
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里& e  N! K" U7 o$ g; u
}  P' G# n3 K3 E( m
//回车键发送聊天内容
" ~+ O9 F9 E" R: l% l* g1 B  Qfunction myOnKeyDown() {2 H( v9 p. t' L1 y. ^
    if (Key.getCode() == 13) {% d" L- ~4 n+ E& @% A6 F" Y) Y1 D# q' v
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){! o/ Y3 f& \1 U
                    Selection.setFocus(chatInput_txt);
* V8 J% B& V; r7 N, J                        user_rso.data.chatcontent = chatInput_txt.text;( H9 H0 r6 H2 ^8 ^7 L/ x+ ?
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){4 J, X7 f5 D0 Z/ \9 h' a
                                user_rso.data.chatname = name_txt.text;1 |4 y! [* Y( q3 p4 ~
                                }
, `7 `0 @4 J7 N3 l. ?8 Y+ h( [. F                }: `' L3 B" }( J' d
    }
' K! Q# L3 v/ C}
% g9 d' D% y- A( x$ Q( Avar myListener:Object = new Object();7 H4 {" j  [' ?
myListener.onKeyDown = myOnKeyDown;$ @: s: j+ A3 y7 K5 N& i# D+ R2 q
Key.addListener(myListener);: H  d/ u. ~/ r/ f# \
//构造检测摄相头和麦克风状态的函数* L# O9 W/ h6 ~% ^6 |& Q# F7 L
function checkforCam_Mic() {7 {7 {$ p9 I/ n9 R" m* E
        camArray = Camera.names;
* @% u9 }$ z6 w  \( m6 n        micArray = Microphone.names;
8 h5 n# {$ D8 B        if (camArray.length>=1) {
' C+ W7 R: E6 f1 c$ }8 K0 p                temp_cam = Camera.get();& N  n7 v. e3 t$ @( N' N1 R; n% z
                if (temp_cam == -1) {; @/ S  X2 Q" I7 b5 `$ c2 v& l
                        camInfo_txt.text = '视频设备正忙!';, Q  ?! [: Y. ~! p4 S- @
                        camInfo_txt.textColor = 0xFFCC00;: m9 u: W* |+ s0 X  }$ F$ n& j
                } else {
( ?4 U" r8 n& o% r. w: K                        camInfo_txt.text = '视频设备可用!';
$ }9 h) d% [( i9 N2 n                        camInfo_txt.textColor = 0x66CC00;
6 N6 z% {. C  ~2 W% P! s8 U                }
8 r- k) x$ h% b( J' _- v5 ]                delete temp_cam;
7 b$ y; t4 |. d  z        } else if (camArray.length == 0) {3 S- d4 r' c" q9 j
                camInfo_txt.text = '没有视频设备!';' q3 m+ }/ @7 z5 q( [) ^% v
                camInfo_txt.textColor = 0xFF0000;/ L" G4 t0 Z4 b" }* B; K
        }
4 h+ c: |) H0 k6 c: F7 q$ y$ @        //检测麦克风状态
! A+ x7 s7 {! f4 X8 p5 n7 J        if (micArray.length>=1) {
- z5 P% X( O8 s. i                temp_mic = Microphone.get();
! s: J( d1 C6 M9 n* N- F. R                if (temp_mic == -1) {) \- V' a  o7 K! t1 O
                        camInfo_txt2.text = '麦克风正忙!';7 r2 W0 C/ h% F8 N8 \5 S
                        camInfo_tx2t.textColor = 0xFFCC00;
' h* q2 e* E3 K' }# s. f6 c# \                } else {) p) f) p3 R$ o! d* N
                        camInfo_txt2.text = '麦克风可用!';+ [+ @$ L7 t- p3 i7 x
                        camInfo_txt2.textColor = 0x66CC00;- G4 l  q& S( S# t+ b7 `, K6 \
                }& w& ]- p; A. A, ^7 b
                delete mic_cam;4 {! o) t5 [7 K' h2 W
        } else if (micArray.length == 0) {& ]  O1 R% C  O% d: h1 s9 a$ o
                camInfo_txt2.text = '没有麦克风!';  K; z  \- N: d; }
                camInfo_txt2.textColor = 0xFF0000;
) n2 y3 C7 U7 ~- }9 H5 g        }
2 w+ V8 Z% R  \' Y. Z5 t}1 i# |( l* g6 X. s
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 06:15 , Processed in 0.020611 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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