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

据说是Flash的视频聊天代码

[复制链接]
发表于 2010-2-23 19:15:52 | 显示全部楼层 |阅读模式
只是把以前做的单个的功能整合了一下,本来还想弄个FMS的视频聊天,不过虚拟空间没办法..
. r  p# N6 O9 f& G; X$ Xhttp://www.iphper.com/copstr; Q2 |( N3 j" I$ x1 M
光是留言板+在线涂鸦就几百行代码(看来效率低了点); z# l9 k) ~5 W1 n& r7 A! m

. p& r8 M6 J9 A7 X( M
0 i  h& Z  d1 A1 `FMS服务器的设置简单的仿照(一)就可以了,这段代码延续(一),加上了视频和语音发布,主要用到netstream.publish()方法,该方法也可以用于视频在线录制,除了检测摄相头和MIC状态的代码外,就增加了十几行的视频发布代码,有关摄相头和MIC的详细设置我并没有写,只是让大家看清楚它的工作原理,没有摄相头的朋友(我就没有摄相头)可以这样测试:打开麦克风说话,如果能听到回音就说明发布成功了2 t# j+ b+ i0 O

" {6 F0 h; W* R5 O8 Q3 Y/ Q+ J! e4 U/ m* q3 ~- z
! J. w; o$ |4 a
//建立与服务器的连接.3 x( `8 m5 J. {: z- j2 x. n  ~4 K+ a
var sv_uri:String = "rtmp:/recordstream";) _! |; H2 a1 D
var my_nc:NetConnection = new NetConnection ();
- ^' X3 ]3 C2 {" B1 y! }! wmy_nc.connect (sv_uri);
: a  e# V/ A6 {8 U5 V+ `//新建共享对象;
  K$ Z7 o* g  t9 |! Vmy_nc.onStatus = function (thisObj:Object){1 y; H9 s- N- l9 Q  q
        if (thisObj.code == "NetConnection.Connect.Success"){
2 I' T+ E2 F4 M4 u& a                info_txt.text = "连接服务器成功!!";
7 r9 p2 m: `5 e3 ~: r7 ]. ?1 C                info_txt.textColor = 0x66CC00;5 q+ G8 Z; Y6 B! `8 R. C: J
        }
$ a/ y1 z6 [7 W6 C9 D        else{
5 |4 \. r' ]8 G2 a" F                info_txt.text = "连接服务器失败!!"
" n- o5 z6 q1 r: P1 `: O5 u+ |. y                info_txt.textColor = 0xFF0000;$ N# v3 B3 E+ I' H% [/ ~+ K5 I& r. P
        }
9 R& o. [& K' o% @% v4 S' r+ G1 D}" ~" m1 n4 ?3 t% _  F- w
var user_rso:SharedObject = SharedObject.getRemote ("chat_rso", my_nc.uri, true);# k0 T/ f, g4 b
user_rso.connect (my_nc);
* I# U& d  [7 t  {. D- o* @9 Y, s//建立摄相头和麦克风对象
$ k( D4 Q8 L* e9 d1 tthis.cam = Camera.get();+ p6 X2 C. h1 Q) h, @
this.mic = Microphone.get();
+ }4 z, H( \3 M6 c) U8 Nvideobox.attachVideo(this.cam);
; `- M* @3 K& ~( Y2 fvideobox.attachAudio(this.mic);
' z' f2 O! X) y8 z$ A, c" G2 isend_ns = new NetStream(my_nc);
1 A/ A+ u. s, P+ Z* H2 I0 B/ E5 Zsend_ns.attachVideo(this.cam);0 o; ]; a/ f% o% m. ~0 J- V
send_ns.attachAudio(this.mic);
, G4 R7 ^. k. D6 e0 H# Y# Fsend_ns.publish("humorguy");
5 e( S+ b" M; Qget_ns = new NetStream(my_nc);2 K  ^( ], A$ c& L% Y9 K' J4 \& t( n
get_ns.play("humorguy");
6 u. R3 J, ?5 ]6 I, Dvideobox2.attachVideo(get_ns);
; u5 `( v% {  h! `//更新聊天内容% w# n$ F; m; P  Q5 @9 t$ h: L
user_rso.onSync = function (){+ ], T3 q8 R9 q2 I2 o- M4 f
                chatOutput_txt.text += newline+this.data.chatname +":" + this.data.chatcontent;
1 f- g2 _$ `3 N  `- c1 p                chatOutput_txt.scroll = chatOutput_txt.maxscroll+1;//确保最新消息能显示在输出框里
& I1 `; ]) D4 Q) L9 I}
. t2 C( f6 W9 }$ [+ ]+ I$ v+ B//回车键发送聊天内容6 L, F+ f. \- R/ I1 x7 T  C# p
function myOnKeyDown() {
' E. V: F2 u" w    if (Key.getCode() == 13) {
( }# W& Y: O) g+ |& \                if(chatInput_txt.text != undefined && chatInput_txt.text != user_rso.data.chatcontent){: g! M' S- b: G/ F. n) c
                    Selection.setFocus(chatInput_txt);7 v/ \9 I1 z7 m! r+ ?) U: A2 l
                        user_rso.data.chatcontent = chatInput_txt.text;
1 S: |: T1 v9 M7 U                        if(name_txt.text != "" && name_txt.text != user_rso.data.chatname){
' k2 J  v) l, {                                user_rso.data.chatname = name_txt.text;
9 k3 ^& S8 u2 L: Z! f6 v                                }5 Z  b' N/ {9 y
                }+ B; M' P" j$ M) g# n- B9 V. q
    }/ j4 @  X4 Q  M% @, W. _. ~
}
* y2 g# S' K# hvar myListener:Object = new Object();
& ^4 M% R% X2 O( lmyListener.onKeyDown = myOnKeyDown;
1 f4 l' W" d6 v6 I" \Key.addListener(myListener);
6 a' c5 c) e+ U8 r, I) ~//构造检测摄相头和麦克风状态的函数. `' k: r( d( ]
function checkforCam_Mic() {& P# c$ Y& w5 h& W2 [
        camArray = Camera.names;. W9 d9 t$ Y* R5 B( }6 ~1 \
        micArray = Microphone.names;  z$ o/ I" C5 Y4 j5 X$ K
        if (camArray.length>=1) {
7 {* r" H/ T  e  I  n0 ]                temp_cam = Camera.get();. C2 S6 g' K: R0 I# X
                if (temp_cam == -1) {- C# ^, O: |3 [8 j; b  O6 w3 e
                        camInfo_txt.text = '视频设备正忙!';
, Y) s/ H! E2 f* z: w                        camInfo_txt.textColor = 0xFFCC00;
4 h+ E' u2 V8 s8 b                } else {/ z- X8 O- ^" P! E
                        camInfo_txt.text = '视频设备可用!';
2 l' {5 g4 o! |7 v4 O1 e) f                        camInfo_txt.textColor = 0x66CC00;6 Y: [' J3 b+ H
                }
1 K( G" L, Y4 x$ @' B9 z6 q8 E# Z                delete temp_cam;* d% m: a2 P5 \2 `6 v
        } else if (camArray.length == 0) {
8 _4 v9 k, \" J" U- _8 n; q                camInfo_txt.text = '没有视频设备!';1 _; p$ `2 B) N# l& _
                camInfo_txt.textColor = 0xFF0000;. R0 A! r$ t& U5 u% c3 s
        }- W! l/ x* o3 y: t& J2 o
        //检测麦克风状态 7 ~, E8 H0 }+ |$ e2 T
        if (micArray.length>=1) {
, g. Z1 W3 B8 M                temp_mic = Microphone.get();
2 f: P; ?% `+ T( U/ C3 l7 v                if (temp_mic == -1) {" ^& F: s6 i3 N, c# F
                        camInfo_txt2.text = '麦克风正忙!';
! f$ Y" C2 P9 {, F8 G                        camInfo_tx2t.textColor = 0xFFCC00;
9 x5 S3 K6 V( h- Z                } else {
7 D" F# I0 Y6 W1 K' Y# r                        camInfo_txt2.text = '麦克风可用!';) r* S/ V9 n3 R7 B  p; {5 r
                        camInfo_txt2.textColor = 0x66CC00;2 L7 ?; ]  u, B( z- R$ I6 b) U" q+ j
                }+ O+ K5 d  V7 M& z6 q3 K! V
                delete mic_cam;
, D$ H' U! L3 Z3 V        } else if (micArray.length == 0) {
" K! j* m# P) x                camInfo_txt2.text = '没有麦克风!';9 f0 Q+ q+ h6 Z  [$ c4 p1 T
                camInfo_txt2.textColor = 0xFF0000;7 R4 x6 b' I$ Q6 R
        }
/ F5 y, {2 S7 r' T/ B}6 ^3 P' J9 s1 T7 K, B% ]; a
checkforCam_Mic();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 16:28 , Processed in 0.020312 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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