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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
+ O# S0 h- ^- `. S" `" D8 O7 Fhttp://www.iphper.com/copstr+ [" Z& Q6 T, }1 I" t
光是留言板+在线涂鸦就几百行代码(看来效率低了点)" O$ r, F: P0 b. G" D1 d( |

7 J1 `* ?5 E2 Z1 B7 H1 |1 @$ O0 @& F7 U, t' |8 [( C
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
4 Z7 l- D( {  H0 R4 e
5 o/ t9 y. V: P* f4 j6 @6 p
! T  e9 T+ z" F" B. }
& E, z+ W" ~6 m' B9 |4 @- D- h//建立与服务器的连接.7 L6 u. k5 `# ?" J) U
var sv_uri:String = "rtmp:/recordstream";
5 Q. I: R  `5 R0 B1 K! S& evar my_nc:NetConnection = new NetConnection ();9 h7 c+ X! u. o  q1 J" l" r
my_nc.connect (sv_uri);
! Y* |! u3 [2 T7 k//新建共享对象;1 D* a3 z, ]" X& i0 @0 l
my_nc.onStatus = function (thisObj:Object){
6 y3 O, H! @: L        if (thisObj.code == "NetConnection.Connect.Success"){* N  r0 Z7 n% n( a. z; `8 s
                info_txt.text = "连接服务器成功!!";3 l" M6 `4 f8 S' _4 h' A9 M
                info_txt.textColor = 0x66CC00;' j/ d6 D( c( t5 I
        }% a5 f' I7 Z- a  f6 K
        else{
" B/ f' D; G! G                info_txt.text = "连接服务器失败!!"
1 [, y9 w5 x( ~6 q! s                info_txt.textColor = 0xFF0000;" o# Y2 ?& {- |; g! j( \
        }
+ q1 @( |/ v3 L}5 U1 }2 L/ ~" S/ b% W$ y- L
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);3 S+ i  K! h) ~0 m6 q! {
user_rso.connect (my_nc);
$ M- r6 l+ e7 n9 ?//建立摄相头和麦克风对象) I+ s: p# R0 C* V5 J/ N( n4 @
this.cam = Camera.get();0 s+ j/ c" ~+ G; E( t
this.mic = Microphone.get();- D" y$ e% `$ ~) N3 ~9 h; v$ G
videobox.attachVideo(this.cam);
  `3 q6 j% ~; \6 s! jvideobox.attachAudio(this.mic);4 r8 o8 l' H; M
send_ns = new NetStream(my_nc);1 }* L( Q& q. Q% `, X* S
send_ns.attachVideo(this.cam);( `/ I4 a- O! ?% m0 F9 y$ E# d
send_ns.attachAudio(this.mic);
& ]  g! E* f" A5 b- |7 Rsend_ns.publish("humorguy");
0 A% t" _1 S* u" q- d2 o1 t0 wget_ns = new NetStream(my_nc);
7 O& y: v1 ~2 H% Kget_ns.play("humorguy");
, t* [- z& Q7 a: wvideobox2.attachVideo(get_ns);2 R9 D4 ~% @0 k0 M9 Z+ A
//更新聊天内容
! j; {" |, F' C) ouser_rso.onSync = function (){" {+ C6 x3 D3 s, H, p' g4 _4 S$ v0 @
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
! T1 {8 R/ i' k                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
. g% M$ Z1 r; w( Q}! f: N0 Q! U8 M: @
//回车键发送聊天内容* ?) E- j: c+ P. t
function myOnKeyDown() {
9 f# x8 T( h; l' J$ w    if (Key.getCode() == 13) {/ {; d9 ]4 s, j
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
' \% r0 z5 ]/ u. w  f8 J/ Y% A                    Selection.setFocus(chatInput_txt);  L8 n( K( e( Q& H3 z  J# x
                        user_rso.data.chatcontent = chatInput_txt.text;/ T3 |1 c4 u1 w9 O
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
" O  i. I% E' T9 i; q$ S                                user_rso.data.chatname = name_txt.text;: r8 S! ?# Z% v0 k3 _6 ?& a7 W
                                }" B3 ^( Q, `" G  G
                }  m8 c  h, C, i! S8 P* H
    }
6 Z3 n8 ]4 u% ~! F}. y: Z- ~. g/ a, k9 [
var myListener:Object = new Object();; _( B9 ?+ I( P
myListener.onKeyDown = myOnKeyDown;3 w* b! Z& o; S7 x/ E0 A
Key.addListener(myListener);) R# g) ^  W. J( `' b4 {
//构造检测摄相头和麦克风状态的函数2 B4 W2 H5 @: x" H+ L
function checkforCam_Mic() {5 S8 y. F2 x8 v  L" r# y, `
        camArray = Camera.names;
5 c* J1 u  h+ ~$ K. h+ @        micArray = Microphone.names;6 J/ t! O* y' @) w3 V: H
        if (camArray.length>=1) {% ?) [* ?0 S8 U( u6 ^4 @6 Q/ \
                temp_cam = Camera.get();4 |3 A# z& H6 w  P5 ~
                if (temp_cam == -1) {
' D1 Z0 v: e! ?                        camInfo_txt.text = '视频设备正忙!';
% v" {9 s3 m$ {* X6 X                        camInfo_txt.textColor = 0xFFCC00;
* j: I- m8 i& ^- v4 g                } else {5 {  X& B1 }- w0 Z- w5 F
                        camInfo_txt.text = '视频设备可用!';
% a1 |' l  Q2 f# v                        camInfo_txt.textColor = 0x66CC00;
  H8 _; H/ Q  H8 b( D3 f1 w' r) \                }
5 f0 b% q. J% f" o* A* X                delete temp_cam;' f. P6 h0 ^/ ?4 u! j% y1 A
        } else if (camArray.length == 0) {7 w% S$ M7 ]3 X3 ]: x
                camInfo_txt.text = '没有视频设备!';) a0 Q( G, x8 K. ~7 Q# \/ V' a
                camInfo_txt.textColor = 0xFF0000;
) h$ u0 V# x4 W0 _/ w        }
  o9 I. e: v1 _) z; {$ h# `        //检测麦克风状态 4 y. [& `, G; d
        if (micArray.length>=1) {
9 |$ h' v: J' {- @! \8 m6 }' \                temp_mic = Microphone.get();$ |4 u. G6 G2 G: a% s# }: `
                if (temp_mic == -1) {  L1 d, M$ ?- r, q! {' m
                        camInfo_txt2.text = '麦克风正忙!';
) e( H4 T, ^3 m6 G7 K                        camInfo_tx2t.textColor = 0xFFCC00;) \% z; a, U: ~1 k4 i
                } else {
6 \: D- T! c; u4 @* i                        camInfo_txt2.text = '麦克风可用!';
. J5 L9 ?+ ?4 s9 y+ [2 s                        camInfo_txt2.textColor = 0x66CC00;
; R" k. j" ?2 H8 z$ F                }4 |( H  k: |2 [! z5 w( `3 i% j
                delete mic_cam;
; ?5 u2 I# i/ G3 e/ K2 U3 }$ Y        } else if (micArray.length == 0) {
& z: v8 r" z2 `2 r. j                camInfo_txt2.text = '没有麦克风!';& i/ B1 h/ Q0 K* X+ }# {2 P, L5 U* ~
                camInfo_txt2.textColor = 0xFF0000;4 n/ b( C8 _% O" K2 p8 _& r& \
        }
( M4 r  T+ \6 _}7 ~% u1 M2 U5 P7 l1 E( W3 t/ Z
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-29 22:19 , Processed in 0.019477 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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