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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..$ X: o" o2 V( q: i$ }
http://www.iphper.com/copstr( _3 z' {: A- X9 c6 x% F
光是留言板+在线涂鸦就几百行代码(看来效率低了点): j6 [1 P, R' ^9 K

- x# ?$ ?4 s7 P( c" I) B
" m7 E5 U& {4 x+ WFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了9 e7 S9 }3 n8 b/ j# G( {' V, K- X
" X/ w- E3 u! ]  K
. N  G/ y# e( P. {* m; O% t5 J

& S2 I2 {) L% w! B3 |, U//建立与服务器的连接.
, n- E% z6 j; H: |  L; W/ bvar sv_uri:String = "rtmp:/recordstream";, U7 ]5 _3 t' c- [9 L6 Q
var my_nc:NetConnection = new NetConnection ();
. ]6 W, q" s4 bmy_nc.connect (sv_uri);
: c: Y5 ^- H1 o( w+ x0 t9 i//新建共享对象;6 x$ K2 U: p, c4 q
my_nc.onStatus = function (thisObj:Object){" V8 t" y' o/ I+ [
        if (thisObj.code == "NetConnection.Connect.Success"){+ Z7 L, o: x3 |; M
                info_txt.text = "连接服务器成功!!";$ O. A/ @8 V: b& v: W
                info_txt.textColor = 0x66CC00;
& x2 ?6 z# }9 @2 H0 {        }
5 g( s+ J9 @3 x# Z6 W        else{
. K7 U  O* {# x# r: Q6 s                info_txt.text = "连接服务器失败!!"
+ o' G5 J. h; {1 h                info_txt.textColor = 0xFF0000;
& R& _1 T1 q' X0 E        }
" ?. a5 q- }) k/ n" B}6 m, [! x2 y2 X
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);% B, O* d" O; n0 A
user_rso.connect (my_nc);
. k) ?5 V) m( w; P3 s' U//建立摄相头和麦克风对象2 A; M5 _3 N1 C* {$ ]& H* N1 M, G
this.cam = Camera.get();2 K9 V1 y6 p  {
this.mic = Microphone.get();
* e; a+ L8 U0 N0 e; X0 f; fvideobox.attachVideo(this.cam);
  s$ x& _+ I8 Dvideobox.attachAudio(this.mic);
) k6 g5 Q/ E" t2 y1 k$ d0 D5 usend_ns = new NetStream(my_nc);! B' b, {  Z0 K9 R; u. p5 k7 j
send_ns.attachVideo(this.cam);
! k) L" e# w# S( w; |3 j# ]send_ns.attachAudio(this.mic);' p9 \1 E" j& |( G! p
send_ns.publish("humorguy");: m& d" J! X: t# ~$ E& S' ]
get_ns = new NetStream(my_nc);
) q! ~9 I: h6 @  q; y, f' O1 v0 aget_ns.play("humorguy");# V/ @3 N8 [8 D: ~( o- I
videobox2.attachVideo(get_ns);
' Q0 [. F* y0 H//更新聊天内容8 b0 N3 G: \" [: _+ C* O* E& o
user_rso.onSync = function (){
* r% \6 O. r1 y& i% @! |; P                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
& \8 A6 y( q( L; _! H3 k                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里& J  p/ k. B) @. s1 e7 m+ X
}5 D3 ]1 h: o% Z* e0 J
//回车键发送聊天内容2 n; i/ |9 {7 O7 {9 [: q
function myOnKeyDown() {
1 f, ^4 d& }5 `; D4 P  W" z    if (Key.getCode() == 13) {8 E- l& n9 X) s: G4 e( @  X9 k
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
4 S' u2 T6 k$ I1 N# k* _4 h                    Selection.setFocus(chatInput_txt);
9 `9 j3 h! F5 [  o+ [# A                        user_rso.data.chatcontent = chatInput_txt.text;7 ^0 d1 e4 f  P7 A- z+ K$ J
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
! o. B; [: N: o                                user_rso.data.chatname = name_txt.text;
4 v5 u% [0 ]/ b+ x. w0 s5 {; c* ?                                }! _9 M9 r: u4 `, I! q7 D! m
                }
9 w8 u9 {! D  m0 E& r: D! k    }" M7 B! L5 Q! Y( M7 I1 J. k& d2 |
}
/ h$ s. q( R8 J- [, y' C8 u3 Y, n$ ovar myListener:Object = new Object();
9 a( z) s& F2 R+ E' p6 S. f9 PmyListener.onKeyDown = myOnKeyDown;
5 ]: M% a4 p' x7 {% j, r2 I* yKey.addListener(myListener);
* S6 [! {5 e; u: C//构造检测摄相头和麦克风状态的函数) y- L# Y" }( ~
function checkforCam_Mic() {9 f! x3 C& A; g9 T7 e
        camArray = Camera.names;- q, h* e& ~: i. ?$ u4 j
        micArray = Microphone.names;
' b  Z" {$ [: v7 ^        if (camArray.length>=1) {) h# p8 A. q" A+ L# S
                temp_cam = Camera.get();6 Y! c' N+ y4 T
                if (temp_cam == -1) {, \4 f6 a: J" s
                        camInfo_txt.text = '视频设备正忙!';
7 [( o4 H& R' Z# S3 J+ B                        camInfo_txt.textColor = 0xFFCC00;
* t+ ^( W8 i5 B; R+ j' }                } else {) ~% c3 t! M! t' s; R3 M7 h1 j" @
                        camInfo_txt.text = '视频设备可用!';% F; R) d# P: g6 D$ r+ a
                        camInfo_txt.textColor = 0x66CC00;
$ \8 Q/ s& p3 T, f6 f                }: a, h; ?, U1 ^& Y
                delete temp_cam;* f5 \% b! k2 t& O. p
        } else if (camArray.length == 0) {  w/ V; i$ t& z7 @! p; f
                camInfo_txt.text = '没有视频设备!';0 S- b2 u: T# j6 n
                camInfo_txt.textColor = 0xFF0000;5 t& v% c% f8 W9 _% s0 Y2 h
        }. ?- I3 Q1 A5 o, w
        //检测麦克风状态 / V0 n% Q1 p+ H3 _6 p( C
        if (micArray.length>=1) {! I0 Y5 b" X6 @* ^3 w, V5 [
                temp_mic = Microphone.get();& a6 y- Z) [. x; l
                if (temp_mic == -1) {, U, E/ N1 N6 l6 e1 j9 _
                        camInfo_txt2.text = '麦克风正忙!';6 J# b. |" S+ |
                        camInfo_tx2t.textColor = 0xFFCC00;- y/ Q( I) f5 r! ^6 l
                } else {
0 C( }1 i5 r4 ?, z* g$ P3 S                        camInfo_txt2.text = '麦克风可用!';
7 m% f+ L* G4 r& K                        camInfo_txt2.textColor = 0x66CC00;  R6 y1 p# m0 L6 ?; K" H1 w) v$ [
                }
" L, M1 h! g3 |2 O9 `                delete mic_cam;) p- O: `" c8 S8 ^" u: y* A
        } else if (micArray.length == 0) {, V6 _  i- ?, |0 N
                camInfo_txt2.text = '没有麦克风!';
$ ^5 Q. G0 V( R/ R# r! y. L                camInfo_txt2.textColor = 0xFF0000;
; g9 u- b- @6 q, Y1 h        }
9 b- G7 M, C: @+ p}
& N* \0 @/ D) e: }8 EcheckforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-14 00:53 , Processed in 0.015815 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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