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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
' n1 S% W' }" C8 O$ Q- t% whttp://www.iphper.com/copstr5 w/ {. U6 T3 ~# \/ \1 `" C2 r9 b
光是留言板+在线涂鸦就几百行代码(看来效率低了点)
7 Q/ o/ C% J2 v3 J1 s/ k2 d, m+ E% e- d
3 k( f# \2 U3 U
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了) u- N4 |% E  l! e, m4 k: s
* @- S& j# z9 m2 O& U1 i

. _. W+ B$ K8 a, p9 Z/ ]: X: o
" j8 Z4 A8 d4 B* M8 F+ N$ Z//建立与服务器的连接.- s2 F4 a8 D- |5 H& }1 v: E
var sv_uri:String = "rtmp:/recordstream";8 y: I( o; u' ~/ H& u5 l3 b: }
var my_nc:NetConnection = new NetConnection ();
$ \+ e+ Q" v" Jmy_nc.connect (sv_uri);
2 R1 h" y4 h9 J9 o# e, b# H% w  e//新建共享对象;
8 v+ Q+ q3 W, t/ S2 fmy_nc.onStatus = function (thisObj:Object){1 l, o; ?5 T3 ?$ l2 H* x4 ]
        if (thisObj.code == "NetConnection.Connect.Success"){% B+ t9 g+ |& u0 @
                info_txt.text = "连接服务器成功!!";
: {$ b& {4 \) I2 r# m8 K6 M1 _                info_txt.textColor = 0x66CC00;$ N. K% d- S4 P; S# W3 l
        }
, K# L: I* `4 p5 Z        else{* i( c4 `& T4 B+ W
                info_txt.text = "连接服务器失败!!"
# V( k# a4 S, g7 Q  S5 A                info_txt.textColor = 0xFF0000;2 H6 H  t6 U5 r. S2 }$ ^
        }, P$ w, ^- F) ]5 e' L* j
}
( h" M; O- J) `3 j2 t" s+ w+ ]var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);; _$ u# s6 M; t9 a% P9 X! F, T
user_rso.connect (my_nc);
" M/ x) Y0 b( K( Z/ Q//建立摄相头和麦克风对象
1 N- o* ?  O5 W( F9 F, dthis.cam = Camera.get();) q! N6 W) z( }: Y
this.mic = Microphone.get();
* [+ t1 J2 ?, H# Y/ Gvideobox.attachVideo(this.cam);% c7 C6 S& N) Y0 \1 |" }
videobox.attachAudio(this.mic);, {$ y9 n* L9 l$ J/ t1 o
send_ns = new NetStream(my_nc);
  ]9 M5 c1 X2 `: R# ]8 Z/ jsend_ns.attachVideo(this.cam);- m( i4 V- D, l* p' b
send_ns.attachAudio(this.mic);
2 v7 Y. c  S3 osend_ns.publish("humorguy");+ ]0 \1 W/ y; L5 Q1 u% D, ?( b
get_ns = new NetStream(my_nc);
8 P$ q, M0 n. V! nget_ns.play("humorguy");
$ a+ Z( v* X* j, C9 Evideobox2.attachVideo(get_ns);
. A& V  A7 x1 k- D//更新聊天内容
: @& y( e- x. r! l9 O8 R" c+ a0 G8 ^: ~user_rso.onSync = function (){
3 e) I+ ?* ^7 r: Q- m                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;. b# v" _8 u6 ^& A: ~4 |7 B
                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
0 `# d: X: l9 n1 y/ ^; c0 @}: o/ d% _# P; a
//回车键发送聊天内容  a2 `: {' d. w
function myOnKeyDown() {
- l* F+ x" e/ e- j8 R5 p    if (Key.getCode() == 13) {
" R7 c- Z* F! G% t& v                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){4 }, z# Y9 l/ Z
                    Selection.setFocus(chatInput_txt);/ n3 R8 ]0 W; a  Q, c: V
                        user_rso.data.chatcontent = chatInput_txt.text;9 H7 e& }2 D; b# ]- h( V
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
% b( }& g6 c. \1 l                                user_rso.data.chatname = name_txt.text;
- W$ w) e4 G: p- V8 f3 @* B                                }' E, N: @. R( b) d
                }
, J8 o8 }# U7 S% t    }
; d# k( t& S8 D}3 S% X# e$ \8 r6 K* l, M9 t
var myListener:Object = new Object();
8 W* ~7 x% i0 a& T& }myListener.onKeyDown = myOnKeyDown;$ X- L. A! _# X1 o
Key.addListener(myListener);
* j+ L7 I' V9 m3 d+ t//构造检测摄相头和麦克风状态的函数
; L, V* L7 l* E3 I( Dfunction checkforCam_Mic() {) E1 q! R# V# g8 E) ^
        camArray = Camera.names;* I  Z" B/ Y+ l- D) [" u7 g
        micArray = Microphone.names;
7 _7 l$ [2 K4 z7 y: b        if (camArray.length>=1) {
2 L' H9 v- s$ D+ S8 {3 K                temp_cam = Camera.get();
3 M/ p' a( f" ~; o                if (temp_cam == -1) {
( R, V1 o3 N$ E# X0 j; j                        camInfo_txt.text = '视频设备正忙!';
5 d+ l) D$ h+ C  s8 y                        camInfo_txt.textColor = 0xFFCC00;
0 o% x! G2 n5 o                } else {
7 h' O( j9 ^' w& Z! I. c                        camInfo_txt.text = '视频设备可用!';
( D: r0 ^. R8 p% H/ u! V+ b7 x5 L. U                        camInfo_txt.textColor = 0x66CC00;" M+ w; r) |5 O3 R$ g+ c
                }
% P) T4 H$ ?8 ]6 ^' v                delete temp_cam;
$ o  w! [% q3 B, E* y- T        } else if (camArray.length == 0) {0 f2 b6 Z3 {, o% B5 u" I" N8 F
                camInfo_txt.text = '没有视频设备!';  w- ?: L) j- ~2 c7 O
                camInfo_txt.textColor = 0xFF0000;
1 d$ v$ N2 _* e; p        }
7 q6 J& \+ D! g+ C( \        //检测麦克风状态
. A$ c' O2 J7 ]" U* Z# m        if (micArray.length>=1) {
  ?3 @/ t2 ?' r# B4 D4 I                temp_mic = Microphone.get();& z# E8 f4 {) O$ J
                if (temp_mic == -1) {
  [! l, p9 z1 r" |/ t  g3 x                        camInfo_txt2.text = '麦克风正忙!';
7 ~/ @# A/ k! a$ A; B4 Y2 s; d& L                        camInfo_tx2t.textColor = 0xFFCC00;
- d6 ~  ^! Z) _" V: Y                } else {( r0 {+ C, n) ^8 |+ i+ ~% \
                        camInfo_txt2.text = '麦克风可用!';/ K) |! x1 a3 F+ P+ F
                        camInfo_txt2.textColor = 0x66CC00;
' }% B2 E2 t9 i" {& J                }
/ a, _5 h3 G, k1 e$ g% j0 t                delete mic_cam;2 f* b( b! f% K$ c0 u3 n2 B+ A
        } else if (micArray.length == 0) {/ b! ^" L3 ~7 X* b4 q. T5 Q
                camInfo_txt2.text = '没有麦克风!';" {0 E5 \* ~2 K; a
                camInfo_txt2.textColor = 0xFF0000;
0 _! j3 w; v5 h: O, P3 r1 p        }
5 @5 @7 X9 @: L/ g3 {0 G}
( p& ^' ^4 e3 p  r+ V' k. L/ i/ w3 GcheckforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-18 08:01 , Processed in 0.021557 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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