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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
7 @. [6 w# o9 @; whttp://www.iphper.com/copstr
" g, ^6 Z5 [) F% {+ `7 o; n, m8 X/ K光是留言板+在线涂鸦就几百行代码(看来效率低了点)
' m5 i) \) Y7 O  x6 J# G$ Y4 X
2 @# ^8 [' C% G) t; Y8 {5 Y( w3 b1 t- B7 {5 N8 l
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了
1 k) j  L( O8 X* Z5 D5 C- L
# r8 R1 S3 N& {. U2 \2 _7 Q) U7 O1 l. X% a

. D3 Q9 y0 E$ w//建立与服务器的连接.
( D" ]' W  u' t( kvar sv_uri:String = "rtmp:/recordstream";: s1 N9 x5 R$ z- q, f
var my_nc:NetConnection = new NetConnection ();
( i5 m9 }  R' J% |( o% L& a1 U4 Wmy_nc.connect (sv_uri);9 \3 W; G9 M1 Z6 u
//新建共享对象;  g7 m8 O8 z+ C& X8 a
my_nc.onStatus = function (thisObj:Object){
$ [  j5 _5 d8 j4 p( G  q+ {+ V. n        if (thisObj.code == "NetConnection.Connect.Success"){
/ ?/ z/ x* L$ c/ v                info_txt.text = "连接服务器成功!!";
+ [: Y# V3 K; Y- _  C% t                info_txt.textColor = 0x66CC00;
: L) Y$ a" v, W        }
5 |# M2 T% s" J' F: u6 @$ B+ y        else{' W. x' x- w# S6 }% z' m. t
                info_txt.text = "连接服务器失败!!"; ?; y& y  p5 R7 S- T( `) Q
                info_txt.textColor = 0xFF0000;) T) y- H' q0 U7 L  W2 o
        }
! p5 F( d9 Y8 c* P  R0 V# h- Z- D1 Z}
% D* w( I" a4 d1 qvar user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);$ j* M0 z- t. R, ~- U* w$ R
user_rso.connect (my_nc);" M( b8 |2 a0 y4 U2 a- k& e& o! o
//建立摄相头和麦克风对象" T8 f8 G+ H6 r0 p
this.cam = Camera.get();8 j. z" y% E% I" T& q# y
this.mic = Microphone.get();7 m3 T- \7 g3 x' ?, L
videobox.attachVideo(this.cam);
: B5 W& y( i1 v  z0 Z% |. mvideobox.attachAudio(this.mic);
- i, Z9 ~" C# Y* Q$ P7 Hsend_ns = new NetStream(my_nc);. `& B% }5 l4 I0 I* C/ u
send_ns.attachVideo(this.cam);; T0 C  g( ]/ B: c
send_ns.attachAudio(this.mic);2 r7 L# L0 N9 F- Y7 C
send_ns.publish("humorguy");
9 _" b. g0 \! D; Hget_ns = new NetStream(my_nc);
  @! n. U9 {  i& Q3 u% aget_ns.play("humorguy");
0 U8 X2 }& |( L/ M- lvideobox2.attachVideo(get_ns);
% m( D, U. A* }% o! `1 d5 t; y, A1 o//更新聊天内容
% O& W' C, ?9 ^user_rso.onSync = function (){
. u! A! ~; d% I8 a, J  T( {3 J                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
; c" V/ [0 b6 F* c; P2 f/ q8 p                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里0 \: H" ]: g& p+ _2 t
}: \# u( B7 \3 \! |3 m
//回车键发送聊天内容
; O* ]0 Q9 J7 F: yfunction myOnKeyDown() {
5 f$ b9 [% w; V% M' z1 k    if (Key.getCode() == 13) {: a: p' F  O8 y$ y  A1 F  v
                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){
% B! h" ~2 h& o7 Z( v7 ?3 _                    Selection.setFocus(chatInput_txt);
5 b; E# a' o5 \9 w2 P2 ^7 I                        user_rso.data.chatcontent = chatInput_txt.text;# J" e: K+ \$ a) v& @9 ^
                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
' W/ }! W+ s: L7 R- A# ]                                user_rso.data.chatname = name_txt.text;
& |6 f1 ~) S# E$ o% B& \! r                                }
, u* r7 b1 l# Z9 Y9 f                }
$ e. v' g3 {2 j! `    }! h& g3 A7 F) a- b: ^
}
  ?$ M8 E% _! o' Mvar myListener:Object = new Object();5 T) x* U. C+ u9 _/ k# @# d
myListener.onKeyDown = myOnKeyDown;/ ^9 l. D2 V7 B1 T# h. P
Key.addListener(myListener);
* ?( c# X. E$ c7 x, P//构造检测摄相头和麦克风状态的函数0 O0 g6 c% a' s; c" F3 j
function checkforCam_Mic() {, k- H4 C. M/ Y+ G" G
        camArray = Camera.names;
: |  ?. v! P  v$ t- S% r7 _2 |7 `        micArray = Microphone.names;
& v7 V- l9 D+ d7 S: Z0 Y7 s        if (camArray.length>=1) {" A1 }) Q! [5 H! B! w
                temp_cam = Camera.get();6 c5 ?( c, h7 R2 ]
                if (temp_cam == -1) {
* h3 c9 y0 Q% C: P% B* d                        camInfo_txt.text = '视频设备正忙!';9 C' g: F; ^* D/ [  y
                        camInfo_txt.textColor = 0xFFCC00;2 W  Y1 j/ z5 D) q0 f8 Z6 h
                } else {4 m/ @7 N; F% r1 E
                        camInfo_txt.text = '视频设备可用!';# B# ^- y- A& j: }# X8 \( e$ e% D
                        camInfo_txt.textColor = 0x66CC00;
" h7 M6 t- G% l: _4 S) v1 R5 e$ l                }& @$ c- f6 G6 Y  P3 s
                delete temp_cam;/ Y- L. ]6 X( _2 q0 t6 {
        } else if (camArray.length == 0) {2 l1 {, z: l* Z, l' O* r$ z
                camInfo_txt.text = '没有视频设备!';
; d6 ?  P. h$ B* `                camInfo_txt.textColor = 0xFF0000;
! ?0 p: c& }7 a        }/ A( n) }/ S! Y9 ^
        //检测麦克风状态
1 `) T, i$ I* g1 v( }        if (micArray.length>=1) {
  ]& t$ @2 T8 F4 ?! a                temp_mic = Microphone.get();- s! ~) F" r1 I4 e  x
                if (temp_mic == -1) {
% T' [0 x( c5 `/ e& R                        camInfo_txt2.text = '麦克风正忙!';5 {* k: i  w3 A7 H$ V* j, l
                        camInfo_tx2t.textColor = 0xFFCC00;
6 Q  m0 J( R# `                } else {- @: W" ^' o- ~$ z& R4 X* @
                        camInfo_txt2.text = '麦克风可用!';( I* C7 w, V" x% o7 ^5 Q6 q8 h
                        camInfo_txt2.textColor = 0x66CC00;* ]  S5 T0 s7 r6 ^6 J: Z2 R
                }
' a- S% r( t  ^& ^9 D# [0 |                delete mic_cam;) h9 Z7 k) ?  D4 V" T
        } else if (micArray.length == 0) {% p0 S$ x; ~4 [2 {# s+ _
                camInfo_txt2.text = '没有麦克风!';
" P9 |' a. {0 R3 }                camInfo_txt2.textColor = 0xFF0000;
3 Z1 G0 J$ N! [5 ~1 U3 S4 l/ |- A8 C        }
! r+ Z8 n: |( ^* J7 K+ V}( f& X/ K0 ^; X1 W: f0 ?' J
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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