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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
9 H( S5 N+ |% {; d- x0 h3 r2 Z& ihttp://www.iphper.com/copstr, Z# C# V. I' f( N7 V$ b
光是留言板+在线涂鸦就几百行代码(看来效率低了点)! K; E2 r9 [* \

2 p, o4 l3 U8 L/ B) a8 U$ s7 h$ T2 x, l1 D4 E) D* u/ J; W- U
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
# S' M! [& |: c% _4 v* K3 a5 M( n2 T7 H) T( D- R
5 I6 L0 p- W2 [
' a: M+ i4 H( |
//建立与服务器的连接.
+ c7 E4 q8 L5 \+ Uvar sv_uri:String = "rtmp:/recordstream";  K0 p/ n( x! A* P. `& V$ q
var my_nc:NetConnection = new NetConnection ();
$ f7 J, `; N- d7 x- y4 ^7 s, xmy_nc.connect (sv_uri);
6 w0 S' p; e6 y//新建共享对象;
/ k% }0 F( P' z7 i9 o9 Qmy_nc.onStatus = function (thisObj:Object){' a9 @- w9 P2 H0 Y* V6 B* c
        if (thisObj.code == "NetConnection.Connect.Success"){
" I  f5 u. o- b+ \+ g( M                info_txt.text = "连接服务器成功!!";4 R9 |8 |2 Q+ S8 |, a0 n& Z
                info_txt.textColor = 0x66CC00;  x, ^/ R- Z% |5 P( J( W1 {  t8 O& }
        }
' ?2 g- b0 g! L: @9 ]3 j. ^0 ?        else{
- ?1 u- ]* `$ c$ j                info_txt.text = "连接服务器失败!!"
, m& P$ H: j0 \+ j6 S( ~9 n3 o: {                info_txt.textColor = 0xFF0000;) A$ O/ m& ?6 ?$ r' V4 H6 i1 [" w
        }5 T4 A4 R$ w7 n0 x% X) J
}
+ M5 i: H+ }* [7 g6 c% d! gvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
# {) W9 |8 g6 |3 kuser_rso.connect (my_nc);
  H" g% Z$ T) j5 x+ m//建立摄相头和麦克风对象2 p( ^2 a. C5 c+ G7 @7 t8 J
this.cam = Camera.get();
4 \) B- t* f7 s' K1 Y1 Z8 |2 Tthis.mic = Microphone.get();' i, P3 P8 l, h, F6 c
videobox.attachVideo(this.cam);
6 e8 w: d; o& {videobox.attachAudio(this.mic);+ t5 Q& ]( E3 b9 s  e: L+ \
send_ns = new NetStream(my_nc);! V- S; p7 V, \& {4 T% B% @3 e
send_ns.attachVideo(this.cam);
, O' J1 P" ]& b; b& H! c3 f7 Qsend_ns.attachAudio(this.mic);
3 Z3 l# G+ g% v* m2 ]: r' csend_ns.publish("humorguy");
4 z7 _* o$ w% v: V. dget_ns = new NetStream(my_nc);
" I2 G" a0 j5 ?8 Iget_ns.play("humorguy");& r7 {2 R% z7 s5 U. [/ b
videobox2.attachVideo(get_ns);( G  v8 p& H1 p0 g2 d; L; t6 x" q
//更新聊天内容6 s& {( ~- i% [: L, S; H- Y
user_rso.onSync = function (){4 x+ Y+ f. x, }
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;# A4 v0 r! Y  D2 {7 J; d
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里% T. ~. t. S; d/ c* ?
}; Q- t" K/ v+ S$ B$ L
//回车键发送聊天内容
. F4 j7 T) m: hfunction myOnKeyDown() {$ E" q5 p( q1 {" o1 P
    if (Key.getCode() == 13) {
: ]8 i; i1 p3 a$ b) r                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
2 ?5 L  f. T; d                    Selection.setFocus(chatInput_txt);" ^" E2 M# ~  t" t
                        user_rso.data.chatcontent = chatInput_txt.text;
2 [& ?2 @, q0 N- K, Y) e& h                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
1 c! U- s' K1 U/ d. m6 h                                user_rso.data.chatname = name_txt.text;
$ ^# @- r( e9 _  m                                }4 h2 E  u9 s/ ~+ t& D7 @
                }5 m# r9 ], X! W1 V
    }3 ^5 D- L- ?- z5 ^9 l4 Q5 j/ ^
}* a6 ?1 h" ^1 N3 i- U- Y
var myListener:Object = new Object();
0 b& o' Y5 q% _! q  O0 [myListener.onKeyDown = myOnKeyDown;
1 P% p% J8 g/ V5 @1 J# vKey.addListener(myListener);/ Q% p3 K/ V* L& |
//构造检测摄相头和麦克风状态的函数  P% C) ?6 V6 [5 E. w5 S2 Z$ d
function checkforCam_Mic() {4 p! X' z; @8 c1 l* w
        camArray = Camera.names;! n, @2 o  Q0 r
        micArray = Microphone.names;
$ h8 o& a7 R1 \/ o        if (camArray.length>=1) {5 D+ j' Y- W4 u* F
                temp_cam = Camera.get();
- V9 J# r( C1 D; _: I                if (temp_cam == -1) {
+ Z# G( |+ x& L1 J6 @                        camInfo_txt.text = '视频设备正忙!';
9 l6 D" \) V; Z' ?, J+ }) r                        camInfo_txt.textColor = 0xFFCC00;5 X% P7 z% K! a6 t
                } else {
7 I( b" o+ e6 S  C- T- K/ I: `                        camInfo_txt.text = '视频设备可用!';2 E- m( z6 n. s! T
                        camInfo_txt.textColor = 0x66CC00;
5 o* }( k' M+ r! \3 E4 J; m                }3 E9 r# L; m' m8 C
                delete temp_cam;
5 u0 S7 `, {) h0 A, p% k        } else if (camArray.length == 0) {) S. X- z: S: p* S$ I  W
                camInfo_txt.text = '没有视频设备!';, Y0 i1 H! x9 I, ~
                camInfo_txt.textColor = 0xFF0000;# \7 D, W! a% I( ?2 _
        }4 b; X  L6 p% ]* g# H
        //检测麦克风状态
2 [2 |( ], V" {+ u/ H7 Z7 l2 \        if (micArray.length>=1) {
6 _- o# T, V* [3 Q' Y                temp_mic = Microphone.get();
6 l, U4 G- j! T                if (temp_mic == -1) {
" s: ]5 c0 N1 W: b" b( k6 X                        camInfo_txt2.text = '麦克风正忙!';+ R8 W- K- K8 h. n/ J
                        camInfo_tx2t.textColor = 0xFFCC00;" G$ t0 z# w& s9 ^& i
                } else {
$ \* v0 E( m0 ?0 O+ ~5 U! U- D                        camInfo_txt2.text = '麦克风可用!';
, M# X, |/ F2 N7 z3 N                        camInfo_txt2.textColor = 0x66CC00;( N( z4 [% }. S
                }9 ]  ]6 g" u! P" ~% H9 o: |
                delete mic_cam;8 W+ d+ p/ `9 F3 |! A0 {
        } else if (micArray.length == 0) {
- L+ n# |- ~+ w- W) I( _                camInfo_txt2.text = '没有麦克风!';
! M- o! }- Z9 y: _6 c& k# g                camInfo_txt2.textColor = 0xFF0000;! u- c6 c1 f7 ~8 T5 X5 S
        }* S6 Q8 s! }( `) L$ s" @/ s1 i4 {
}5 b' q0 u+ ^9 [7 N5 P
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-8 20:15 , Processed in 0.034057 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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