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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
- T# u' C* c/ ?# n+ x# m: g/ @http://www.iphper.com/copstr
+ C+ P: M: @! k8 [$ `% z- u光是留言板+在线涂鸦就几百行代码(看来效率低了点)
" Y* A: b3 R3 v" n1 s0 |( ^) p# O. R1 d/ A4 u% p% X
7 L4 k, W( W: x
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
/ u  }, x6 i! J- T3 C) q$ s* h
* ]' _' Q9 ^4 P. h9 [
% c; |4 A0 P$ @* E$ L! b
% E/ Q' O4 g* v( n$ D: Q) ~//建立与服务器的连接.
7 u0 O7 F8 j! s! G& Q# Lvar sv_uri:String = "rtmp:/recordstream";
. i' Z3 k; e* ^& h$ v' g* R' Dvar my_nc:NetConnection = new NetConnection ();: R7 Z' r) X* w/ B
my_nc.connect (sv_uri);
' j- W, n% h+ H' H  H//新建共享对象;* A8 ]. e  ]% t) Y" W4 q+ T
my_nc.onStatus = function (thisObj:Object){
9 e: }/ q5 n0 I' s        if (thisObj.code == "NetConnection.Connect.Success"){
# t( q9 B- A% Z' Q                info_txt.text = "连接服务器成功!!";) Q1 k; B  s! C8 a. _! {
                info_txt.textColor = 0x66CC00;
3 m: D& I, q" {1 T        }0 L9 U  G) X  S) D7 ?( Y- b
        else{/ E5 ~& Z5 g7 `" D4 ~
                info_txt.text = "连接服务器失败!!"4 W* U1 o% |" S; ]
                info_txt.textColor = 0xFF0000;
, I. k* g! n# ]- g        }2 S9 n9 Z  `. m/ R4 Z8 S) |
}
$ T+ M# G. @$ o- mvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);2 `; }" ~+ t4 J! C) U. o7 g
user_rso.connect (my_nc);
2 Q- }0 g* ~. L7 l. a//建立摄相头和麦克风对象
% r# C; Q* U% K9 u4 G$ A' Kthis.cam = Camera.get();; [6 W' N# Y4 d' b' }
this.mic = Microphone.get();
/ N7 I  d( p# x* E+ E  Nvideobox.attachVideo(this.cam);0 s! d$ v% q/ E+ P0 R& C
videobox.attachAudio(this.mic);
1 q7 C. S5 j; t1 U2 M- z2 esend_ns = new NetStream(my_nc);* M  P) E2 R: c' W
send_ns.attachVideo(this.cam);$ b0 W; }2 M. x" `" t- O  q
send_ns.attachAudio(this.mic);) Y$ p2 m1 F/ U( u, ^. ^* {
send_ns.publish("humorguy");9 ]7 K3 c  T2 g* h! w
get_ns = new NetStream(my_nc);
9 x& |: L' K1 `0 g- _9 C+ ]get_ns.play("humorguy");
! |8 d- m! _) N0 C8 Tvideobox2.attachVideo(get_ns);
9 d6 I- E( O' Z1 g//更新聊天内容$ C( X6 @0 l9 p: B- n2 H2 `
user_rso.onSync = function (){
) J0 W" B" k  [" J: A                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;3 q; E- ~3 Z. c& ^, t
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里! g: E; U- o+ G1 o0 J) p: S
}
8 G9 o& d5 q% r: u+ o2 W3 i3 J/ h5 }- b//回车键发送聊天内容
5 f  l# ~" d) S' i. m* t9 ~function myOnKeyDown() {8 P% c( ~8 z8 v5 U8 ]' f- a
    if (Key.getCode() == 13) {
/ u2 l! U- V& J                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){9 d3 u" m$ x& w" g
                    Selection.setFocus(chatInput_txt);
  D! v: ~8 L) {" Q- e                        user_rso.data.chatcontent = chatInput_txt.text;
  i5 J6 r& g2 l- n                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
# M  [2 H; n2 m  R                                user_rso.data.chatname = name_txt.text;# s7 ^! ~+ _8 F# m$ K0 R$ l
                                }" |, g$ H1 h  {: T% [3 o  F# d9 B
                }
# F: ~+ v4 K2 w* X9 W    }
: a- l3 V2 ?% |. ]}
; U) U  a" T" |. H& svar myListener:Object = new Object();
$ m! N6 U! y; L2 Y8 ]' J! @* ymyListener.onKeyDown = myOnKeyDown;4 D! E5 I+ v: e1 s
Key.addListener(myListener);, W4 e# n  G% ~' ^0 K- `
//构造检测摄相头和麦克风状态的函数" F$ R6 I$ G& L$ c% z
function checkforCam_Mic() {
3 y! n4 q! R7 J/ Y9 ?        camArray = Camera.names;$ N/ L5 e+ R# h# }- s; @4 D- F
        micArray = Microphone.names;
% _$ C! I; U' P        if (camArray.length>=1) {
  h- X- V% [! A* p                temp_cam = Camera.get();
6 Y* {( y0 o2 E; U' }+ ?, h                if (temp_cam == -1) {* i. ]$ @, x( T; i
                        camInfo_txt.text = '视频设备正忙!';
0 |7 x7 f5 u! O' u. \1 A+ ]                        camInfo_txt.textColor = 0xFFCC00;
8 j, ]/ q/ \. {& W0 R/ q                } else {
% N. R5 I% o% T0 C: k  m) g                        camInfo_txt.text = '视频设备可用!';
# b5 X' P- ^. _7 Y+ U. h2 ]: p5 f6 N                        camInfo_txt.textColor = 0x66CC00;
* A% H7 q( e) H: {; k/ `                }
7 I: e3 Y! U7 q/ w6 w; H% M                delete temp_cam;. Q0 @. H% f; H3 V! C1 U
        } else if (camArray.length == 0) {# G4 Q# Q; L* a9 g) q8 \1 ~0 o1 d$ ]
                camInfo_txt.text = '没有视频设备!';0 B+ G" R' D" C( ?* e
                camInfo_txt.textColor = 0xFF0000;( }2 X4 y+ R2 h
        }
/ I2 l) L; ~- [& J  i  R) _4 b& a        //检测麦克风状态
; }4 K2 J7 W+ x9 i! \% O; _        if (micArray.length>=1) {4 d" ^" I4 i9 p% ~& z7 b
                temp_mic = Microphone.get();
) D* i% d0 Q5 o; k6 w2 Q- L                if (temp_mic == -1) {9 C  Q4 B9 y0 G" c/ Y1 {; r4 k5 ^
                        camInfo_txt2.text = '麦克风正忙!';" h* \/ X2 G4 e
                        camInfo_tx2t.textColor = 0xFFCC00;8 V% y$ r. g* V" g) L5 {% g% m
                } else {
# ?8 O- h; P) a6 f- F9 L                        camInfo_txt2.text = '麦克风可用!';4 w, g3 S# N) Z4 r
                        camInfo_txt2.textColor = 0x66CC00;
) F7 b! C* k' Q3 e' l& E3 A8 V                }5 j7 [* Y* Q) T  q, H- y
                delete mic_cam;
( y0 v, J* h( j4 [1 E        } else if (micArray.length == 0) {0 R/ C- O0 w& S( p
                camInfo_txt2.text = '没有麦克风!';
8 k# y2 l/ U( s7 o) \. D' E                camInfo_txt2.textColor = 0xFF0000;6 u: g& k9 O5 X: r0 ]! \
        }
7 G. P- @/ ]! ~2 n: y) b8 z; T+ v}; w; S9 {2 s3 h
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-19 11:08 , Processed in 0.014787 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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