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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..3 E% F* f: l. I* ~
http://www.iphper.com/copstr
5 f. h) o! A5 r3 @! e, O光是留言板+在线涂鸦就几百行代码(看来效率低了点)! P' M: A9 Z0 B6 l( p. n: V

8 _4 r2 S3 r- l+ [$ u. w7 x% I3 `& j1 o& l& C
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
  C! w8 H( B9 z# }4 r) r
4 |" K/ g: Z0 w9 o7 Q, M" }3 G: T1 d1 I% w  S! ^) A9 V8 y, s

2 v4 w, ^, \* ]2 ?//建立与服务器的连接.
; e: T! P9 }, F+ b. r( b2 Wvar sv_uri:String = "rtmp:/recordstream";
4 ?- Q" N  Z0 T( d, O- u# Q9 t& }var my_nc:NetConnection = new NetConnection ();6 F' A( G/ u+ Q' _5 `% B
my_nc.connect (sv_uri);* q/ ^5 o  d0 Q  |. u( N: T9 n
//新建共享对象;
0 c8 F/ o7 r4 p9 V4 x1 c7 N7 Fmy_nc.onStatus = function (thisObj:Object){
8 _+ w: d- z8 B3 T        if (thisObj.code == "NetConnection.Connect.Success"){
% J( C# b3 r6 S4 [7 m6 k8 R                info_txt.text = "连接服务器成功!!";3 M( l( V4 g8 X2 t" I6 L9 O
                info_txt.textColor = 0x66CC00;6 E9 E/ p6 s& d% ~9 I
        }% {2 A7 V" G0 D( P  P8 r
        else{' T! B2 C0 X& ]" e" N3 K
                info_txt.text = "连接服务器失败!!"+ D3 c6 |( I, Y
                info_txt.textColor = 0xFF0000;
; g) m7 M' C2 i& p, s) q& u        }
8 K7 S! O, X0 g4 ~. u}( G' k8 b& N  X9 t8 `+ d
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
8 z& M; d! B: H7 Iuser_rso.connect (my_nc);
5 m* a# b+ \9 U' e6 U4 q//建立摄相头和麦克风对象
: @4 y+ d5 V) P) d/ i+ t" {3 hthis.cam = Camera.get();! D7 z3 t# m: v  z$ f5 s
this.mic = Microphone.get();
7 a! x2 i+ _5 B. t" yvideobox.attachVideo(this.cam);
7 s) @5 l6 V) h1 evideobox.attachAudio(this.mic);
$ |2 U7 v& V% ~5 w2 J6 Y" psend_ns = new NetStream(my_nc);9 V3 D+ n6 _- M5 @! N9 w
send_ns.attachVideo(this.cam);
% x/ \$ \3 `- Q# _; R% Psend_ns.attachAudio(this.mic);* Y6 U" H' {, Y2 ~: D
send_ns.publish("humorguy");) _8 j6 P6 z' B4 }1 d
get_ns = new NetStream(my_nc);' y6 O4 M1 z% Z% @/ f2 J
get_ns.play("humorguy");( `5 Z% J4 h( i  b5 |6 G6 U
videobox2.attachVideo(get_ns);
7 c1 U. p7 B  H' R4 g& |//更新聊天内容# ^  h! |9 {$ r  \0 @* H' H" _
user_rso.onSync = function (){
0 x) ?( j7 W' a) B* G  ?( R                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;; w. C9 R% Y" }! I* L% _, ]( S+ B
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里5 r/ K$ |# V) Y- \9 `
}/ Q' f: ?* h+ @5 D* ?7 U9 @4 _% A
//回车键发送聊天内容; |  z& z5 ^: t( ]4 W3 N) N8 {. x- |
function myOnKeyDown() {3 M( u  g5 ~. `. M6 {% N: X
    if (Key.getCode() == 13) {
# ]. D3 {; X6 @. Q7 c& A                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){  W: b: F% W% q
                    Selection.setFocus(chatInput_txt);
! N+ w/ R3 }2 D# @  Q" ?                        user_rso.data.chatcontent = chatInput_txt.text;
4 T5 G7 Q3 \" G3 e6 k& G                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){1 O7 h0 `( t/ c7 M/ `+ T% T
                                user_rso.data.chatname = name_txt.text;* i( V, H# N: M; K1 u: C4 u
                                }
( ~" {  @4 ~, V                }
( R& x& k6 C. h/ b5 j! @4 ]" F8 H    }
7 j5 Q* `- l* V2 K) U; f}
. x. M4 L; g  G% ^% k6 f' h- e! yvar myListener:Object = new Object();
6 {& |0 K+ d. f1 p8 K# r" z9 RmyListener.onKeyDown = myOnKeyDown;) z+ |7 T  f9 ?7 A: l
Key.addListener(myListener);$ K2 {" N, x+ h7 o
//构造检测摄相头和麦克风状态的函数
- s. z# P- ?, \7 _9 U  t( ^2 A2 l/ \function checkforCam_Mic() {
7 V8 H2 m: k# w9 n% W        camArray = Camera.names;' u  L/ d8 ]9 ~* g1 J
        micArray = Microphone.names;
! J2 Q# O; q# W        if (camArray.length>=1) {! W  s& P! J' e. @
                temp_cam = Camera.get();
$ T, N8 h  x+ _- w                if (temp_cam == -1) {
; _6 T) D; @2 O, v! d, W; E                        camInfo_txt.text = '视频设备正忙!';0 {' w+ G/ J4 O1 j6 |7 U
                        camInfo_txt.textColor = 0xFFCC00;$ J% @4 R! f6 D# e1 Z+ I
                } else {
9 \( U6 n. p! f0 f* a                        camInfo_txt.text = '视频设备可用!';
  ~: v! }/ P6 I' r                        camInfo_txt.textColor = 0x66CC00;
. _& n! {. @8 L( j, X                }$ p, M1 @  Y$ h0 [9 w
                delete temp_cam;
2 i2 X4 g! |  u4 m' G6 m, D        } else if (camArray.length == 0) {
& T; s2 J# q( a! b) X                camInfo_txt.text = '没有视频设备!';
" @5 Q4 d, ?% A" }& `0 }: z& u                camInfo_txt.textColor = 0xFF0000;% ~7 }- d3 u: Z: T: Y4 B
        }2 k; I% q! X) U" \- P  `; g. |# G
        //检测麦克风状态
0 k" C; {. g3 T$ ^        if (micArray.length>=1) {& R1 h8 x# b: |! y5 T+ k
                temp_mic = Microphone.get();8 N: g" t/ Q+ e! g+ ?
                if (temp_mic == -1) {
/ P/ y& Y! [1 p4 b                        camInfo_txt2.text = '麦克风正忙!';: r$ u# v* l, A* q. N0 ?" R
                        camInfo_tx2t.textColor = 0xFFCC00;
  R2 A" ^* w' u5 x1 ^& u* Q                } else {% f! I; Q$ p0 [9 X( L0 f2 m! p
                        camInfo_txt2.text = '麦克风可用!';1 Q$ z% `$ O+ d) G
                        camInfo_txt2.textColor = 0x66CC00;, ?- L4 B- y: B: h
                }
+ t% E7 N! O) ?1 M. M0 C                delete mic_cam;
+ B2 F1 }  U, N' h; d' t- \        } else if (micArray.length == 0) {
! |) Y/ d) k) w) j; t                camInfo_txt2.text = '没有麦克风!';$ E0 r- [0 |( [7 W
                camInfo_txt2.textColor = 0xFF0000;
6 V& |! V: H+ Y6 [' M        }
/ [4 c. b$ q! d/ D/ i9 ?8 ], v}
1 ]/ _: i4 ?0 hcheckforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 04:13 , Processed in 0.034649 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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