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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..% _% Z3 I, P/ G- P; o3 Z9 ]
http://www.iphper.com/copstr/ ~, E, L* L8 d: q6 Z$ s$ x; ]- X
光是留言板+在线涂鸦就几百行代码(看来效率低了点)( X4 w/ w& C' ]9 A3 h( j3 U
) {9 F. S$ y" F7 @) M4 r0 {7 s

& k. N$ D2 s* {+ n& _FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
7 b( [& P5 i+ a# r  x1 B- _. q% [: K5 H% X. J  b$ Q9 t- t# K. p
3 I$ k2 W! P' k% g  k
& D  M- a# U: u7 l6 o" n, b
//建立与服务器的连接.; }) R1 C0 A: C# ~. H
var sv_uri:String = "rtmp:/recordstream";) g6 Q9 o1 w1 ~& l5 [
var my_nc:NetConnection = new NetConnection ();
2 L( V9 R. j! f& Kmy_nc.connect (sv_uri);
9 R$ a/ ~3 G; H, @/ [. m' P//新建共享对象;, c* y! @4 t: [! `/ f9 C
my_nc.onStatus = function (thisObj:Object){
3 m" K$ b' v/ ?+ a8 a$ q: {  B6 g% I        if (thisObj.code == "NetConnection.Connect.Success"){
: {* F; ~0 ^+ U9 e. |! b, K                info_txt.text = "连接服务器成功!!";2 T* h% s$ t5 X- M; ?. j' p
                info_txt.textColor = 0x66CC00;$ b) O+ x7 V; A4 e
        }
3 p) h, h) J+ H; a        else{6 C0 B, Q! Z) f5 G! W& T4 W/ Z# L0 n
                info_txt.text = "连接服务器失败!!"" h8 @/ X( I) C
                info_txt.textColor = 0xFF0000;
" d& c8 ~' ?, {1 \! y- P        }
& `& c- ^' W1 J8 j' F5 N: w}; a4 y. A  c: |+ N5 Y, G% D5 M: i1 Y
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
8 h- x( I+ P, e8 ruser_rso.connect (my_nc);* q  S2 C* w8 J
//建立摄相头和麦克风对象" m/ [1 R; w! M- [4 j) v+ y2 \
this.cam = Camera.get();
) C; [7 A3 `; Vthis.mic = Microphone.get();& M3 w$ g( m4 N/ @1 H, T. u- t
videobox.attachVideo(this.cam);' w' s, L# D7 _9 x) y3 x% e; j7 N4 f7 f
videobox.attachAudio(this.mic);( K1 j, K. i, G5 W( l- |1 q; _) d( z
send_ns = new NetStream(my_nc);, s1 l% e- z5 a
send_ns.attachVideo(this.cam);
' m2 A6 @1 Z1 @! u# Dsend_ns.attachAudio(this.mic);
8 K+ r3 G4 o5 b3 S/ Hsend_ns.publish("humorguy");
6 @6 ^: q+ B% e( ^get_ns = new NetStream(my_nc);
! T/ U2 }) T. J0 dget_ns.play("humorguy");9 R6 n3 n4 l$ |0 m# [
videobox2.attachVideo(get_ns);4 R( @5 u4 O4 {5 P6 ]* H
//更新聊天内容
2 v& P0 P& m! U; q4 L7 zuser_rso.onSync = function (){
& I0 i# B6 f' G' O                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;/ s  z. ?" O- |; g- D6 @
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里  ~; N# K3 A& i9 L. c, {1 |  j
}
2 F! p  I2 X5 M, k" B" c//回车键发送聊天内容1 [$ X- o$ V% @8 L3 n  P
function myOnKeyDown() {2 U1 k( a* G. K! M. n$ n- I" {0 ^( S# V
    if (Key.getCode() == 13) {
: D! v# u+ Y& y+ m* k2 J& s                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
$ K- b& N; U5 F& y                    Selection.setFocus(chatInput_txt);
6 R. N& F# o% z3 e' [$ {4 E5 K                        user_rso.data.chatcontent = chatInput_txt.text;6 o1 q4 G9 L, [. \' o8 _
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
. y+ J6 q8 |/ t. F& r                                user_rso.data.chatname = name_txt.text;* C9 `5 A$ P. I
                                }! K8 d$ y) `+ }. H2 b
                }
/ |1 N) Q: L' q5 d. o2 ~1 d    }
% \7 K, n) p- {! q* u) {}
( f+ y5 c6 ]3 w% D% z6 F' ovar myListener:Object = new Object();* \3 w5 l4 `4 o6 b* k5 r
myListener.onKeyDown = myOnKeyDown;4 d  E  f" n( C
Key.addListener(myListener);
5 l$ a; r, {  d! a: V9 \/ P2 Q//构造检测摄相头和麦克风状态的函数' B0 [8 p2 a. G0 _4 P6 i
function checkforCam_Mic() {
$ `/ Z2 Y% i0 {/ N9 a  ~        camArray = Camera.names;9 `  |) C  e/ @7 U% Y' ~
        micArray = Microphone.names;
: W6 @. c* W6 T$ J3 A& Y: u, \1 f$ Z        if (camArray.length>=1) {- Y/ Z( L! Z* V
                temp_cam = Camera.get();
3 ?) v4 E) v: z% F$ I                if (temp_cam == -1) {
( w7 N. P/ C+ {: f9 U! f0 J! e                        camInfo_txt.text = '视频设备正忙!';; u1 W$ V' u0 ~1 B7 k8 ~
                        camInfo_txt.textColor = 0xFFCC00;2 {1 s8 `' t5 F* j- z! Y# o$ N
                } else {8 Z  L. }1 C& c5 w! ]7 U. w
                        camInfo_txt.text = '视频设备可用!';+ @' i  ?% C9 ?5 f* Z% U9 O/ H, p3 }
                        camInfo_txt.textColor = 0x66CC00;% }2 ^3 s) a6 e; M" U4 x
                }
& M8 I+ v2 r2 D% w: g                delete temp_cam;
" K1 e5 g6 f2 E8 q        } else if (camArray.length == 0) {4 y) k6 _  Z4 ^* ^& L
                camInfo_txt.text = '没有视频设备!';' ~0 E0 E1 I2 Z. `3 ^) p
                camInfo_txt.textColor = 0xFF0000;
- o# J0 v" j# }" ^+ g- H& T7 h        }, J4 g  @  Z* a( s
        //检测麦克风状态 9 N7 ~7 ~" E  _4 K  ~( y) `6 N
        if (micArray.length>=1) {
+ C. t( I1 B0 _+ n( R0 u) D                temp_mic = Microphone.get();
% Q. b0 f/ h) P3 \                if (temp_mic == -1) {5 Q% d2 {" A* g4 O8 H! e
                        camInfo_txt2.text = '麦克风正忙!';
" T/ s) h$ i& R& p2 k' N                        camInfo_tx2t.textColor = 0xFFCC00;( \! R/ d" E2 V8 t; s7 V5 f; W
                } else {
& p7 @/ i- h- s9 w2 ^; b8 i                        camInfo_txt2.text = '麦克风可用!';  Y: e: F2 J4 ?
                        camInfo_txt2.textColor = 0x66CC00;
8 J! v0 [" X* ~                }5 s2 G: I( A6 N' @7 G+ ?
                delete mic_cam;
, n" _8 u( S- U. s, ^+ S        } else if (micArray.length == 0) {1 ~* [2 X0 v, z2 {5 r
                camInfo_txt2.text = '没有麦克风!';* }) {5 K" ^; j8 o1 c2 @9 J1 a
                camInfo_txt2.textColor = 0xFF0000;
0 h( e% P3 S1 [' s        }
1 l$ M: o; |3 O- W' v}6 |  g% O, F' o
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 04:47 , Processed in 0.018477 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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