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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..& g( W+ ^" i& K
http://www.iphper.com/copstr
1 n0 I) B3 q& Q' B  q光是留言板+在线涂鸦就几百行代码(看来效率低了点)) v2 b5 s0 i" ^+ n
7 X7 a5 }* M: z* f4 w' c) V: _

5 q# r# V% M8 c5 \+ |$ v- V" P( QFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了4 i( `2 v$ H0 ~% E8 j

/ z) \( P$ v; u* n1 t
1 I- _8 s& u, F: p8 \
% R+ m$ d* }& v: E7 v//建立与服务器的连接.
2 J; ^4 m1 ?( q7 _& ~( A0 uvar sv_uri:String = "rtmp:/recordstream";
$ i# o9 F, n6 vvar my_nc:NetConnection = new NetConnection ();, i# D6 x6 j% N  Q$ I  E- k
my_nc.connect (sv_uri);& e3 q1 @6 y& e3 I" F
//新建共享对象;, i! U+ I8 o( i/ v; k
my_nc.onStatus = function (thisObj:Object){  [6 W3 v7 g, ]+ y" ^+ Z, A
        if (thisObj.code == "NetConnection.Connect.Success"){
' `! ]0 I, Q! P" U5 {$ i1 t  A7 I$ H* \5 }                info_txt.text = "连接服务器成功!!";
. f# x' m1 V# q; ]/ I; |                info_txt.textColor = 0x66CC00;
% S3 H" S% n$ e2 c) P# y8 {8 J) d        }+ `( y1 h  q  _
        else{
" T) j% t1 X+ B8 `" O3 s                info_txt.text = "连接服务器失败!!"/ i% N- m) @& T; g5 y! ^& \
                info_txt.textColor = 0xFF0000;
! ^# m/ B- b, X( C# g+ S5 E        }
3 U3 P0 P0 Z$ B+ D0 G}
" x1 Z3 O. e; v; N4 ^var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);$ m1 {# G! F: [4 @* W5 g
user_rso.connect (my_nc);( R7 A; d! H! u: {: _4 ]
//建立摄相头和麦克风对象
6 P6 q( z1 t2 Y! |' J  Rthis.cam = Camera.get();
2 C# W/ O; O* L* i5 zthis.mic = Microphone.get();
& s, X8 l2 {4 m, nvideobox.attachVideo(this.cam);, H4 U4 F. w1 K* x$ g$ j0 T& {
videobox.attachAudio(this.mic);
3 l/ ?0 H" E$ Isend_ns = new NetStream(my_nc);, C1 P. |) s8 d2 V9 m
send_ns.attachVideo(this.cam);
+ b3 o, j) M3 S# V. m1 a- z0 Csend_ns.attachAudio(this.mic);
9 ?" ~0 t! g( `1 k) ~8 asend_ns.publish("humorguy");
7 N4 z6 M+ d) @get_ns = new NetStream(my_nc);+ Y- G& J* ~! V! j9 B
get_ns.play("humorguy");4 A) b' v7 r' a% ?" l
videobox2.attachVideo(get_ns);( A6 B0 ?4 d' W0 ]9 {$ j1 e+ p' n4 O6 y- D
//更新聊天内容2 P5 @3 V: y: N
user_rso.onSync = function (){
6 R* |% N- D' ~, e4 o4 A                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;. }! f4 e$ X6 I4 e: v4 L3 D6 g
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里1 L1 g7 {6 ^+ s
}2 _5 |7 L8 F2 O: b
//回车键发送聊天内容
4 A& H  O% f* t/ Q4 W0 c/ j4 [function myOnKeyDown() {
+ S( W( g5 l/ r2 S$ G1 r    if (Key.getCode() == 13) {" T" x7 b, O2 P8 n9 G' c
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
& y" J7 Q( M) y                    Selection.setFocus(chatInput_txt);4 z4 i; W5 m1 i& H' X
                        user_rso.data.chatcontent = chatInput_txt.text;
3 f; s8 M  w7 m, Z( P; X                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){3 Z' R4 y- v! y
                                user_rso.data.chatname = name_txt.text;" V3 m9 m$ d2 ^' `, P0 R4 K
                                }6 `  F/ q- P; @  U& A' F
                }! z3 `2 E% i2 F, H9 H
    }' k5 `- S; ~# v1 N/ ~
}, X# _! a1 e: p$ N( V
var myListener:Object = new Object();
  J1 ~0 b& [( R& S; YmyListener.onKeyDown = myOnKeyDown;* o; b" K# @, n( s1 m; ]" t- h: i
Key.addListener(myListener);& t! ]% X9 ]0 a6 p1 u+ W6 [
//构造检测摄相头和麦克风状态的函数
9 r) _" H, k" d( C6 @3 jfunction checkforCam_Mic() {
: P/ }% O+ Q' }" @$ J7 q% Q        camArray = Camera.names;+ j& S& M+ g5 f% }1 V
        micArray = Microphone.names;
; G! j( V7 Y: o# f        if (camArray.length>=1) {6 B* L: g9 b$ g: l& d, T
                temp_cam = Camera.get();
$ m, R7 m# ^2 V! ^/ v                if (temp_cam == -1) {
1 g# J7 E- ?* b( a! Z                        camInfo_txt.text = '视频设备正忙!';9 u  z* w6 J  v
                        camInfo_txt.textColor = 0xFFCC00;, g& G1 W. P( m' o; x
                } else {9 K) ^- l! r5 S7 Q
                        camInfo_txt.text = '视频设备可用!';. x& p4 ^, f4 R" b, {0 r4 E
                        camInfo_txt.textColor = 0x66CC00;/ z0 x( r: `. r# H4 X# l: d
                }. f( p# H4 l; P1 Q' F1 M* \8 K
                delete temp_cam;7 p9 m$ }! ?  D8 Q$ ~6 h
        } else if (camArray.length == 0) {
7 w! ^& e- X0 l, I' {5 n: z                camInfo_txt.text = '没有视频设备!';8 |' H: T. m$ A2 @1 Z2 N
                camInfo_txt.textColor = 0xFF0000;
# E! }1 O; x% S$ H2 M" R7 |        }
% C# G% ?# I! t* K5 \) V        //检测麦克风状态 3 ~) I) E! \8 {6 ?5 B) H
        if (micArray.length>=1) {
' x6 y; R' U5 S. ~: Y8 k; t  a5 |$ b( W/ \                temp_mic = Microphone.get();. _& c6 ~' W' ^  V7 H4 I
                if (temp_mic == -1) {! E; U4 u9 {# y" `
                        camInfo_txt2.text = '麦克风正忙!';
  U1 G$ o8 ~& i& H3 W& y3 {                        camInfo_tx2t.textColor = 0xFFCC00;0 ~3 }$ H. B. z7 O5 R( V. b
                } else {- O' p$ Z; ?8 g' c% l; Q
                        camInfo_txt2.text = '麦克风可用!';6 ^* k) m; _0 ^1 n" V& z
                        camInfo_txt2.textColor = 0x66CC00;% x2 D- z' c' S; W$ }. f* C8 q* x
                }$ L. a. ?; y8 J, N
                delete mic_cam;
% o% Q! k7 ?1 a9 L# h, q        } else if (micArray.length == 0) {
8 U; g9 h' F* m# y# [5 M8 m9 y, E% J" \                camInfo_txt2.text = '没有麦克风!';
- R0 X, X2 ^1 S. x* i9 r                camInfo_txt2.textColor = 0xFF0000;5 M3 @0 V$ L# z
        }
0 l: R  ~- R8 g. I6 v}6 f4 s; G& q" V, G, i$ v5 ^
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 07:40 , Processed in 0.032601 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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