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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..0 A8 A6 R: ]. j
http://www.iphper.com/copstr* _$ ^; R3 i- \# s
光是留言板+在线涂鸦就几百行代码(看来效率低了点)- B+ c3 j2 p: \( u  w4 n6 f% \; b+ ?. l

% O3 ]$ o$ A+ U# d. t5 B
- z$ @2 K: ^0 U7 q1 Z8 ^1 NFMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
; T$ a! o7 q4 ^" n% E( |3 y. I% V9 V5 `  u! f9 t9 D- _' r# @) Q

" ~8 G3 b: g( N( X) S8 L/ F) O- y* {
) |( ]8 `: G/ k; B* l4 n//建立与服务器的连接.
! Q  d7 Y; |6 W: L. \7 Y& _  P- M2 tvar sv_uri:String = "rtmp:/recordstream";
* e' a9 F7 j8 I* L2 Kvar my_nc:NetConnection = new NetConnection ();7 D% Q4 J  \  u- N6 B
my_nc.connect (sv_uri);/ U' A' ]  n+ [3 o/ P7 ]
//新建共享对象;; I5 Y4 W" Z6 I' G9 q1 ?
my_nc.onStatus = function (thisObj:Object){  s5 T7 U3 u1 J: w
        if (thisObj.code == "NetConnection.Connect.Success"){8 \% V+ J" \% i: y! t
                info_txt.text = "连接服务器成功!!";
1 V+ G! {& |: f# {                info_txt.textColor = 0x66CC00;# y( k+ R' h. _# ]
        }
- K$ [5 [# S. v( F, f' I, U. j! O7 B        else{0 L" g+ s# |+ H: r
                info_txt.text = "连接服务器失败!!"# c$ I# x$ u  r: @) \, K) k, }
                info_txt.textColor = 0xFF0000;
  O! l, z" ]. O. G/ J$ a* g        }
9 \) F# G8 J( b% D) W6 M6 E}  e# D  ^$ g( [) s
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
" Q6 T9 }2 q4 N; m! b0 l( B' Ruser_rso.connect (my_nc);
& g  c* D+ x  }" U/ ^//建立摄相头和麦克风对象# L. @- m- P- s' z' q( w5 z
this.cam = Camera.get();' w( R/ M( Z2 _6 t2 D# E6 E
this.mic = Microphone.get();1 E: V! ?" i, u! [
videobox.attachVideo(this.cam);  s6 t4 ~" l& ?+ G2 b8 _1 _7 z
videobox.attachAudio(this.mic);- R  i0 t6 H! G5 j! `& P6 J, s* ~
send_ns = new NetStream(my_nc);' E* n, Y( U0 ?* W. `) Q
send_ns.attachVideo(this.cam);
& j; w; u( y% N$ Fsend_ns.attachAudio(this.mic);
6 v9 J; K& S$ @8 n. P6 n5 Ssend_ns.publish("humorguy");
' _- h- u# {7 f7 m/ R% yget_ns = new NetStream(my_nc);
! p7 s8 W! f2 N5 Yget_ns.play("humorguy");
4 A1 A( R: t, D! _videobox2.attachVideo(get_ns);
3 V* u. V. U  x0 [; Z//更新聊天内容3 X7 P" p5 P0 \. Q
user_rso.onSync = function (){
1 L. X8 p- W4 c8 X* W2 D6 R                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;2 {8 j4 ?; O' n
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里/ f7 g/ R, n) U8 ^/ @0 y) {8 S
}
$ v& }5 j2 k, Q  p( O0 g' b//回车键发送聊天内容  l' U6 Q4 [; n/ [1 @$ A4 x! Z
function myOnKeyDown() {2 a0 v3 d7 B/ k  `" {+ C, v
    if (Key.getCode() == 13) {
3 M- E0 t9 F7 A: s                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
' }; o( v  Z& X' n1 W  x  v, C/ |                    Selection.setFocus(chatInput_txt);
  X" {- L: Q: T/ l& y! k1 k                        user_rso.data.chatcontent = chatInput_txt.text;! ~  k# d/ c" e" q6 z
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
7 `' f5 F" W+ Y: z                                user_rso.data.chatname = name_txt.text;
6 t/ A/ q+ ?! B) H& g                                }' r1 d7 i% m# {8 ^. A$ u( m
                }; m. O! V+ u/ o7 p. q
    }: A4 ]* p" s" d
}  n  o1 Z: b$ o1 x. {- s! p* H
var myListener:Object = new Object();* P# g. Y" n4 z4 f. P2 E
myListener.onKeyDown = myOnKeyDown;
+ ~$ }! t4 r% m& o- [4 j  P: _; fKey.addListener(myListener);+ O0 @4 S1 Y9 R$ L" j; e
//构造检测摄相头和麦克风状态的函数
, T- c# F6 z5 [, L; ifunction checkforCam_Mic() {/ I: s& g# j0 F( L
        camArray = Camera.names;' R" x; P: H" m" L$ w6 q0 K
        micArray = Microphone.names;  S5 `' q5 O4 m, s
        if (camArray.length>=1) {
$ r/ y4 K) d) ?3 M+ G  E$ w                temp_cam = Camera.get();
$ V1 }' D! Y) v* l8 N. e                if (temp_cam == -1) {
5 Y2 ^. }( v* Q, {                        camInfo_txt.text = '视频设备正忙!';* N+ A8 ?5 r. O: ]
                        camInfo_txt.textColor = 0xFFCC00;& K- y8 k0 |0 r7 F5 }9 }) C
                } else {7 S/ Y0 e/ Z) I2 ~, e
                        camInfo_txt.text = '视频设备可用!';# a2 b: w$ p3 m: f. p
                        camInfo_txt.textColor = 0x66CC00;9 o6 J, r. [( [+ ]
                }7 `: \5 ?6 T6 O+ p- k3 G, A3 \0 l
                delete temp_cam;7 d& k7 w+ \  f+ Q
        } else if (camArray.length == 0) {
( X  g2 s! T2 h8 A1 _6 H                camInfo_txt.text = '没有视频设备!';
9 W% a5 x, z' A: T" I4 O                camInfo_txt.textColor = 0xFF0000;
, ]9 j2 x' w9 T/ K) G' l1 x) N) E        }
1 E4 L5 \' u+ j2 \5 X        //检测麦克风状态
* K- q) X; z5 o        if (micArray.length>=1) {: ~  B* k+ p! Y
                temp_mic = Microphone.get();7 s* i( i; ]( ~0 y# {9 ^0 ^
                if (temp_mic == -1) {5 s" `# V9 k% U, ^, {: g5 E
                        camInfo_txt2.text = '麦克风正忙!';5 C! S' \3 D4 v# l9 ]3 A0 n
                        camInfo_tx2t.textColor = 0xFFCC00;
! E( F, Z6 U* L% Q; [8 W' C                } else {
8 u  L' d5 G: k; A& M                        camInfo_txt2.text = '麦克风可用!';
1 q" h9 w4 h. J+ F' e7 I- }                        camInfo_txt2.textColor = 0x66CC00;7 o: }4 `+ r" z! h4 b$ M' G' w1 v
                }
6 }  e! w) U# P                delete mic_cam;
5 N: y. _: s" U: }: g* t1 T  s        } else if (micArray.length == 0) {% x. h/ a1 H! M! h0 O  J% B
                camInfo_txt2.text = '没有麦克风!';: u5 x- u0 S. e- @5 M9 O  L; b
                camInfo_txt2.textColor = 0xFF0000;* d9 L* Y2 A2 E
        }" {& L$ N: E( _  q5 |2 Q; I5 K2 o- Q
}, }4 q1 C7 h4 J3 R( i2 [
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-30 02:56 , Processed in 0.017549 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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