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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..& q" m7 I0 T1 B' }4 S; P( X
http://www.iphper.com/copstr& Y: M" h+ G2 J/ K
光是留言板+在线涂鸦就几百行代码(看来效率低了点)$ k& t6 [: Q, f. C5 \
% x1 _& e/ v& `# S+ e, h" [
; T. U9 U' U% p' z( f# O4 A
FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了/ _% T1 O1 y' c! C5 E! Y

( W! N* f8 O) ]/ c$ Z( \. n
7 n( Y- s5 _6 ^" C: G# p. a/ k; A. D; s
//建立与服务器的连接.
7 R/ p; N1 t' E* D/ x% t3 m! X9 |var sv_uri:String = "rtmp:/recordstream";& T4 J% L7 V8 r( A- d# X  I
var my_nc:NetConnection = new NetConnection ();
6 k- K9 t. s2 q& R" T2 a' Xmy_nc.connect (sv_uri);
+ v, s( m* c% c% g: g//新建共享对象;: W1 u& M1 v% r7 t. W/ [
my_nc.onStatus = function (thisObj:Object){, N' j: w: x+ N8 c# n
        if (thisObj.code == "NetConnection.Connect.Success"){
$ A' f: U# n8 b( f8 J  U                info_txt.text = "连接服务器成功!!";* F) Q& q! e5 M
                info_txt.textColor = 0x66CC00;
/ f  f6 S7 D9 V! E% d# }# x        }" [; c6 T. C! k( a0 T* k
        else{* U& U6 k$ p3 \  Y
                info_txt.text = "连接服务器失败!!") M+ F( l9 z. s& q. S0 }
                info_txt.textColor = 0xFF0000;3 {: @& j9 j  @3 k0 T
        }4 h9 L  Y: K+ M: x2 A
}: {4 |) {: U" z! \
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);
& q8 F0 ?# R- m' y& h6 \user_rso.connect (my_nc);$ [" x' u/ l4 Y7 B4 e9 n; X
//建立摄相头和麦克风对象( E3 G' }* E  j, [
this.cam = Camera.get();' a6 J& o. Q( @: v, i
this.mic = Microphone.get();  F4 P' `  N- N, U$ E8 A; y
videobox.attachVideo(this.cam);, F- L! O, \8 n; D, Q
videobox.attachAudio(this.mic);% [7 T( r& v7 p7 t/ S$ _
send_ns = new NetStream(my_nc);
5 _1 O' C' Q, [! c0 {+ Qsend_ns.attachVideo(this.cam);
5 I% a, L# d" N8 msend_ns.attachAudio(this.mic);" e( Z* {5 ~2 t4 E* n
send_ns.publish("humorguy");. l" t/ o# L3 B. K; w( M
get_ns = new NetStream(my_nc);
8 g+ W* O+ X! |  c3 G9 Y, ^& F$ mget_ns.play("humorguy");  _: j- Y' N+ A0 A( Q+ ~% u9 R
videobox2.attachVideo(get_ns);4 g3 E, [- |' f
//更新聊天内容6 d( V9 n; A3 L8 R, n  {" x
user_rso.onSync = function (){4 g! a: X7 J$ [9 w0 Q
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
; ]5 X- V' V8 r2 _5 S                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里1 Y4 i) f" C( l% U
}
, E& O8 S& f  r//回车键发送聊天内容- U! ]* Y. h3 Y" D& z' u, w
function myOnKeyDown() {. y& s0 m0 u- k$ F) W
    if (Key.getCode() == 13) {
& i. A& [, _' U" a/ R' P" C9 t8 c) L                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){# p3 e, x8 |& {6 q5 S
                    Selection.setFocus(chatInput_txt);' u4 P# F# ^& }) [5 H2 A' ]# J, f- q
                        user_rso.data.chatcontent = chatInput_txt.text;
0 |- w5 g$ T+ M3 b, `2 W% n                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
. }7 e# {& V; ]. a  A                                user_rso.data.chatname = name_txt.text;& X$ b6 ?) Y/ Z; A1 M. o& K. y
                                }
/ C' u% i' j* V8 X                }% O* I: u$ F9 \# |
    }, J2 Q0 g2 a5 g( r" E
}
$ w! d2 o6 G) uvar myListener:Object = new Object();7 ~# e2 d' d) ?, \2 Y
myListener.onKeyDown = myOnKeyDown;# ]" |; y" k5 u1 V4 U6 i7 N
Key.addListener(myListener);5 Q' x0 k- V! t& w5 H% I- E
//构造检测摄相头和麦克风状态的函数) C) g7 B/ J' _9 r+ a4 o. _
function checkforCam_Mic() {; [; @* j# F! O
        camArray = Camera.names;
6 ^, ?& `, A2 x- S+ j; ]# B: A' A, d5 V        micArray = Microphone.names;
5 m$ L7 N, C$ [- j  S- H2 v/ n        if (camArray.length>=1) {
) ?: f* v5 |- A2 {% ~                temp_cam = Camera.get();* i  r4 H" e% I# K1 V% l
                if (temp_cam == -1) {
. h$ |9 W' K# I                        camInfo_txt.text = '视频设备正忙!';8 C1 O1 b7 |. ?+ P
                        camInfo_txt.textColor = 0xFFCC00;) p, W2 B5 ^; J- z$ ~2 \
                } else {
. y; Y- `) D. B                        camInfo_txt.text = '视频设备可用!';; e" E8 D4 {) p& @& d) k; U/ D3 }
                        camInfo_txt.textColor = 0x66CC00;
/ k) E# J& B) H# O2 @: ~                }
& a; M2 o( B9 Q/ o( u                delete temp_cam;, K& B" _8 B$ |
        } else if (camArray.length == 0) {
% d1 o; Y1 O  W/ V* E                camInfo_txt.text = '没有视频设备!';
9 B% v$ O! v- a! R5 Y3 D! e$ y+ V                camInfo_txt.textColor = 0xFF0000;
, k5 @9 U0 v" k' Y        }( n( g& |. U& C% H( ~# {
        //检测麦克风状态
/ E. ?- o6 K7 ~4 u0 a! d2 T8 N5 N6 _        if (micArray.length>=1) {
6 G6 f2 N5 W7 a/ X- E' H* p                temp_mic = Microphone.get();
# q. a; A' ]+ I                if (temp_mic == -1) {4 j: Q9 Y- |3 t: _; ~5 E- V& ?0 o
                        camInfo_txt2.text = '麦克风正忙!';
& b, s4 k- ~1 ?# i4 t0 J9 D9 N, }                        camInfo_tx2t.textColor = 0xFFCC00;
' D1 w0 ?/ c" J. I* S( L                } else {
& d9 n6 H- H9 B2 ^' B                        camInfo_txt2.text = '麦克风可用!';
5 p+ F- x  [0 ^( V3 ~9 G8 A8 s3 y                        camInfo_txt2.textColor = 0x66CC00;
) P( X+ q( U. d: c3 q7 w                }( k; \6 C" L" L  I
                delete mic_cam;
+ k! E5 T1 Z& n1 r( f+ Q! V& l        } else if (micArray.length == 0) {/ J2 X  |7 g7 T& M) A. s- H# y
                camInfo_txt2.text = '没有麦克风!';! M0 P3 v: f4 F$ V+ g/ I! A! d
                camInfo_txt2.textColor = 0xFF0000;
5 x" U8 A' c1 R* E. \. @& p        }
9 z/ J( W7 d9 I) f, j6 K}% @) n) j( }: M9 j
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 08:55 , Processed in 0.018093 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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